Part of the problem is that we, as developers, seem to feel that somehow not offering a million degrees of flexibility and customisation is a reflection on our personal abilities. I’ve always worked with developers who feel that if you can make something an option, or configurable, then you should.
I’m not sure this is always right.
I’ve started to have more confidence in my ability to judge what is sensible. I understand the business market that I’m writing the software for, I understand the needs of my users, I can make a judgement call without endlessly agonising over it - or giving in entirely and making it an option. Many things that could be optional are simply cases where we don’t take the trouble, or have the courage, to pick the most appropriate (or suitable) solution. That’s we as developers, we as designers, we as team leaders, we as peers of each other. Often it’s just easier to make something ‘an option’ than to make a hard decision.
Jeff’s example dialog above is a classic - do you /need/ to put an option in there for removing the toolbar? Or changing the application icon? If the toolbar might be something that gets in the way of your users, then either it’s not really neccessary anyway (or it’s been badly thought-out) and you should remove it entirely, or it’s something that you could have a right-click ‘remove’ option for - advanced users will right-click on it almost immediately if they really want to try and remove it. Either way - make that decision, have one less checkbox on that dialog and move on. You’ve just done your users a favour.
And changing the icon - why? I bet less than one user in a thousand actually bothers to use that option - so it ought to be removed. It only subtracts from the application (people will see the option and immediately view your existing icon with a far more critical eye).
It’s easy to confuse ‘adding configuration options’ with ‘adding useful features’. But do all those additional features really add value to your program? Do they really empower your users? Make things easier, faster, more straightfoward for your users? Or do they add layers of complexity (and even potential points of failure) to your application?
To me, this is often the distinction between very good ‘professional’ software and ‘hobbyist’ software - in a commercial/professionally-developed product, every checkbox and option has a real cost to implement (in terms of QA and documentation, even if not in terms of actual software engineering); it’s easier to make hard decisions when money is involved.
You wouldn’t expect to see a dialog like Jeff’s example in something commercial (without wishing to open up discussions about F/OSS vs Closed-Source etc), but you’d not be terribly surprised to see it in a shareware tool developed by an enthusiast.
That kind of stuff has it’s place, I’m sure, but as a user of software, I often wish developers would just pick one single, well-thought-out method of operation instead of surrendering to the indecision of offering a multitude of (sometimes less-well-engineered, often obscure) features.