Agile in the Snow
AGILE IN THE SNOW
by David Kane
I was shoveling out snow from around my home and cars after this week's snow storm, and I contemplated whether there were any good Agile metaphors among the snow piles. Several came to mind, beginning with what user story would describe what I was trying to accomplish? I settled on "As a driver, I want to use my car to go to work." To complete that story, I needed to shovel and brush snow and scrape ice. I thought the story was interesting because it is a good illustration of value of slicing user stories vertically to deliver some capability, rather than horizontally across types of work. In my case, there were two cars outside, and by itself, shoveling around the cars had no value, unless the snow and ice on the cars were removed too. I decided to complete my first user story by freeing my spouse's car.
I started thinking about how to extend the metaphor. I can't do all of the work needed to clear the snow to drive a car to work. I needed the right set of primary, secondary, and tertiary roads to also be cleared in order to drive to work. There was an even bigger pile of snow behind the cars after the plow came through my neighborhood. While I didn't enjoy shoveling the pile the plow left behind the cars, that work was certainly preferable to removing snow from the roads between my home and office myself. That seemed like a good metaphor for depending on another team. Developers can leverage a great deal of value by relying on the efforts of other teams, but taking advantage of those efforts are not always free. There can be work to learn, configure and adapt interfaces to other components.
Once I got on the road, I realized that my definition of done differed from other drivers on the road. I saw drivers with snow covering the roofs of their cars, windows, lights and license plates. Perhaps this is a risk that drivers should burn down before they drive. (Not literally, shoveling, or brushing will do) Maybe these definitions can be thought of as regulatory requirements to satisfy, since many jurisdictions have rules about clearing snow from vehicles and sidewalks.
I found myself gold-plating my shoveling. Shoveling snow is good exercise, and it can be very satisfying to be outside. I finished digging out my cars and and sidewalks. I did another pass to scrape off some residual slush and ice that had melted a bit after the top layer of snow had been removed. I shoveled a path for my neighbors. There is an inexhaustible supply of snow to be moved. Similarly, there are no end to the potential improvements to be made to a software product. There are always more features to add, or technical debt to pay. We need to understand that done means that we have accomplished what we set out to do, even if that means that there is still other work that we can envision doing. Fortunately, I decided to pursue a sustainable pace, and stopped before I ran out of snow to shovel.
The snow itself is a good illustration of the fragility of long-range detailed plans and for the need to regular, adaptive planning. Families had to change their plans to respond to closed schools and offices. Schools had to replan to make up for lost instruction time. I know as a kid, not only did snow mean the chance for a day off from school, but it also meant money dropping from the sky as I shoveled my neighbors' driveways. Sadly, no kids came to my door after this storm, so I didn't get a chance to outsource the work and hand them a user story to complete.
I didn't conduct a retrospective, but I did have a celebration ceremony. I went sledding with my kids.
I am not sure if Agile thinking will really improve how I shovel snow. Perhaps these metaphors are useful for understanding Agile concepts, or understanding how Agile approaches can be applied in non-software settings. However, I can certainly say they are interesting things to ponder while shoveling.