One Last Thing About Options Dialogs...

You might wonder why I’m dwelling on minutiae as seemingly trivial as an IDE’s options dialog. After all, it isn’t the most important part of the product by any means. You tend to set your settings once and then get on with using the system.

But from an interaction design standpoint, the NetBeans example is important because it reveals problems that face just about every mature desktop product: how to satisfy the needs of every user without turning the UI into a spaghetti mess of obscure settings and features.

Of course, the answer is that you just can’t satisfy every user’s needs, and you’d bust a gut trying. If you can get away with it, focus on reducing flexibility.

That is, try to aim your product at a core set of target users; and whenever you’re faced with a decision where you would normally chuck in another setting so that the user can tailor the product’s behaviour, just make it work one way. You’ll have a much more usable product as a result, with exponentially fewer weird, unpredictable caveats to debug. (If in doubt, read Alan Cooper’s excellent book About Face 2.0; absorb it, and apply its teachings with a tiny pinch of salt – not because anything he says is wrong, because he’s mostly got it right, but because it’s good to question everything, even the teacher – especially when it comes to designing a product’s UI).

By contrast, an IDE must be flexible, and must cater to all manner of different development practices. So a mature IDE like NetBeans is an extreme example of a highly configurable product with hundreds of weird settings to change its behaviour in both subtle and not-so-subtle ways.

Making those settings available without dogging down the product with an over-complex design represents a major UI engineering problem; so it’s interesting to see how the NetBeans team is handling it.

About the Author

Matt Stephens is a senior architect, programmer and project leader based in Central London. He co-wrote Agile Development with ICONIX Process, Extreme Programming Refactored, and Use Case Driven Object Modeling with UML - Theory and Practice.