We should be software *designers*
I stumbled across an older online magazine recently. A List Apart has a wide variety of topics, ranging from CSS and typography to what a designer truly does for their client. While the discussions range from the technical to the philosophical they always target their stories at designers. They've built a truly useful site and I look forward to their return (it's on hiatus now but should be back soon with new content).
Though it's for graphic designers I feel they have a lot to teach us.
- Design is more than asthetics.
- Design implies satisfaction of user requirements. That's what separates design and engineering from art and science.
- Design is about compromise and constraints. If it's not possible to do everything (ie: pick one of fast, cheap, and easy) then it's up to the designer to find a compromise. That's their purpose in life. To make the best tradeoffs and maximze the value for the client.
- A pretty product that is broken or does the wrong thing is a failure.
- Designers must know how to write. Most of us, myself included, are lousy writers. But good design requires communication with our customers, our users, and other designers. We have a lot to gain by learning to spruce up our prose.
- Design is for humans. A well designed product, be it software, a car, or an apple pie, must serve the needs of humans, most specifically the humans this product is targeting. It doesn't serve computers, manufacturers, or in rare cases physics.
We may need to start thinking of ourselves as software designers instead of programmers and engineers. We make a product for a specific purpose which must fit constraints and still be the best possible product (and often for the lowest price). Even with the product is not seen by the end users, like middleware, reliablity and latency are still human factors.
I'm sure I don't need to remind you of how much bad software is out there. Some is ugly. Some is broken. Some just works in mysterious ways. Every time you code against an API and you waste time working around it's arcane syntax: that's bad software. Every time a program breaks because it receives input slightly out of the ordinary: that's bad software.
We truly are designers. We should make truly well designed software.