Thursday, 17 February, 2005
The following is the final paragraph of an email that I received from the lead developer on a large enterprise software system. He was debugging a performance monitoring application and that lead him to problems in all parts of the system.
I've uncovered many more problems in the last 80 or 90 hours of debugging, too many to list or bother to discuss at length. Error handlers were completely missing or completely wrong, logging was incomplete or missing, copy and paste errors were propagated over and over again instead of using proper sub-classing. Some of these problems were simple defects, and others were the side effects of code entropy and general complexity weighing in our team. To be fair, many of the bugs had my own handwriting on them. But many of them were the product of laziness and general indifference on the part of the developers. Every time I embark on one of these marathon debugging efforts, I'm always surprised at how much we have, and how much of the code is poorly written or never traced. But it's the indifference to the problem that's really troubling. Please be sensitive to the fact that the code you write impacts the other people on your team, and if you fail to take ownership of it and do a good job, somebody else might be forced to do so, at tremendous personal expense. Your work impacts the product, the people, our productivity and more generally our revenue, directly. That being said, I'm tired and frustrated, but not discouraged. I'm hopeful that our recently expanded team will lead us to improved productivity and allow us to focus more on quality than we have been able to in the past.
The the product in question will remain anonymous, although I will say that it is not a project that I am personally involved with. The particular product isn't relevant anyway as this kind of thing is common, especially in mature software systems that have undergone several generations of enhancements. Developers who have been on the project for a long time get bored and lazy, and younger developers often don't understand the finer details of the coding standards (error checking and usage patterns, especially) that have become almost automatic for those who have been with the product since its inception. The result is inconsistent and often buggy code that is difficult to debug and maintain.
There's not much else I can add beyond what my friend wrote. Attitude matters in programming, perhaps more even than aptitude.