Better Software magazine's Feature Article
By Payson Hall
For many of us, design is the most enjoyable part of software development. Oh sure, debugging can be fun and it is wonderful when everything comes together at the end, but if you're like me, you prefer to spend a little more time "up front" during design to minimize the complexity of debugging and maximize the likelihood that it will all come together.
Design is the all-too-brief period during an application's evolution when we consider what we want to create and speculate about how we want to do it but are not yet fully committed to any particular approach to the problem. A shortcoming of some of the best programmers I know is the tendency to minimize this "pre-coding" thinking time and begin implementing the first viable solution that occurs to them. The trouble is that there are several ways to solve most problems, each exhibiting various levels of efficiency, ease of implementation, maintainability, and portability. If a designer stops with the first design that "works," there may be a needless sacrifice of quality. In this rush it is easy to confuse a functional design with a quality design. The distinction can be subtle, particularly if both are implemented professionally, because both will get the job done. The difference in development and maintenance costs, however, can be remarkable.
Read More: http://www.stickyminds.com/BetterSoftware/magazine.asp?fn=cifea&id=91