Chapter 52. Learn to Love Your Legacy Code
Uberto Barbini
What is a legacy system? It is old software that is very hard to maintain, to extend, and to improve. On the other hand, it is also a system that is working and is serving the business; otherwise, it would not have survived.
Perhaps, when it was first created, a legacy system had an excellent design, a design so good that people started to say, “OK, maybe we can use it also for this, and this, and this.” It becomes overloaded with technical debt, but it still works. These systems can be amazingly resilient.
Still, developers hate working on legacy systems. It can seem there’s more technical debt than anybody could ever repay. Perhaps we should just declare bankruptcy and move on. Much easier.
What if you really have to maintain it? What do you do when you have to fix a bug?
Solution number one: duct tape. Hold your nose, fix the defect—“OK, we may regret this one day, but let’s do this copy–paste now, just to fix it.” From there it will only get worse. Like in an abandoned building, it may stay undamaged for a long time, but as soon as there is a single broken window, it will soon be left without any windows intact. Just seeing one broken window encourages people to break others. This is the law of broken windows.
Solution number two: forget the old system and rewrite from scratch. Can you imagine what the problem with ...