Andrew Nacin one of the WordPress core developers highlighted a philosophy that WordPress follows by providing decisions, not options. One of the documents linked to in the article points to the WordPress Release Philosophy and more notably, the section of text by GNOME contributor Havoc Pennington.
It turns out that preferences have a cost. Of course, some preferences also have important benefits – and can be crucial interface features. But each one has a price, and you have to carefully consider its value. Many users and developers don’t understand this, and end up with a lot of cost and little value for their preferences dollar.
- Too many preferences means you can’t find any of them.
- Preferences really substantively damage QA and testing.
- Preferences make integration and good UI difficult.
- The point of a good program is to do something specific and do it well.
- Preferences keep people from fixing real bugs.
- Preferences can confuse many users.
I find that if you’re hard-core disciplined about having good defaults that Just Work instead of lazily adding preferences, that naturally leads the overall UI in the right direction. Issues come up via bugzilla or mailing lists or user testing, and you fix them in some way other than adding a preference, and this means you have to think about the right UI and the right way to fix problems. Basically, using preferences as a band-aid is the root of much UI evil.
Andrew mentions that if he had the opportunity, there are at least a half-dozen options that he would remove from WordPress. I’m in that same boat but I of course would add in an option or two to control the behaviour of post revisions. After reading Andrew’s post and listening to Ryan Imel of WPCandy discuss how themes should aim for zero options, I’m beginning to get the feeling that there is a battle afoot. Developers are now being encouraged to aim for zero options. As an end user, I believe this is foolish. I agree that getting something that just works, out of the box with no fuss or muss is awesome. But plugins and themes don’t seem to fit the bill of doing one thing and then doing it well. It may be the case in the beginning of a plugin or themes life but over the course of time, users want more functionality, more customization, which eventually ruins any simplicity the plugin or theme originally had.
Thankfully, the following post by The Theme Foundry nails the point in that it shouldn’t be about Zero options. Instead, developers should focus on presenting the RIGHT options.
We left it in, and actually added a toggle for hiding the author and categories as well. It was sorta painful, but I was beginning to realize the flaw in my philosophy: It’s not about eliminating options, it’s about having the right options. I know, I know – hardly groundbreaking. It’s been said before by many wiser people than myself. But it’s very easy to get caught up in a philosophy without considering the real goal, which is making a pleasant experience for your users.
And this is why I wanted to write this post – to counter-balance the anti-options, anti-configuration sentiment. It’s too easy to get caught up in a cargo cult – I know I did, briefly. Instead of making a theme either fully-customizable or configuration-free, I’ve realized that the ultimate goal is to add “just the right options” to make the user experience more pleasant. I think everybody would agree with that sentiment – but it’s easier said than done
That is a point of view and philosophy I can get behind. Two years ago, I remember myself and many others in the WordPress community hammering plugin and theme developers, especially theme authors on needing to provide more options so that I didn’t have to dive into any code to make changes. They delivered, but now we want them to go back and have as few options as possible. Whatever that perfect balance is between which options are visually present and which are not is what will generated a “Just Works” experience. As a user, if I see too many options, I feel inundated and overwhelmed. If I see too few options, I feel as though I won’t get very far extending the functionality of the plugin or theme without having to know some PHP.
So at the end of the day, as just a normal user, I view all of this as a recipe that appears to be very difficult to get right. Here are a few ingredients to the recipe that I’ve though of.
Know your user base – The more information you have with regards to how users use and interact with your code, the better decisions you’ll be able to make.
I still don’t like to code – I still don’t like the idea of going back in time, 3 years ago where I had to follow instructions on modifying functions.php in order to configure something. So instead of loading up one options page, I appreciate a tab or sub-section with advanced options that I can wade through. I like having the OPTION to DECIDE on viewing the advanced OPTIONS.
The Best Defaults – While W3 Total Cache is an extensive plugin, I love the fact that out of the box, it’s configured by default for most applications. I’m not savvy enough to really dive in and mess with the various options so this is something I really appreciate. Having excellent default configurations I believe goes a long way in accomplishing the goal of “Just Works“.
The bottom line is, I don’t want developers to abandon all options for the sake of doing it. I don’t want to be handed a blank piece of paper and then be told to decide what to do with it. I’m counting on the developer to determine what’s best for me up front but also give me some options to play with on the side. The determination on what those options should be and how they’re presented is one of the key problems for that developer to figure out.
I wonder if developers make good fortune tellers?
One side-effect left out of the discussion is the pain of maintenance that multiple options causes. For example, to provide for a single new option requires a new admin page field, a new admin page if one didn’t exist, and accounting for checks on that option all throughout your code. Reducing options = potential less work down the road.