What is Design?

Joel Spolsky, author of Joel on Software and CEO of Fog Creek Software is writing a series of articles on "Great Design." The most recent installment, Great Design: What is Design? (First Draft), contains some good insights. First, for all of my graphic artist friends:
You know those gorgeous old brownstones in New York City? With the elaborate carvings, gargoyles, and beautiful iron fences? Well, if you dig up the old architectural plans, the architect would often just write something like "beautiful fretwork" on the drawing, and leave it up to the artisan, the old craftsman from Italy to come up with something, fully expecting that it will be beautiful.

That's not design. That's decoration. What we, in the software industry, collectively refer to as Lipstick on a Chicken. If you have been thinking that there is anything whatsoever in design that requires artistic skill, well, banish the thought. Immediately, swiftly, and promptly. Art can enhance design but the design itself is strictly an engineering problem. (But don't lose hope -- I'll talk more about beauty in future articles).

Also, for all those who question why design is more important than, say, adding the all important "features" to a product:

Design is something you only have to pay for once for your product. It's a part of the fixed costs in the equation, not the variable costs. But it adds value to every unit sold. That's what Thomas C. Gale, the famous Chrysler automobile designer who retired in 2001, meant when he said that "Good design adds value faster than it adds cost."

The whole article is good, as are most of his writings (available via email subscription at the bottom of the article, or via RSS feed).

Yours truly,
Mr. X

...back to blogging...


Jeremy said...

Design is a huge part of software, but it is typically not as exciting for programmers as actual coding and solving the problems of coding. Good design is indispensable - the iPod is a great example of usability over features, and all these Web 2.0 applications sink or float based on how usable they are. If your software isn't usable to most people, you cannot expect to leverage the social interactions of the Web 2.0 paradigm like tagging, for example.

Great post!

Mr. X said...

Design is figuring out what to do, while coding is figuring out the best way to do it. If you have well-coded features that nobody wants, you fail. If you have the right features, it's easier to fix the bugs in implementation.