Features that Suck!

May 21, 2008

Features come in many types: only one type really matters. The rest suck!

The one that matters is the User Requested Feature. Sadly its apparent that this type of feature never crosses the mind of many of the folks that build applications and web sites. And even more sadly these features tend to be complex so get dropped first when projects enter Phase 3.Designed by someone who likes tetris

The first type of feature that does not matter is the Developer Feature. These can range from outright bugs to messy APIs that can only be used if you know what going on behind the scenes. Diabolical UI Crimes also belong in this category. These confusion inducing features come from a lack of User Requested Features.

The second type of feature that does not matter is the generic spec feature. These usually come about due to BAs  guessing what users would like from their application. “Well we have a list of things… so… we’ll definitely need to sort by every column, …bound to be important”

Outlook is a perfect example, you can sort and group (slowly) all your email but what you really want to do is search, which you can’t do. Contrast that with GMail. Give people what they want not what you think they want. Lookout did just that and Microsoft bought them to hide their shame. Again this type of feature comes from a lack of User Requested Features.

When the owners wife adds a feature...The third type of feature that is not important is the old technical expert feature. These come in the form of ropey architectural decisions like “we’ll use technology blah” from technologists that are now above programming so just deal out great wisdom… yawn. If you can’t code it, don’t suggest it.

The fourth (be certainly not final) type of feature that doesn’t matter is the infinite configurability feature. Whenever a decision point comes; you go both ways and then let the user configure which behavior they ‘want’. Let me tell you a secret: users don’t care, and being asked just angers them. Take as many decisions as possible, use intelligent defaults and don’t make users think!

User Requested Features are almost the only type of feature your software should have. The problem is that they can be complex, tricky to implement and usually require some creativity to solve. But they’re so neglected there is always some low hanging fruit.

So… if you’re a developer, try asking your users for a small feature they would like and …just add it. If you work for BigCo you’ll start making powerful friends and if you work on the Internet you’ll drive more traffic!

And who knows you might just enjoy it…


(Short && Simple) == Sweet

May 20, 2008

There’s quote attributed to Blaise Pascal that goes:

“The present letter is a very long one, simply because I had no leisure to make it shorter.”

It’s an observation that brevity is more difficult to produce that verbosity.

However, modern programming ideologies encourage you to write your solutions in a verbose framework or with an X-first methodology (pick an X) or with restrictive rules to help you “be a better programmer”.

It\'s all very complex you see

There are plenty of (typically aggressive) ideology pundits that will rattle off the usual straw-man arguments about using their strict set of rules: the power of sameness, easier maintainance, easily understood code… etc. etc. You can usually spot these people because conversations with them feel like you’re playing an old skool text-based adventure game …and you’re probably stuck in a loop.

The truth is that only Deliberate Practice will make you a better programmer. Only loose coupling and simple architecture will make a system maintainable. And the ONLY way to make good software is to build it for the people that will use it, with their feedback.

Having 7 classes where you could have had 2 is gold-plating. Building everything to an interface is gold-plating. Having more than 1 factory is gold-plating.

So the next time your tempted to build a system of abstractions think of the words of Seneca:

“Love of bustle is not industry”

Aside: In Pascal’s day letters cam in iterations because there were word processors, perhaps a good thing we’ve lost…

SilverLight 2.0, Parallel FX and ASP.NET MVC

November 30, 2007

Blizzard of great new stuff for today, summarized nicely by ScottGu.

The new Parallel FX stuff is really quite cool. It’s a cliche to say that the number of CPUs in a typical machine is increasing while each individual CPU is not actually faster. But it’s great to see Joe Duffy release Parallel FX and PLINQ to to actually address the challenge.

All very cool can’t wait till next week for ASP.NET MVC.

Thoughts on Mix:UK

September 18, 2007

I went to Mix:UK last week and have waited a while to let my impressions gel. I find that live blogging this type of thing just makes you a part of the echo chamber.

A number things stick in my mind from Mix:UK

  • ScottGu is a great presenter (slides); he’s super tech-savy, a great speaker and engages the audience brilliantly.
  • WPF is an excellent development platform
  • ASP.NET vNext is looking very crisp
  • Silverlight 1.1 is cool but not ready
  • The DLR is very cool but still not ready
  • Expression Blend is ready and can produce epic results
  • And last but not least: Software Transactional Memory

I must say that Software Transactional Memory (STM) is the thing that sticks in my mind. WPF was very cool, VS2008 had excellent new improvements and the sneak peeks (including a WPF MRI visualizer) were excellent but STM lingers in my mind.

STM has a great appeal because it is a truly revolutionary idea that cuts to the root of a problem. Just as the call stack revolutionised modern programing; I’m sure STM will be the first step into a new concurrent software revolution.

Haskell already has an implementation so I’d love one for the CLR from Simon at MS Cambridge 🙂

Why are Nice-To-Haves done last?

August 22, 2007

I was wondering recently why the phrase “Nice to have” is synonymous in IT with “Something we won’t do”.

Often I’ve given a client a new piece of (typically UI) functionality only to be told about its deficiencies. This is a common feature of human nature, we all suffer from the uncanny valley effect; as something approaches what we want it’s imperfections become more irritating. Scott Berkun sums it up well in Why Software Sucks.

However there is another human in the loop. The developer. And having slaved to create something functional on time and on budget; being told your software sucks can be equally irritating. So when you get back to your desk you mark your user’s feedback as nice-to-have and try and calm down. But there are things you can do that will make you and the user more happy.

First, be more self critical. If you build a piece of UI, even something simple, make sure it works as you would want it to work if you were the user. And don’t compromise!

Secondly, and this is the big one, look for easy wins. Look for improvements in your users work flow,  reduce 4 clicks to 1, watch for where a user expects something, add hot keys, ask why the user prints a report out to work on it, etc… Not everything will be an easy win, but you’ll find some gems for sure.


Obviously implementing more of what your user wants will make them happier and they’ll (hopefully) give you more ley-way when you say no to other requests. But the good news is that WPF and .net 3.5 helps make the “Easy Stuff” circle all the bigger.

So get XAMLing and next time you feel like marking something as nice-to-have see if it’s an easy win, and if it is, just do it!

Congrats, you’re a Level 2 Mindless Drone

August 20, 2007

I saw the latest entry to the Web 2.0 Ad-Driven distraction market today: MyProgress.com™. Note the trademark, classy! And I paused…

I usually skip past these usless time wasters with a sedate roll of my mouse wheel while chewing through my cheap and cheerful kruger sandwich. But something made me stop half-way through my crayfish and cardboard, some deeply entrenched line had been crossed and I found myself actually shocked and appalled at the crass nature of this product.

MyProgress tracks what you have done in your life and gives you the equivalent of a charater sheet for yourself. Finance, Skills, Weath and Health are the (overlapping) categories in which you can record your progress. I’ve not used the site but even the thought of filling in this type of information bores me. However;  there is a deeper and far more troubling aspect to this conccept. MyProgress’s creators seem to have forgotten that life is not a MMORPG.

The idea that someones life can be linearized into some paltry progression of goals and acheivements turns a human being into a yeild curve. This kind of characterization of people is used by the insurance industry to make it’s predictions and in doing so converting people into rows in a spreadsheet. MyProgress helps you fill in your row…

This site captures perfectly the worst aspects of capitalism on over-drive. MyProgress proports to give you a score for your life so far… I suggest a simpler scoring model:

Fun Had / Memberships of Pointless Websites =  YOUR LIFE SCORE    (use approx figures)

Microsoft eScrum

June 16, 2007

Just spotted the release of Microsoft eScrum. A web-based scrum extension for their Team Foundation Server. This comes hot on the heals of their announcement of SVN support for TFS. I always felt that TFS was a very heavy weight offering that I would never work with because it cost too much. I wonder what the plan is behind adding these lighter-weight Agile components.

Could this be the precursor of Team Foundation Express?