Applying Design Principles to Software
I recently happened across this article that lays out ten principles for good design : http://www.vitsoe.com/en/gb/about/dieterrams/gooddesign
As I observe the computing world continually winding itself into a fantasticly complicated mess I cannot help but wonder what the world would be like if programmers followed these same principles.
Good design is innovative : When programmers find something that works, we tend to stick with it. Being innovative though, can sometimes mean taking a fresh look at that same snippet of code we always use for a particular problem.
Good design makes a product useful : What are the most useful tools I have? They are the ones that just work, don't get in my way, and serve a specific use. There certainly isn't anything wrong with creating an application that just does one thing and does it well.
Good design is aesthetic : Should I try and cram thousands of pieces of data into a single screen? Why don't we make our application be a glorified database table editor? Over the past few years I have come across a steady strem of applications where the developers decided that the answers to these questions were : "Oh yeah", and "tables are awesome!". I am definitely more motivated to ask "How does the layout of my application's user interface, make it more useful?" now.
Good design makes a product understandable : I always think about the time I spent trying to teach my grandmother how to use email. There is a strict set of conventions that drive pretty much all applictions : drop downs, links, drag and drop, etc... But do they really make sense? What would it take to overcome these conventions and invent something more natural? Is it even possible with the input devices we have today?
Good design is unobtrusive : Windows Vista - this one is for you. Nuff said.
Good design in honest : At first glance, this seems like a bit of a stretch to apply to software, but what about resolving to never send login information over an unencryped connection? In a lot of cases your users would never know the difference, but you should do it anyways.
Good design is long lasting : I personally think that code should not have a very long lifetime. I love to re-build my code very often because each time I do, it gets better. Then after a few iterations, I find that good design, and good (long lasting) code just happens. Never be afraid to throw code out and start over.
Good design is throrough down to the last detail : To me, this means quality assurance, not just of the function of the application, but of user's experiences using it. Much of software testing is in the realm of "does it work" because software qa is usually a very analytical process. Wouldn't it be cool if we could ask "how well does it work" of software a little more often.
Good design is environmentally friendly : Your code consumes watts! Here's my approach. Buy the cheapest laptop you can find and use it as your development box. If your app isn't snappy on the cheap laptop then you need to figure out what is going on. Not only does this make for a better end product, but really does actually conserve electricity. For bonus points, see if you can keep the fan from kicking on while your appliction is under load (cheap laptops have loud fans).
Good design is as little design as possible : I love simplicty! It sure is hard to find out there these days. I am making it my goal this year to strive to find ways to make each piece of code I write as simple as possible. Of course I am going to be measuring simplicty with a ruler that takes agility into account, but this should be a fun experiment!


