Your company is building out a toolkit to support third-party developers. You’ll need a bunch of different types of widgets – combo-boxes, text entry fields, domain-specific controls, etc. You’ve got a long list of desired controls from your customers. You’re agile. What do you build first?
Agile In A Soundbite
Being agile is about delivering incremental value, quickly, getting feedback, and then delivering more incremental value. Repeat until “done.” Good agile adds a qualifier – do the most valuable thing quickly, get feedback, do the most valuable thing (that has not already been done) quickly. Better agile optimizes the rate at which you deliver value by taking into account both benefit and cost. Great agile overlays a focus on getting better at doing all of these things while you do them – becoming a learning organization.
Boiling the Ocean
A product manager I was coaching was faced with a challenge commonly referred to as boiling the ocean. His team was tasked with solving a market problem, and they were constrained to doing it with a service-oriented architecture that exposed a set of widgets (user interface controls) that customers could easily integrate into their products. This approach was designed to provide competitive differentiation by reducing the time and cost to deploy solutions that allowed customers to integrate his product into their existing platforms.
In initial conversations with customers, technologists, and architects, this product manager quickly amassed a list of desired widgets (controls) and scenarios (stories) in which they could be used. The product manager’s team had recently switched to an agile development methodology. The internal stakeholders, not yet accustomed to agile development, wanted “all of the widgets,” now.
This product manager was able to convince them that the team would deliver the widgets incrementally, following agile principles.
His question was – How do I sequence the widgets in the backlog?
Defining Widget Priority
The product manager had a list of widgets, combo-boxes, data-grids, text fields, radio buttons, etc., and for each widget, he had a real-world scenario showing how the widget could be used. Most of the scenarios involved customers using multiple widgets. He wondered if he should do some sort of analysis that detailed the frequency of use of each widget. ”This widget is used in 7 scenarios, so it should be done first; this widget is used in 5 scenarios…”
There was a strong temptation to add several “Create a widget” tasks to his backlog. It would be easy for his development team to estimate the effort required to deliver each widget. His team wanted to deliver incrementally, and “one widget at a time” felt like logical, discrete chunks of work to them. They could easily sink their teeth into estimating, building, and testing each widget.
A quick reminder of a main tenet of agile, delivering incremental value, illuminated the flaw in this approach. This approach would have been an inside-out prioritization, when value delivery requires an outside-in perspective. (See the ‘recommended reading’ suggestions on this page to check out Kessler and Sweitzer’s great book.)
If the team used this approach, after the first widget was complete, they would be able to deliver exactly 1 task, and 0 stories. Development teams don’t deliver tasks, however. The team’s customers would not be able to get incremental value from having a single widget. The team would have delivered seven incomplete stories – so they would have delivered no stories at all!
We reworked his approach as follows:
- Assess a value for each story, making sure that each story would enable his customers to accomplish something valuable.
- Engage their user interface / user experience designer to design a solution for the most valuable story. This design was constrained to use widgets in the user interface. The suggested way to communicate this design was with a storyboard and low-fidelity wireframes.
- Identify the widgets needed to be built to deliver that story, using the designer’s design.
- Deliver the story to the development team, including the storyboard, wireframes, and list of widgets to be used as acceptance criteria.
- Get the development team to size (estimate) the effort to complete each story.
- Where stories were too big (epics), collaborate to identify good ways to break up the stories into manageable chunks.
- Repeat steps 2 through 6 until the amount of identified effort was likely to fill the release (keep the dev team busy delivering value).
- As the team delivers each story, get feedback from the market, revisit the prioritization, and revise the “next” story.
What we discovered was that a scenario like the following (modified for this article) played out:
- The first story required two widgets. As no widgets existed, both had to be built.
- The second story required three widgets, but two of them had been built to support the first story – only one incremental widget had to be created.
- The third story used one of the widgets from the first story, but required additional behaviors. The original widget was modified to provide incremental capabilities (and value).
A Note On Team Structure
Astute readers will notice that there was a design step “inside the requirements process” – before the stories were delivered to the development team. Technically, that is true, for the way this particular company was organized. The user experience designer was not a member of the scrum team, but rather, an external consultant who supported multiple teams. The product manager engaged the designer prior to engaging the development teams.
This just as easily could have happened as follows:
- Product manager identifies, values, and prioritizes stories to be added to the backlog.
- Development team, as part of sizing the stories, engages their user experience designer to select the appropriate widgets, and those design decisions inform the estimation process.
- Everything else is the same.
This procedural variation does not have design “inside the requirements process.” The same people do the same things, in the same sequence in this scenario. The only difference is that the interface / interaction designer is a member of the development team. That would be ideal, but that was not how the company was organized.
In this particular example, having the product manager collaborate with the UX designer made the most sense. It introduced less complexity for the product manager to accept responsibility for this activity than it would have for the development team (who was still new to using an agile delivery cadence) to do it.
The key ideas at play here:
- Focus on realizable value to the customer (outside-in development), not tractable tasks (inside-out development).
- Collaboration with a UX professional is key to driving “interface requirements.”
- Deliver frequently and valuably, get feedback (learn), and incorporate that knowledge into whatever is next.