Never give up software?

Is it possible to throw away software?
Joel completes a company should never give up software.

I try to be a good programmer and follow this rule. I came to a five-year project that was run by one person. It is filled with anti-patterns and, as a rule, poor design. Most of the problems are related to the data layer with embedded dynamic SQL.

  • Pro: users are familiar with this application works and is convenient with its errors. Requirements: built, but there are some underlying problems that caused users to ask a question about the overall reliability of the application.
  • Con: Anti-patterns, intensive connection, embedded SQL, impossible data level.

I could reassemble requirements and build using OO, design patterns, and modern .NET technologies to build this application. manageable and capable of work.
In small applications with such problems, should we follow Joel's recommendations?

This question may be discarded for subjectivity, but I believe that it is crucial for my work as a programmer.

+6
software-design
source share
8 answers

What Joel does is that if you throw everything away and start from scratch, you throw away years of work without any guarantee that rewriting will be much better than what you already have.

Instead of focusing on rewriting, consider the practicality of refactoring one part of your application at a time. Instead of embedded SQL, perhaps consider creating a new data layer, perhaps based on a “better” approach such as LINQ. You can then transfer one function at a time to a new layer. Thus, you will move forward towards your goal of a better code base without discarding years of previous work.

+11
source share

My advice would be that. If this works, do not contact him until the next significant version of your application appears. Then refactoring as you see fit. We are facing the same thing in my company, and we usually deal with the problem as I described.

Do not discard the old code, or the bad code, or the code that is no longer relevant, this is IMO, it's funny. If the code does not have key elements that simply cannot be reproduced.

+5
source share

Most of the problems are related to the data layer with embedded dynamic SQL.

As long as there is some difference between the user interface and the data, this is not necessarily a problem. Do not prejudice embedded SQL - as long as it is parameterized, this is a completely feasible approach.

Take the question; I would question the technical reason for its disposal. If you can justify this in real terms (ideally in $ £ € ¥), then great. But do not do this just because you do not like the look. I used to transcode the code, but trying to do this without regression can be tortuous.

As for users; they really do not need to know that there are changes, but even if you want to change the user interface - most people are quite flexible and will gladly adapt to the new user interface.

+4
source share

Instead of throwing everything away and starting from scratch, I would reorganize it when I go, making small changes supported by unit tests. The cost of dubbing from scratch is rarely worth it.

+3
source share

I think that the software, as you describe, is not just thrown away, but perhaps it should be reorganized without any recognition, perhaps after the first writing of a lot of tests to make sure that nothing broke during the process.

At that moment he was thrown out or not? I would say yes, although the final name of the EXE and the visible operation may be the same. In short, I think this may be more a matter of semantics and pragmatism in the face of real constraints than actual best practice.

+1
source share

This is exactly the case when you want to keep the old version;)

Until you replicate the new system with the exact errors of the old ones, users will demand that the old application be returned ... Many users will see some errors as a function (for example, the “quick shutdown option” or any other quirks you encounter)

+1
source share

As a rule, it is very difficult to make a business justification for a complete rewrite when customers are “happy” with the product. My advice is to reorganize when you are developing new features in order to slowly move to the desired architecture. This is often easier said than done, but it may make sense for projects as you described.

0
source share

All Articles