Chapter 7. Adopting Typechecking Practically
Many developers dream of the days when theyâll finally work in a completely green-field project. A green-field project is one that is brand-new, where you have a blank slate with your codeâs architecture, design, and modularity. However, most projects soon become brown-field, or legacy code. These projects have been around the block a bit; much of the architecture and design has been solidified. Making big, sweeping changes will impact real users. The term brown-field is often seen as derogatory, especially when it feels like you are slogging through a big ball of mud.
However, not all brown-field projects are a punishment to work in. Michael Feathers, author of Working Effectively With Legacy Code (Pearson), has this to say:
In a well-maintained system, it might take a while to figure out how to make a change, but once you do, the change is usually easy and you feel much more comfortable with the system. In a legacy system, it can take a long time to figure out what to do, and the change is difficult also.1
Feathers defines legacy code as âcode without tests.â I prefer an alternate definition: legacy code is simply code where you can no longer discuss the code with the developers who wrote it. In lieu of that communication, you rely on the codebase itself to describe its behavior. If the codebase clearly communicates its intentions, it is a well-maintained system that is easy to work in. It may take a little bit of time to ...
Get Robust Python now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.