Published on January 23, 2008
This post was previously on the Pathfinder Software site. Pathfinder Software changed its name to Orthogonal in 2016. Read more.
I’m working on an internal project at Orthogonal: a cool little Rails app originally developed by one team and now being dusted off and extended by another team. Because this is an R&D project, specifications are a little vague. My colleagues and I spent several hours talking about which direction we should take the app we’d inherited. Each person’s idea, of course, was subtly different from everybody else’s. By the time we were done, we had a backlog the size of the monster from “Cloverfield” and no clear idea how to turn it into actionable user stories for our first iteration.
Then our CEO stepped in to act as a proxy client. At our iteration kickoff, we briefly summarized all of the directions in which we thought the application could be taken. He immediately reframed the discussion for us, prioritizing one particular feature that would differentiate our project from other applications in the market we’re targeting. Suddenly, it was glaringly obvious what needed to be done first and what could wait until later – or never. Within an hour, we had a wall full of assigned and estimated user stories.
The obvious lesson here is that client engagement is central to the agile method of software development. You can have all of the great ideas in the world, but without somebody to cut through the jumble, you’ll end up paralyzed. The less obvious lesson is that minimalism is the key to successful iteration planning. Once you’re focused on a specific feature set, pare away anything that’s not absolutely essential to getting that feature set out the door. Don’t focus on the platonic ideal of your application, but rather on the concrete version of your application that you plan to deliver in the current iteration. You’ll probably discover that seemingly essential functionality is actually low-priority – or totally unnecessary.