I’ve always thought of Software Design and Software Architecture as different from other design disciplines. After all, building a house is way different then constructing software. And I also read a lot of books on Software Architecture, and in these books, the authors often point out the differences, such as:
- We have only been building software for fifty years but we have been building houses for several thousands of years.
- Software is more malleable and can be modified easier than a building.
- Design patterns for software don’t look much like design patterns in other disciplines.
And yet I have discovered a book about design that applies to software in a big way. It is title Universal Principles of Design, by Lidwell, Holden, and Butler. This book contains 216 design principles, with each described on a few pages or less, with diagrams and quotes from other sources for each principle. The book is brilliant.
Here are some of my favorite principles that I use in my work:
The 80/20 Rule
“A high percentage of effects in any large system are caused by a low percentage of variables”.There are many examples you probably heard about with this rule. Some listed in the book are:
- 80 percent of the town’s traffic is on 20 percent of its roads
- 80 percent of a company’s revenue comes from 20 percent of its products
And my favorite:
- 80 percent of a product’s usage comes from 20 percent of its features.
What if we could focus our efforts only on that 20 percent of the features? Productivity and success will follow.
Another favorite:
Mental Model
“People understand and interact with systems and environments based on mental representations developed from experience”.
A great example of this given in the book is the interaction with ABS brakes. With a conventional braking system, the drier should pump brakes on a wet slick surface, but with ABS brakes, the car will properly stop and make a turn when slamming or steering while braking. If you are a driving used to conventional brakes, you may not understand this when using ABS brakes.
The book says that designers often have accurate system models but inaccurate user interaction models. Users have accurate user interaction models but inaccurate systems models. Designers need to obtain user interaction models to create designs. They can obtain this by testing and interacting with their designs as users. One of my goals in the next year is to be a tester for all my designs.
And my favorite so far is:
Ockam’s Razor
“Given a choice between functionality equivalent designs, the simplest design should be selected.”
A great example of this is the Google search interface. Nothing could be simpler and it continues as the main interface to the search engine.
Another application is with interfaces. When I design interfaces I strive to make the fewest methods possible. It is a struggle to do this but each method is carefully evaluated.
I plan to read and reflect on a principle a day with this book and will blog on other principles in the future. I feel like I found a treasure cove of ideas for my daily work.