Saturday, May 23, 2009

Don’t be obsessed with trying to fix bugs in the real world

In catching up with one of my favorite podcasts, I listened to Stackoverflow #49.  One of the points that Joel made really struck home.  At about 32 minutes into the podcast Joel made a point about Taxi Drivers trying to run him over in NYC.  I encourage you to listen to this chunk of the podcast, but let me attempt to summarize.  With the significant number of cab drivers and with an average turn over of 3 weeks, it’s futile to get upset and slap the hood of the cab that just about ran you over.  This goes along with one of my favorite sayings “Never try to teach a pig to sing, it just annoys the pig”.

So what does this have to do with being obsessed with fixing bugs in the real world?  What brought this home to me is when he started discussing what we do as software engineers, we work in a very complicated discipline, our job is literally to manage thousands or even hundreds of thousands of details, make those somehow compile and turn into something that actually compiles and does what our customers need.  In reality this is really a close to an impossible task, but its our job to search out and destroy “stuff” that get’s in our way to get as close to as perfect as possible.  Where we see a problem, we want to fix it.  Period.  It’s very difficult for us to know about a bug, know what the solution is, but just not do anything about it.

As a consultant, it’s my job to understand the customers needs and deliver a solution.  To deliver a solution, we need certain things to be successful (or save us a number of hours, which in turn takes money out of our pocket and gives it back to the client).  We also see other internal efforts or processes that are failing, and the solution is actually fairly trivial to implement. 

As difficult and as tenacious as we are about eliminating problems in our code, sometimes we need to let go and just accept that “it is what it is” when dealing with things we have little or no control over.

I’m trying really hard, but when I see a bug whether it’s in my source code or in a process, internal or clients, it’s very hard not to get involved and attempt to fix it.  I have a bad habit of offering advice where it’s not been solicited.  This comes back to the saying “Never try to teach a pig to sign, it just annoys the pig”.  I first heard this in the early ‘90s and ever since than I’ve been trying to internalize it.  I had one client that was actually a pretty good gig.  After a few years of being there, I finally felt I was starting to have a real impact on their business and their department.  However to take it to the next level required some changes I just couldn’t make without executive level support.  After about six months of lip-service and sleepless nights trying to figure out how affect change, I finally gave up.  That client is doing just fine today (at least that’s what I hear).  What can I/we take away from that?

When working with People Systems, whether that be a cab trying to run you over in NYC, a project manager staffing their “pet project” over yours or even that person that drinks the last of the coffee without making a new pot shouldn’t have an impact on your attitude and how you do you work.

So what are some ways we can combat this?  As I get older and more experienced within this industry the answer is starting to become my default answer when someone asks me a question.  It depends.  It depends on you, your personality, your team, your culture, and the specific situation.   So what are some possible solutions?  Flight, Fight, Ignoring or Empathy.  

Please excuse me for a minute, my wings are done and I need to refill my beer.


Ok – thanks for waiting for me, great wings, now back to your regularly schedule blog.

Where were we?  That’s right, Fight, Flight, Ignoring or Empathy.  As someone who is passionate about developing software, our first reaction will be Fight, that is to say, we see a bug and, heck we know how to fix bugs right?  Why should this be any different?  Well it is.  In some cases this is the right solution.  If your company doesn’t implement any sort of source control because it just seems like a waste of time, your first reaction should be indeed, let’s at least do some real basic blocking and tackling stuff like getting this in place (Fight).  If after three months of people not getting it and still thinking source control is just a fad it might be time to vote with your feet and pursue other opportunity (Flight).  On the other hand, if someone drinks the last cup of coffee and doesn’t make a fresh pot are you going to let that ruin your attitude for whole day (Ignoring)?  Generally if you choose the Ignoring path, you really need to be careful, if you are going to let something go, make sure you let it go.  Don’t just put up with it and take out your frustration in other ways such as being too critical in code reviews or probably more common venting scheme of have back-channel conversations with others.  This is just unhealthy and lots of small things will build over time.

This brings me to what I see as the final option which is probably the best to exercise, empathy.  What do we mean by that?  Wikipedia defines empathy as:

Capability to share your feelings and understand another's emotion and feelings. It is often characterized as the ability to "put oneself into another's shoes," or in some way experience what the other person is feeling

Everyone has a different background, priorities and experiences.  The cab driver that is trying to run you over is just trying to make enough money to send back to his family.  The selfish developer is so focused on cutting code he doesn’t realize he is always drinking the last cup of coffee.  The team that doesn’t think they need source control…wait, no sorry, no empathy there.  Anyway dealing with these sorts of issues might be considered as a change requests, not really bugs.  Does this work for me?  I wish I could say that yes, I’ve got it all figured out, but I can’t.  Managing hundreds of thousands of details and fixing bugs in our software is not even a fraction as complicated as being obsessed with trying to fix bugs in the real world.

Whew, nice to get that off my chest.  Now I can save a little money by not going to my therapists this month.  After the incident at last months session, they probably need a little time off :*).


No comments:

Post a Comment