by Jim Brosseau
In a perfect world, the process of software development should consist of a series of appropriately selected steps, each of which clarifies some aspect of the system as we proceed from inception to deployment. Done properly, there should be no "and then a miracle happens" steps along the way, as can occur when we dive right into the code after throwing together some concepts on the back of an envelope.

