Saturday, July 9, 2011

Programming Metaphors You Need, Part 1 of Birds

Some years ago, my mother was sick in bed, and the family cat, apparently feeling she needed perking up, went out and got the best present it could think of. It hunted vigorously for hours, and exercising all the smarts and power it could muster, it found the perfect thing, and brought it back to my ailing mother.
My mother, awoken from fever dreams to find a half-dead bird in her bed, was not appreciative. Actually, she was more horror-struck. There was shrieking. Cat and bird were both banished summarily.
My mother and the cat both sulked for days, furious at each other for the cruel way they were treated when each had behaved as well as one could possibly hope for.
I myself have had an eerily similar interaction with a programmer who proudly showed me a feature which he thought was incredibly useful, and which had also been very tricky to implement. He was outraged to discover that I did not adore it. In fact, my first response was to ask how to turn it off, out of fear that I would trip it accidentally. He felt that I was unappreciative, resistant to change, and failed to appreciate how life-changingly useful this feature would be. (Our disagreement was not improved by the fact that it was possible but not practical to disable.)
He did have at least one thing right; unlike the half-dead bird, it proved unobtrusive. In 10+ subsequent years of using software of the appropriate type, I have never once wanted this feature, and have often been in situations where it would have been dangerous, but I did successfully use his version for several years without accident.  I'm sure he continued to enjoy it, and his virtuousity, to no end. I just wish he hadn't given it to me.
Software is often full of dead bird features. It’s not valuable because it was difficult to implement, or because it makes developers happy; it’s only valuable if it makes the users happy. Save the dead birds for those who appreciate their excellence.


Edited to add:
It's not just programmers that come up with dead bird features, of course. For instance, the ultimate dead bird feature is almost certainly Clippy, the animated paper clip that used to offer to help you with your Microsoft Word documents. It was a masterpiece of technology, lovingly crafted, and beloved by its audience. But lots and lots of people found it not merely unattractive but actually repellent. There you were, working away, when AARGH! your eye was drawn to an animated paper clip, actively trying to distract you from your work in order to offer to help you do something you had no interest in.

12 comments:

  1. The Google Circles "mini golf" user interface seems like one of these.

    ReplyDelete
  2. You have to tell us what the feature was!!

    ReplyDelete
  3. Yep without knowing the feature and being a programmer i have a hard time taking your side of the argument. I feel the metaphor only serves your point and and amplify the gap that can sometimes be between programmers and users. Its a human to human relationship not a cat to human relationship.

    ReplyDelete
  4. This comment has been removed by the author.

    ReplyDelete
  5. Features that make me as a developer happy are definitely worth more to me than features that make users happy, because what makes me happy is the ability to deliver features that make users happy.

    If a feature makes me happy, then that means that it is a feature that makes if easier to make users happy.

    If a feature makes it harder for me to make users happy, then I am unhappy.

    Developers are multipliers. We are algebraic simplifying levers. We increase productivity by reducing complexity.

    If someone gives me a dead bird that makes it easier for me to reduce complexity, then I will eat that bird.

    You never told us what that dead bird did, but you did imply that dead birds generally make developers happy, but not users. Either that dead bird was a bad dead bird, or you don't know what developers really are. You seem to indicate that the dead bird made it into production, so I have to assume the latter.

    ReplyDelete
  6. There is this Ford quote.
    "If I had asked customers what they wanted, they would have said faster horses."

    ReplyDelete
  7. Your example is so lacking in concreteness as to be completely vague and meaningless. I still have no idea what a "Dead bird feature" is, other than something that at least one user finds uncomfortable being able to do.

    ReplyDelete
  8. We are speaking about ideas, they don't need to be concrete. I totally get it, and I deliver dead birds on a weekly basis! Hot code reloading that isn't strictly needed, CHECK! Making all the statics in a program configurable, CHECK! Logging the logger, CHECK!

    I get it. Some dont.

    ReplyDelete
  9. Hah. My comment came across completely wrong, apparently. I mean "you have to tell me because I'm sooooo curious", not "you have to tell me because I think you're full of it".

    I found the metaphor itself quite clear, and saw it very differently from the other commenters; I see it as something that makes the developer *as a user of the program* happy, i.e. something highly technical and dangerous but convenient if you're using the program in a highly technical way. Something like an "import" button where "import" means "trash the entire database and load this instead": extremely useful for a small subset of highly technical users, dangerous as hell for everyone else.

    If what was meant was a feature that made the developer happy *as the developer of the software*, than yeah, more explanation is necessary, although I would say that IME if the users even are aware of such a change, that's bad, or at least non-perfect.

    -Robin

    ReplyDelete
  10. Yeah, sounds more like "I'm a master software architect, of course I know better than the programmer" syndrome...

    ReplyDelete
  11. The original dead bird feature I encountered was a terminal emulator feature, a control-key combination which hunted out URLs and fed them to your web browser, enabling you to easily use URLs from, for instance, email you were reading in a text-based mail reader.

    Given that when I user URLs in a terminal emulator, I do so precisely to keep them out of a web browser, it's like having somebody insert a control-key combination for shooting yourself in the foot. But at the time, there were a significant number of people using terminal-based email, and for some number of them it was actually useful. Both actual dead birds and Clippy have their fans, too. But "and it was a lot of work to implement!" is not a reason for the user to love the feature.

    ReplyDelete