The New Standard for Software Design
Master software architect Juval Löwy presents a simple design standard for software engineering, which will facilitate absorbing and adhering to correct design directives and guidelines.
In life, an ounce of prevention is worth a pound of cure because it is almost always much more expensive to fix a problem than it is to avoid that problem in the first place. Software development is an extreme example of this simple observation. Unlike physical systems, software is as close as it gets to pure thought, and there are no physical constrains on complexity. Coupled with inexperience, misguided concepts, time pressure, and expediencies, many software projects spend too much time and effort resolving problems and fail to deliver on their commitments. Developers can avoid wasting time and money by adopting a comprehensive coding standard which enforces proven best practices, avoids pitfalls, and enables knowledge dissemination across the team.
Traditionally, such coding standards were thick, laborious documents detailing the rationale behind every item in the standard. While these are still better than no standard at all, such efforts are usually indigestible. A good standard should be very thin on the "why" and very detailed on the "what." While fully understanding every insight that goes into a particular decision may require years of experience, applying the standard should not. This motivated me in 2003 to publish the C# coding standard (which has since become the de-facto industry standard for .NET development), followed in 2007 with the WCF coding standard.
Software architects must be more proactive than software developers in adhering to a standard simply because of the pendulum effect—even small mistakes at design time have drastic consequences at development time and over the life of the system. Furthermore, fundamental (and often avoidable) design mistakes are almost always catastrophic, resulting in disproportional cost in time, market position, reputation, and careers. Similar to a coding standard, I saw the need to define a design standard for software engineering, which will facilitate absorbing and adhering to correct design directives and guidelines. All other engineering disciplines apply design standards, such as those used with buildings, airplanes, and power plants.
The standard, available on http://www.idesign.net/, contains the best practices from my book Righting Software (Pearson Addison-Wesley, © 2020) and the Master Classes I teach—ideas that we have practiced successfully at IDesign across countless projects. The design standard directives are simple and consistent, both internally and with every other engineering discipline. Over time and with practice, applying these concepts becomes second nature.
Note that the elements of the standard on their own may not mean much because you still must know the context for each item. Nevertheless, the standard ensures that you do not omit an important attribute or consideration. This makes the standard essential for architects in driving successful system and project designs. For a full understanding of the ideas and motivation behind the design standard, and further guidance on addressing the critical challenges of software development today, I refer you to the Righting Software book.
About Juval Löwy
Juval Löwy, founder of IDesign, is a master software architect specializing in system and project design. He has helped countless companies around the world deliver quality software on schedule and on budget. Recognized by Microsoft as one of the world's top experts and industry leaders, he participated in internal strategic design reviews for C#, WCF, and related technologies, and was named a "Software Legend." He has published several best-sellers and numerous articles on almost every aspect of modern software development. Löwy speaks frequently at major international software development conferences and conducts Master Classes around the world, teaching thousands of professionals the skills required of modern software architects and how to take an active role as design, process, and technology leaders.