April 4, 2012

Design for Failure

One of the burner valves on our gas stove seized open last week. No big deal, right? Right, except that there's no secondary valve anywhere in the stove's manifold, which means that since last week I've had a useless hunk of sheet metal sitting in my kitchen because I had to close the emergency valve that supplies gas to both the stove and our dryer.

So what? Why not just go to Home Depot and get another valve?

Well, to start with, your local big box hardware store simply doesn't keep parts like stove burner valves in inventory (and for good reason - they'd sit around forever collecting dust and taking up shelf space). But, my local appliance parts & service store should have the part, right? Nope. Not the local one, not the one across the state, not the one in Atlanta, nor the ones in Chicago, Cincinnati, and Boston.

As it turns out, the part I need is on manufacturer back order, and won't ship for another 2-3 weeks. So, because of poor stove manifold design, poor home utility design, and a poorly timed production delay, my family and I will be eating from hot plates and hanging our unmentionables out to dry in the backyard for several weeks.

Oh, and have I mentioned that we're having 10+ people over this weekend for Easter and my son's first birthday party?

At the end of the day...

I'm in my current situation because of everyone else's concerns for themselves.
  • The stove manufacturer wants to reduce the cost of producing the manifold, so there's no secondary valve for each burner.
  • The home builder wants to reduce the cost of installing a dryer hookup, so he creates a junction in the gas line to the stove in order to run a line to the dryer, rather than running a separate line altogether to the dryer.
  • The valve manufacturer wants to reduce production costs (labor mostly), so it waits until the number of orders for a part reaches a certain threshold before it produces a batch of the part.
While all of the above are reasonable business decisions, the fact is that none of them thought about me, the consumer. None of them thought about what kind of situation I might be put in as a result of their decisions should a failure occur.

When you design an application...

...you undoubtedly think about its fault tolerance. You simply must. There are far too many direct competitors for your product for any user to tolerate a buggy application.

But, when you design and implement exception-handling code, whose concerns are you addressing? Are you addressing your users' concerns, or are you addressing only your own?

Are you providing your users with a way out of trouble, or are you leaving them to cook on hot plates and leave their underwear out on the lawn?