2010/06/03

Rewarding maintainable code

In many software projects, developers are mainly rewarded for implementing new features. However, besides functionality, quality attributes like maintainability are also a key factor for staying competitive in the software industry. If the maintainability decreases over time, the cost for introducing new features will increase and in the worst case, the project will be unable to respond to new market demands in a timely manner.
In my opinion, developers should be explicitly and transparently rewarded for assuring the maintainability of the software, e.g. through refactorings or excellent technical design.
Unfortunately, the positive effect of new features is visible much earlier than the negative consequences of bad design or weak code quality. However, if we understand that investing in maintainability pays off on the long run, we could employ known methods for assessing the maintainbility of the software and reward developers for producing and sustaining maintainable code.

Code Reviews

Code reviews are an effective method for finding defects in software. Unfortunately, they are not very common in practice. Often, they are omitted due to time pressure and/or for cost reasons.
However, it has been known for a long time that the later a defect is found in the software lifecycle, the more costly it is to fix it. Reviews can be used to find defects early, even in the requirements elicitation or design phase. I think reviews should be used in conjunction with tests, since they are complementary. The one is more effective in finding certain types of defects than the other and vice versa.
In my opinion, many software projects could benefit from employing a lightweight review technique like Peer Reviews using state-of-the art review tools like Atlassian Crucible.