As posted on 47Hats

/* What do you feel toward your users? Take a second to think about it. Picture them, sitting in concentration, scratching their heads, trying to figure out how to use your latest creation. Make a mental note of your feelings. Keep reading.

My two and half year old daughter has recently decided she wanted to "work" with the computer, just like daddy. I figured painting would be a good place to start so we tried Photoshop for a while. She enjoyed the painting part (throwing the trackball about while colors fill up the screen) but would very quickly get into trouble - she would click outside the window, switch paint tools, hit the start key - the desktop is a hostile environment when you're starting out. Each time I had to help her out, she grew more frustrated, until it became evident that for sanity's sake, hers and mine, I better come up with something. Daddy took a day off and wrote BabyPaint.

The basic requirement was to have a safe painting environment where no accidental key stroke or mouse gesture can have unforeseen consequences. As I was coding along, picturing her trying to use it, new requirements came up: The cursor had to be BIG. She had to be able to select colors but the color palette had to be enormous and hidden until explicitly and easily called up. Mouse button optional. Heavy key strokes ignored. etc. etc.

The software was ready to ship on time (daycare makes for a hard deadline) and was a huge success. She immediately sat down to use the program and simply got it. Plain joy, no frustration (I could tell by the relative lack of high pitched screams). It was my proudest moment as a developer. The application had all the features and polish needed for her to have a positive experience on the first attempt. I also had a great time writing it.

So what (you ask)? Creating software for your kids, exciting as it sounds, is not the basis for a compelling business plan (unless you have enough of them for a long-tail strategy). Well, the point is this: the feeling wasn't new. It was the same feeling I get every time I create an application. I want my users to have a good time and succeed at what they do while also taking pride in my creation (in an infantile "look what I did" sort of way).

Love thy users is a rare sentiment in the software business but it’s out there. Developing software is as much a creative process as it is an engineering discipline. Pen-to-paper, paint-to-canvas, button-to-form. All subject to the taste and personal preferences of your audience. The people that use your software do so because they like your style, respect the decisions and compromises you made and intuitively grasp your way of doing things. They deserve the same love music fans get from their idols (of course, when I say users I mean people who are actually using your software. The people from purchasing, legal, PM group, requirements committee, let them find someone else to love them).

Our users are not only our audience and fans but also the true connoisseurs. Your boss/friends/mother can all look impressed and give you a raise/pat on the shoulder/kiss on the cheek (respectively I hope) but they can't truly appreciate your work - it doesn't address their need. Our users are the only ones who have the time and depth to fully understand the subtleties of our applications. They are the only ones that have the particular itch we are trying to scratch.

This feeling, I believe, is at the heart of all great software. Done right, the actual design, coding and testing become mere details, technical activities that need to occur for a vision to take form. Scrum vs. Agile, Ruby vs. PHP, C# vs. Java are all important questions (well, questions) but are not central to the matter (also, let's face it, you end up writing JavaScript most of the time anyway).

The love for our users, that's where the real advantage of microISVs and startups lies (at least the ones that are in it for the right reasons). That is why the next time someone looks at your software and tells you that it would take an IBM or an HP five days to develop and two more weeks to throw you out of the market, you are allowed a humble smile.

public class U {
    boolean isHireable(Developer developer) {
        return isHireable((Person)developer) &&
            (Interview.testCodeSmithing(developer) * 0.20 +
             Interview.testPassion(developer) * 0.80) > 0.95;

No comments: