It never ceases to amaze me how short sighted management at many companies can be with software developers. Jeremy Miller mentions a discussion he had at the Austion Code Camp in which several developers were really unhappy with their work situations for very legitimate reasons.
I am reading a book called Beyond Software Architecture and just finished a short section on Design Debt. I’ve read and written on this topic before, but I focused on the cost to change code that is in debt. Luke Hohmann takes it further, noting that by not paying off that debt, a developer’s attention to quality is deadened. If the management does’t care and won’t allot the necessary time, what can we do? Not only that, allowing the code to remain and incur more design debt chips away at developer morale.
As Jeremy points out, there are two solutions, try and be a leader, institute good practices, and convince management to allocate the time, or move on to greener pastures.
And you know what?
Management doesn’t care. Many of them see developers as plug-and-play. We’ll just get another one. Ignoring the cost to recruit and hire a new developer, they’d rather just plug in a new developer than make difficult systemic changes. Changes that would ultimately lead to the benefit of the bottom line, but does not do so immediately in a manner they can show off to their shareholders, bosses, whomever.
So what is the solution? Unfortunately I do not have much more to offer than what Jeremy points out. Personally, I make all efforts to refuse to compromise on certain practices in the first place. I am not always successful, but I have worked in high pressure situations where I simply refused to lower my attention to quality and still took the time to write unit tests and spend time refactoring. My successor at one job even IM’d me out of the blue to congratulate me on the quality of code I wrote in such a chaotic situation. That felt pretty good.
And the funny thing is, it did take a bit longer to reach code complete, but I do not think the overall time to release was extended. “Code Complete” usually meant to now find and fix all the major bugs introduced from rushing it in the first place.