One mistake I see developers make over and over again is that we make a feature look complicated just because it was hard to create. We may not be aware of it, but we want our customers to know when we sweated blood during development, so we’ll design a feature’s user interface in a way that shows off how much work went into it.
We’re doing our customers a disservice when we do this. We should instead show off how good we are at making complex things simple.
For example, the prefetching feature I blogged about last week hasn’t been easy to create. This feature prefetches (downloads) links and images in your feeds so that they’re browse-able inside FeedDemon when you’re working offline. It works in the background so you can keep using FeedDemon while it does its business, and it’s smart enough to skip web bugs, links to large downloads, and other items that shouldn’t be cached (including items that have already been cached in a previous session).
It didn’t seem like a complex feature when I started on it, but it ended up being a lot more work than I anticipated. It could easily be an application all by itself, complete with all sorts of configurable options.
But instead of turning this feature into a mini-application, I demoted it to a lowly menu item:
That’s it. All that work for what looks like a simple, tiny little feature to end users. I didn’t even expose it as a toolbutton on one of the main toolbars, since I figured it was a feature that at most 20% of my customers would need.
But the end result is a feature which is simple to use, especially for those new to FeedDemon. Users can just click a menu item and not have to deal with knowing how it all works.
And I still get to show off by blogging about how much effort went into it :)
PS: Chances are power users will demand some configuration options and per-feed settings for this feature, but any options I make available won’t be exposed within the feature itself. Doing so would force new users to know about them, making the feature appear more complicated than it needs to be.
