On Feburary 11th, I had the opportunity to hear graphic designer Michael Bierut speak at Lipscomb University. Bieurt is a partner at the design firm Pentagram and is widely recognized in the graphic design community. During his talk he shared 10 design principles which he had learned throughout his career. While these principles are intended for graphic designers, I think they are also relevant for software developers. These are principles, not rules. Some of them might not make sense for every application, but they useful to keep in mind.
1. There are no little problems
Bierut elaborated on this principle with the infamous story of the ballot design mishap in the 2000 US election. There are no little development problems. Many potential clients have probably come to you with an idea for a “simple app”, but you know better. There aren’t simple apps. There are no simple software design decisions. As you write code, keep in mind the impact your solutions have. Evaluate all the options and list out all the possible scenarios for the problem you are trying to solve.
2. Things should be as simple as possible, but no simpler
This principle actually came from Albert Einstein. Strive for elegant, simple solutions, but don’t overdo it. Strive for clarity and don’t write every thing in one line. Avoid oversimplifying and separating out everything into its own line. Use whitespace for readability but be concise.
3. Invention is good, reinvention is better
This is a hard principle for developers to follow. Bierut used the example of his visual identity work for Saks Fifth Avenue. He studied the past logos of Saks and found a way to give an old design new life. I have known a lot of developers who are always trying to reinvent the wheel. The framework they are using isn’t good enough, so they are just going to create their own. The existing codebase is outdated and too complex so they’ll just throw it out. Software developers must fight the urge to always start from the ground up. You can save lots of time by working with what you have. Sometimes you need to learn how to reuse rather than building something new.
4. All graphic design is about themes and variations
For this principle, Bieurt talked about his identity work for the Museum of Arts and Design in New York. The theme was clearly the abstracted letterforms and some of the variations are displayed above. Good software design should be about themes and variations. Throughout the iOS frameworks there are themes and variations. There is the theme of views having a datasource and there is a variation on that theme for UIPickerViews and UITableViews. Establish themes in your code and adhere to existing themes. After establishing these themes the rest of your work will be creating variations. By following themes and variations, other developers will have an easier time understanding your code. You will have an easier time making decisions because you have already created a structure.
5. If you want to be a problem solver, you have to love problems
Good graphic designers and software developers should love problems. Both fields essentially revolve around solving problems. Do you thrive off of finding a solution that is elegant and effective? Would you care about finding a solution even if you didn’t have to solve the problem anymore? Finding a love for problems will make your daily programming enjoyable and rewarding. If you don’t love problems, you might need to find a new line of work.
6. If you’re digging a hole in the wrong place, making it deeper doesn’t help
Graphic designer Seymour Chwast originally coined this principle. If your fundamental approach is flawed, continued effort is not going to help. Sometimes you need to stop finessing bad code and just remove and rewrite it. Maybe you tried to hard with principle 3 and spent time trying to reinvent something that should have been left behind. Think about how long you have spent in a particular approach and periodically evaluate whether or not it still seems like the right direction.
7. The subject matter always knows the form it wants to assume
The above poster for a lecture series at Yale is one of my favorites of Bierut’s work. The Barcelona daybed by renowned architect Mies van der Rohe is the perfect visual imagery to represent both architecture and psychoanalysis.
For designers, form follows function. For graphic designers, form follows content (see the example above). But what about for developers? I think it’s essential that form follows communication. The number one goal for the visual form of your software projects should be clear communication. Concise is good, but not when it hinders clarity. Having as few lines as possible is nice, but not when your code becomes a solid block of continuous statements.
8. That which does not destroy you makes you stronger
This principle was originally elaborated by Friedrich Nietzsche. There have been a lot of times where complexity was destroying me. Memory management was killing me. Scalability issues were killing me. Through each of these experiences, the difficulty and the struggle has taught me a lot about those various areas. I have been forced to become an expert in certain areas and to come up with creative solutions. Your problems and ability to solve them will make you a worthwhile developer.
9. It’s all about making connections
Software development, especially for iOS, is all about the connections of various fields. Working on iOS apps places you at the intersection of web services, interface design, graphics processing, database design, animation design, markup languages, and many others. I never imagined how much I would need to learn about image processing in order to create the camera filter code for the Kenny Chesney app. Apps are inherently connected software pieces. Understanding and harnessing those connections is key to making great apps.
10. Never forget who you’re really working for
While that new continuous integration system you just set up is great, do not forget who you are really working for. You are creating a product for people. People love apps, whether the app is enhancing productivity or just helping them kill time. Create apps that are enjoyable and exciting. Good software should feel like magic, it just works and we don’t know how.