Tuesday, 25 August 2015

Production Code is Dirty

Production code is dirty. Dirty may be the wrong word however. Complex could be more suitable. Unlike code that is not yet in production, it is weathered, proven, and full of edge cases including numerous bug fixes. After some time this build up of additions can cause the code to be considered dirty or legacy.

Greenfield development used to appeal so much more. Small classes. Small methods. Few dependencies. Just simple, clean code. Except this is not the case. Get into production and that clean code starts to weather. You'll handle edge cases, fix bugs and stabilize the functionality. That lovely, small, well factored application starts to accumulate dirt. The new code smell wears off and you're back waiting for the next new project so you can do it properly a second time around.

This does not have to be the case however. Long living software such as operating systems, browsers and embedded systems are maintained and extended well after they were created. Production code can be complicated but still clean with redeemable qualities. In order to do this you should write tests, control dependencies and get into production or the hands of the user as soon as possible. This may seem an obvious solution but sadly many software projects fall into this trap of dirty code after a handful of iterations.


  1. Bug fixes are a sign of inadequate precision of the requirements and design. Unfortunately, in the majority of cases maintenance is relegated to the less experienced staff, who struggle to understand the original design and the decisions made. And of course, they are generally under pressure to get lots of bugs fixed and quickly.

    Long living and robust software tends to have at least some of the original designs and developers actively involved in the maintenance phase.

    In my experience with business software, many edge cases are arise from business rules being bent to accommodate various entities. These edge cases are often not disclosed during analysis phase because they should not have been permitted in the first place.

    1. Thanks for the comment.

      Your point about maintenance being performed by other developers is a big factor.