A typical development cycle

This process often happens when starting a development project, especially in an unfamiliar environment.

Phase one: Tunnel vision

Your inspiration is high – it’s a new project and opportunity to create something truly useful.

You toil along for hours, days, or weeks working diligently with an air of excitement as things start to come together. You work quickly and efficiently, so you’ll easily finish the project in the required time-frame.

You get to the point where you’ve tested so much you can’t possibly think of another scenario where things could break. You ask others to test it.

“It works great,” says the others. “Except when I access it from over here.”

“Over where?” you say. They point it out to you. It’s like re-discovering what daylight looks like after coming out of a matinee movie.

“How did I not consider that angle?” you wonder.

You’ve spent the entire time developing functionality from only one point-of-view. Turns out there are a few other ways to access your feature, and in those cases it acts strange, or doesn’t work at all.

You’ve assumed way too much. Your scope was too narrow. You’ve had tunnel vision.

Phase two: Fix mode

From a user perspective, it turns out the interface only needs a few small tweaks to work for all possible angles. Except, the structure was built to function through one tunnel only, so expanding it at this point may cause a lot of re-work to be done.

You want to try anyway, as you’ve spent so much time on this, it is silly to start over.

You first start trying to expand the structure to support the additional angles. As each patch gets added, another issue pops up. You begin to feel that you are placing hacks everywhere, just to force it to work.

Pretty soon the initial functionality no longer works, as things have changed greatly as additions and modifications pile up.

Your initial, streamlined structure now looks like a bloated mess of code and confusing logic.

You forge on, hoping to come to a respite where things re-connect and begin working fine again. But you slowly begin to realize that all of the new logic and hacks have caused too much loss of focus, and you no longer have any confidence in your work, and can hardly recognize why things are working or not working.

At this point your inspiration has faded. The initial excitement you had for this project has dissipated during the hours, days, or weeks working at it. You’d like to be done, but now you find yourself staring at the possibility of starting over.

It is a tough pill to swallow.

Phase three: Clean slate

You’ve now gone through the following stages so far:

  1. Satisfaction. (“This is going well!”)
  2. Surprise. (“How did I miss that??”)
  3. Denial. (“I can fix this. I won’t have to start over.”)
  4. Frustration and blame. (“This is completely messed up. If only this person did not notice or demand better of this, I could be done by now.”)
  5. Acceptance. (“At least when I start over I will have a better overall understanding and it should go much faster, relatively speaking.”)

Now you begin re-creating your project but with the right vision in place.

At first it feels monotonous and repetitive, and with inspiration faded, it is difficult to stay on track and work as quickly as the first time.

You forge on, one step at a time, re-checking everything you failed to check the first time.

Hours and days pile up with seemingly slower progress than in phase one.

You start to pick up momentum again and things start falling into place. The old issues are being squashed one by one, and overall the result is better and more fine-tuned than the first attempt.

You begin to realize that the full cycle had to happen in order to produce the best possible result.

Looking back it all makes sense to have gone through the pain before seeing the gain.