Wednesday, September 30, 2009

A Tree Named Performance

What does reactive mean to you? And by reactive I mean in the situation or person sense and not in the chemical sense :)

I found this great definition for reactive over at the Business Dictionary. Being reactive means:

"Behavior that is not internally motivated but manifests in response to a situation or the actions of others."

So is being reactive a good thing, a bad thing, or something in the middle?

In some cases it is indeed a good thing. Reacting to changing and fluid situations to put the right people and processes in place to solve a problem is a good thing.

Unfortunately being reactive tends to create a feedback cycle if you are not really careful. You get so wrapped up in being reactive, and responding to the needs, wants, and desires of those around you that you stop being proactive because you run out of time in the day.

You start losing sight of the forest as all you see are these trees blocking your way, and sooner or later you hit one of those trees. You hit it hard, and it really hurts, your head starts to swell and you see a bunch of stars, birds, and moons rotating around your head. A perfect storm that rips up all the trees and spins them faster and faster around, creating a massive feedback cycle that becomes harder and harder to break. You are spending all your time dodging trees.

You see, when a team is in reactive mode, and they are juggling requests as they come in from multiple sources, things get missed. Priorities get messed up, you lose sight of the big picture, and worse, your definition of done changes.

You no longer put the fire out, wait for any flare-ups from fires still burning in the root system, and then finishing off with some nice landscaping to restore the beauty of the forest. No no no, when in reactive mode you just stamp out the fire with your feet and move onto the next one as the hair is singeing on your arm.

So how do you break this cycle?

By making behavior internally motivated, not externally.

They are lots of ways to make behavior become internally motivated:
  • Make sure you create an atmosphere where your team will take a high degree of pride in the work they do (I don't want my teammate to find a bug in my code)
  • Enable your team to take ownership in your product (I have a vested interest in the success, I suggest features and improvements)
  • Identify and immediately correct issues before they become a problem (bad behaviors, bad processes)
  • Invest in paying down the technical debt (No more, hey this piece of code already does it that way so what's the big deal)
  • Make sure "done" is actually done
  • etc
Most of the above is related to strong leadership and management and deserve posts all on their own. One quick and relatively "pain free way" is can be taken straight from the Agile cookbooks, change the definition of done. For example, make sure done means that:
  • All features have been tested by the developer
  • The acceptance tests have been successfully executed
  • No regressions in the automated builds
  • You have checked for memory leaks
  • You have done some performance testing to make sure you understand the characteristics, and are getting the most bang for your buck
  • etc
A proper definition of done is crucial to being proactive and not reactive. Sure you still might hit performance issues, bugs, or missing features, but you are now forewarned and forearmed with the information to narrow down any issues, and you can answer something other then “I will have to look into it”, or worse, "I am not surprised".

When working with your teams, make sure that everyone agrees to a complete definition of done, and that everyone buys into the definition.

No comments: