Friday, March 02, 2007

Someone who works for me recently was charged with doing some work on a system that many people use for the project on which we were working. He came to me with concerns on how to proceed. He wasn't sure how to set expectations to the team about the work he was doing. He was struggling with how to layout his work because he was concerned with impacting others. Keep in mind, his work is absolutely crucial to the forward progress of the entire team and as such has far reaching impact. Specifically, he was proposing to create multiple versions of the system and play a shell game of moving people from system to system in an attempt to minimize their impact. The following is a much edited version of the email I responded with:

----

The proper way to follow an Adaptive Approach is to keep one and only one reference or definition for a thing. In this case that is your application. If that impacts other work we are doing on the system, so be it. Work fast.

One of our basic principles is that the overhead used in trying not to impact other people slows us down. This slow down costs a lot and the amount of impact avoidance gained is rarely enough to warrant the expenditure. As such, if you need to make changes, then by all means make changes. If that impacts people, so be it. Work faster.

I will give you my best advice that you have heard before and will doubtless hear again from me. Think in terms of a single build. A single process. A single copy of code. A single version. A single Application. And so on. When you think about "old" versus "new" it skews your ability to focus on the work. Instead you spend mindshare on preservation of work, or juggling conflicting requirements. Whenever I hear someone in a conversation about setting expectations start to say "What we were doing..." or "Before we did it like..." or anything that doesn't speak in the present or future tense I mentally shudder. They have just lost points with me and I make a mental note that their stock price is sinking. That is because they are effectively wasting the time of everyone in the conversation.

Like ripping a bandage off, or breaking up with someone, you need to just do it quickly and for heavens sake do it all it once!

One of the quickest ways to get into an Adaptive Approach is to forgo chronological labels like old and new. As the Highlander would say, "There can be only one." It means you impact people more often, but working in isolation is a myth of software, not reality.

You will find that software development (real software development) is a social activity. It's sort of like stomping grapes. You can try not to get any on you, but you'd be really missing the point as well as the fun. Wash your feet, wear white clothes, and embrace that the mess is going to get everywhere for a little while and your clothes will never be the same.