Quality with a Name

A good airplane design balances the trade-offs of safety, carrying capacity, fuel consumption, and manufacturing costs. A great airplane design gives you better safety, and more people, for less fuel, at a cheaper price than the competition.

What about software? If we’re not balancing speed/space trade-offs, what are we doing?

Actually, there is one trade-off that we make over and over again. Java, C#, and Ruby demonstrate that we are often willing to sacrifice computer time in order to save programmer time and effort.

Some programmers flinch at the thought of wasting computer time and making “slow” programs. However, wasting cheap computer time to save programmer resources is a wise design decision. Programmers are often the most expensive component in software development.

If good design is the art of maximizing the benefits of our trade-offs—and if software design’s only real trade-off is between machine performance and programmer time—then the definition of “good software design” becomes crystal clear:

A good software design minimizes the time required to create, modify, and maintain the software while achieving acceptable runtime performance.

Oh, and it has to work. That’s nonnegotiable. If a Boeing jet can’t fly, its fuel efficiency doesn’t matter. Similarly, a software design must work.

Get The Art of Agile Development now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.