December 7, 2012 §
This is an extract from a rather long comment I left on this blog post and thought was worth posting separately:
Something that has become apparent to me in the past decade is that software quality is something that can only be measured in hindsight. Most good programmers can write a program that achieves an immediate goal in a reasonable number of lines of code, with a reasonable performance profile. But any significant body of software itself does not exist in a static environment. Really good software is easy to change when the environment it runs in changes. The software might be running inside a company that frequently, or even continually, is evolving its operating practices. Low-quality software impedes that evolution by being rigid and difficult to update. High-quality software can be easily updated to cope with that change. The updates are isolated into well-defined modules with high cohesion and low coupling to other parts of the system. High-quality software is software that the other parts of the business to not end up coming to despise because of its lack of ability to support what they want to do next.
Truly great software goes one step further: it sparks the imagination of its users to think of doing things that they would not have though of otherwise, and is easily changed to support those new ideas. This creates a feedback loop that results in both better software and better use of that software than anyone ever anticipated.