In 1996, I worked as the assistant photo editor for the Daily Aztec, the San Diego State daily newspaper. I had just come home from Atlanta where I had a store selling officially licensed Olympic landfill (shirts, hats, mugs, etc) and I had some extra cash, so I bought a Canon EOS 1 and a 1N – both film cameras. The majority of my work was sports photography. My press pass provided me special treatment at Qualcomm stadium (formerly Jack Murphy Stadium) where I was able to shoot the Chargers, the Padres and the Aztec football games.
As I aged, got married and had kids, I found that I wanted to do more portrait photography, so I invested in lights for my film cameras. I found that I spent hours setting up the shot. I used all tools I had available to me: light meters, reflectors, umbrellas, drops – you name it I used it. Considerations had to be made with regards to film speed and the compositional elements of the picture. I knew my kids would not sit still so I had to spend this time getting everything just right.
I’d shoot several rolls of film and get it developed, waiting in eager anticipation of how the shots would turn out. Sometimes I was happy, sometimes disappointed. I was able to look at the pictures and see where I made errors in my setup and if I wanted to make changes, I would now know what changes to make to improve the shots. The problem was that the studio session was over. I packed up all of the gear and put it away for future use. I never remembered all of the tweaks I needed to make for my future sessions, so the learning curve was very slow. The feedback loop – the stimulus to response time – was too long, and I didn’t want to invest in a very expensive Polaroid back for my cameras.
When Canon released the EOS 5, the first full frame “reasonably” prices digital SLR, I jumped.
We have all become accustomed to digital cameras now. What drives us to them is their ability to provide us instant feedback. When I use the EOS5 for shooting now, I can test my setup with my subjects, making small incremental changes to the setup to make the shot the best it can be in real time. Gone are the days of planning and spending hours with the meter. Instead I can quickly erect the lights, meter it and snap some test shots – and adjust based on the feedback the camera gives me.
The process of setting up and getting everything “just right” so I could snap the pictures was, and still is, an expensive endeavor. What the digital camera has allowed me to do though is to reduce the cost. The old process:
- Setup – 4 to 6 hours
- Take pictures – 20 to 30 minutes
- Waiting time to develop – 1 to 2 days
- Study pictures and review camera settings – 4 hours
- Take notes to improve next set of portraits – 2 hours
Now, the time I need to execute the process is dramatically lower due to the instant feedback the digital camera provides.
- Setup, iteration 1 – 1 hour
- Test and review – 5 to 10 minutes
- Refactor setup, iteration 2 – 20 minutes
- Test and review – 5 minutes
- Refactor setup, iteration 3 – 10 minutes
- Take pictures – 20 to 30 minutes
- Take notes for future sessions on current settings – 30 to 60 minutes
So how does this apply to software? I’ve had many tell me it doesn’t and I think it does.
Traditional development approaches are like using a film camera. The setup must be done right – or as close to right as possible – because snapping the photos need to be perfect the first time around. Not until the film is developed do we have a feedback loop, and often it is too late to make changes at that point unless the customer wants to spend more money. Costs are high and the feedback cycle is long and the photographer is constrained by what film is in the camera.
Empirical (agile) development approaches are like using a digital camera. Digital cameras are adaptive. They allow the user to change film speed (ISO) to any condition. They have the ability to review the environment and provide users (or customers) with real time feedback. That feedback is used to make small adjustments to the camera or the environment that is being photographed. Applying this approach to software means that customers are able to provide feedback to the application under development, allowing the team to make small adjustments to ensure what is being delivered is what the customer wants. The cost of change in this model is small and the feedback loops are fast.
In photography, not every scenario calls for a digital camera. Some subjects require large format film bodies to give the photographer the desired result. The same applies to software. If a team finds itself doing a project that is similar to one is has done hundreds of times, it may be that a different approach is required. Just as digital cameras are not the end-all, be-all solution to photography, agile development is not the end-all, be-all solution to software development. If, however, you are developing a system and you find that the technology or the requirements are far from certain, requiring, multiple and quick feedback loops, agile is the right fit for you.