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?

Windows Installer Lunacy

June 16, 2007

Scott Guthrie has a monster 20+ page article on installing a Web Site using a Web Deployment project. I’ve written before about how I feel about MSIs but this takes the lunacy to a new level in my opinon.

Scott starts but building a dummy web application then builds an MSI installer to do the following:

  • copy it to disk
  • install a web application
  • inject a connection string

Scott defines a scenario where your client wants to install your application on their servers and would like an installer. As it happens I built something very similar and Scott missed something critical: you need a Database. Well, real-world applications need a Database. So the MSI I built installed a DB also and unlike Scott’s example it had to support updating.

The end result was that the MSI became massive. As much time ended up being spent developing the MSI as the application. However, an MSI cannot predict subtle changes that people have made on their servers, or the indexing service locking your files while you try to upgrade, or the company’s Application pool policy etc. etc.

So you end up with an automatic installer that requires a consultant to go on site and run it. At which point you start teaching the consultant the foibles of the installer and not the structure of the application. Then the chap who wrote the installer leaves and the installer project can’t be maintained because it’s a whirlwind of cryptic property settings and code fragments.

Any why? Why has we travelled down this long, painful and pointless path? To save the 3 steps at the top of the post. 3 very simple steps that anyone who runs a Web Server for a living should take in their stride. Sorry Scott, but your tutorial is a hideous example of over-engineering.

The cardinal rule is: you can’t automate through uncertainty.  Automatic scripts which I spoke about in a previous post can help enormously in many situations but only if you own the environment end to end. And a GUI-based wizard will never help in these situations. Installers are useful for Joe Public user who want Notepad 2 not for Joe Businessman who wants your payroll product.

Death of the non-transferable ticket?

June 13, 2007

I was heartened to see the launch of Virgin Charter. They look to be tacking something which has been a pet-peev of mine for quite sometime: the non-transferable ticket. The concept of a ticket maps cleanly onto the concept of an option. That is it confers the right but not the obligation to do something at a future time; in this case travel from one location to another.

The options market is a massive source of risk mitigation for the business community so why are consumers forced to purchase non-transferable options? I frankly do not believe that security implications are a legitimate reason, far more likely is profit; if you miss your flight, you get nothing, and the airline may get a seat paid for twice! In fact they regularly over-book busy flights, transferring customers (if they are lucky) to later (cheaper) flights.

Virgin Charter are tackling the very top end of air travel but this type of disruptive concept is bound trickle down and shake up the whole travel industry. They reminds me of the disruptive nature of Betfair in the gambling space. I wonder what Micheal O’Leary would think of starting the worlds first airline ticket exchange?

I like the Conversation

June 11, 2007

One of my goals in writing this blog was to ‘join the conversation’ and to my pleasant surprise I seem to have managed it (a bit).

In my posts on SpaceTime and CrowdVine I was lucky enough to have the creators of the sites in question comment on my post. I’ll admit that I was critical of both sites but in both cases I found the retorts were enough to make re-evaluate the service being offered. I would recommend that you try both yourself.

Since another goal is to reduce my tendency to generalize; maybe I should stop being so critical…


Get every new post delivered to your Inbox.