Friday 20 July 2012

The importance of generality in good software design.

'You should absolutely not dismiss simplicity for something easy. It takes design and good taste to be simple.'
Linus Torvalds, Just for Fun

Nobody sets out to create a really complicated software application. It happens naturally. You build a simple app that does exactly what you want it to, but then you realise it needs to do more (perhaps your competitor is pitching a specific feature, and you want to offer it too). Maybe the extra features don't quite fit in with the paradigm you wrote the original version for, or maybe the original vision has been lost. Either way, you want to extend the program's functionality as quickly and with as little work as possible. You're not trying to do anything complicated, but somewhere along the way your application turns into spaghetti.

The solution is not to build your program around special-case features, but general capability. If there's a need for a specific feature, don't build that feature specifically, generalise it to some broader class of capability. Just implement that general capability and not only do you get the functionality your users were looking for, you get added flexibility. Your users may find themselves able to do things in ways that neither you or your competitors have thought of yet. While your competitors are pitching gimmicks and saying things like 'only our software has OneClick-BusinessLetter™ and SuperBackspace™,' your design simply negates the need for those features to exist.

(Actually, a lot of the time that organisations come out with gimmicky features like this, it's them trying to mitigate some design oversight in their products, in order to keep up with a competitor's product claims.)

There's another advantage to keeping your design general. Fundamental simplicity. Design simplicity and flexibility go hand in hand; aim for one and you may well get the other. A lot of products out there are marketed as 'simple,' but they're really talking about inflexible gimmicks they've added to make their complex products appear more attractive.
It looks like you're writing a letter. Would you like help?
Clippit, MS Office Assistant, on the uselessness of gimmicky features.

There are drawbacks to taking a general, holistic design approach. It's harder. You often have to rework large chunks of your original design several times until you get it right (at least you end up with something small and manageable, in case you ever need to change it again!). The other drawback is that users tend not to appreciate good design. A good design is one that keeps out of the user's way. The problem is that it's hard to appreciate something that's designed to be invisible.

What's the solution to public perception? You can always make up buzzwords for the kinds of functionality your design provides by accident. Some companies do that. Another is the Apple approach, make simplicity a selling point. It's a shame that the word 'simple' has become a marketing euphemism for inclusion of gimmicky extras in products. True simplicity comes from keeping things general, and generality gives users power and flexibility.

No comments:

Post a Comment