Friday, February 17, 2006

Design

I've been doing "design" work at my job for the last few weeks. There's not much science behind software design, and i'm not sure how much more engineering rigor would help. Design is one of those things i think i want to do until i actually have to do it, and then i find the whole process frustrating and mentally draining.

In any field i think that design differs from art only in that you start with a set of constraints, which aren't usually defined as well as they should be. In other words, you start knowing only what you can't do. There is a set of qualities that you want to achieve, but there's not a clear set of rules that will achieve them. It also seems that desirable qualities tend to come in competing pairs or groups. For example, in software it's usually considered desirable to create a design that has enough abstraction that it can be re-used in multiple projects. However, that abstraction comes at a cost that can only be recouped if the design is in fact re-used in multiple projects (at least three according to a rule-of-thumb).

The hardest part of design for me is that there's no simple criteria for "done". On rare lucky occasions you get an intuitive sense of when something is right, it just feels right. Otherwise you have to check off a list of requirements against the design, which is kind of like cutting boards and then defining their lengths to be your units of measurement. I know that in most people's minds design is an artistic endeavor, associated with fashion and the like, but i for one would be happy if it could be reduced to a set of equations.

No comments: