Agile development: are requirement reviews worth bothering?

The place I work for used to be a big time Waterfall development shop but for the last few years we’ve been trying Agile development instead. I’m okay with it, but one thing is bothering me with the current project I’m on. We’re writing chunks of requirements one sprint ahead of the developers and that seems “normal”. For example the sprints go like this:

sprint…devs…analysts

1 … prep work … features a,b,c
2 … features a,b,c … features d,e,f
3 … features d,e,f … features g,h,i

etc.

What’s bugging me is that when we get together for requirements reviews at the end of each sprint, the devs smile and nod and don’t ask any questions, so we think we’re in good shape and baseline the requirements.

Then we start the next sprint which means we start work on the next set of requirements and then get interrupted by a mountain of questions and issues from the developers because NOW that they’re coding they’re finding gaps in the requirements from the previous sprint.

Is that normal? How do you prevent it? I know some questions will be normal, but… not basically reworking everything we wrote in the previous sprint which is what is happening.

What you’re describing is not agile, so asking if requirement reviews are helpful in that situation is not going to be applicable.

If you’re doing the same steps in the same order as in waterfall, it’s still waterfall even if you call it agile.

I’m with yellowjacketcoder, that doesn’t sound very agile-y.

A few questions:

  • When you say “features”, what do you mean? Are they very small bits of work? You want everything broken down into “stories” that are no more than a few day’s worth of work.

  • Once you have things broken down into stories, most shops do sprint planning, where the team asks enough questions that they can estimate each story. The idea here is not to ask every single question, but enough that the team can look at the story and estimate it.

  • Estimating: as I said before, the stories should be small enough & easy enough to understand that the team can look at 'em and estimate with whatever system you want to use. We do Fibonacci numbers (1/3/5/8). Other places do t-shirt sizes (small/mediium/large). Doesn’t matter what you use; the idea is that 1) everyone understands things enough that they CAN put an estimate on it and 2) you can immediately know if something needs more work; ie, it’s a 13 or an XXL, which are not allowed. If the team decides something is that big, someone needs to break it down into multiple smaller stories.

If you’re reworking things every sprint, I’d be willing to bet that you’re not breaking things down into small enough steps, and also that the analysts need to be farther ahead. What’s worked for us is the analysts sketch out “epics” - ie, a few months worth of work - in high detail. We’re not talking knowing everything up front, because we’re agile, and we know as we get into the work that things change. From there, we look at the epic, and roughly break things down into stories.

From there, we look at the stories, and decide what works needs to come first/second/etc. Once again, these are all very rough ideas, with the idea that things can and will change. We then will take whatever tool we are using (Jira, in our case) and put the stories onto the backlog in roughly the order we intend to do them.

At that point, we do sprint planning, and grab the stories that come first. Talk about them, estimate them, etc. Then start working.

At the end of the sprint, we have a retro, talk about what went good/bad/what should change. Then we do sprint planning - grab the next set of stories off the backlog, estimate, start work. Part of sprint planning may be looking at the backlog and saying “boy, we got that wrong, let’s move this set of stories farther down, we need more clarity on this stuff, so let’s talk more about it and write more stories” etc etc.

The whole thing is iterative; at any point, we might stop and say “we need to change this” or “we got this wrong.” We’re also constantly getting better at it, and we realize there is no one true way to do agile. Every team is different, and it takes a while to get into the groove. Keep trying!

Okay, no wonder I’m confused and that the project isn’t going very well! We’re calling it Agile but actually doing sort of a Waterfall embedded into an Agile process. In JIRA the PM is tracking epics (although I don’t know what is actually in our epics) and within those we have sprints. But we’re not iterating, we’re doing new features in each sprint, expecting each sprint’s requirements to be baselined (i.e. DONE!) and features to be coded and tested (i.e. also DONE!).

We’re also having sprint retrospectives. I wonder if I should provide feedback in the next one about how Agile actually works and how we’re not really doing it… It might be late in the game for such a large paradigm shift, though. We have a hard deadline to complete the project, with one implementation date and no “prototyping” or partial implementations allowed. Changing at this point to fix our process may cause us to miss our date. Ugh.

As I mentioned, we used to be a Waterfall only shop. They’ve been trying to adopt Agile gradually. I have a feeling that’s a recipe for failure, though. Do you guys think it’s better that if you want to do Agile, you should just do Agile and not try to do silly hybrid approaches? Or is a hybrid approach possible and we’re just doing it badly?

nm

I am (still) in the process from transitioning from a waterfall to agile methodology. And I am still struggling, so I can sympathize with you.

This is big. Agile is all about “stories” and not “requirements” per se. A story may address a part of a requirement, or all of it, or multiple requirements. But the point is that a story is a unit of work that can be done within a sprint. The other aspect is that stories are less “the system shall…” and more about how the feature/change will be experienced by the “customer”.
What I have found to be really useful is to lay out scenarios (if appropriate) to further describe “before” and “after” behavior. Questions from developers are inevitable. The more braindump you can put into your stories, the more you can head that off. In this manner, I see stories as a bit more effective than (old style) requirements.

From the trainings, this “sequencing” aspect of stories is not “pure” agile. In theory (apparently) stories are supposed to strive to be “independent” - of each other, and of any sequence. But for my projects this does not always hold. Or rather it wouldn’t make reasonable sense to do some stories in any order. So just put the “independent” aspect as a “would be nice”, but not a strict characteristic of stories. (I grappled with this when I first started doing user stories).

This “there is no one true way to do agile” is very true. You adapt the methodology to what makes sense for your projects. (This is like the “independent” characteristic of stories).

That part does sound like agile - you’re only supposed to accept user stories into a sprint that you’re confident you can finish before the sprint ends. That doesn’t mean a complete feature - you might, for instance, promise you’ll get the table data in the reporting module done in sprint 1, then do the charting for the reporting in spring 2, then rework the table in sprint 3 after realizing it doesn’t fit the needs quite right.

I think a hybrid waterfall/agile is just going to be waterfall with agile window dressing. BUT, I also agree with the part of the Agile manifesto that says you should adapt the process to fit your team, so if someone tells you “this is the one and only way to do agile”, that person really doesn’t get the agile process.

I wasn’t involved in the early planning stages of the project, but I get to deal with the results (oh joy). In this project we’re taking a legacy mainframe application and moving it to a new platform (not mainframe), a new browser based UI, and also SOA architecture. We’ve been told to document use cases (for both the UI and API’s) but not stories.

What you guys are explaining kind of describes a disconnect on the team. When I told the PM that we (the analysts) didn’t have the bandwidth to rewrite our requirements from the last sprint AND write the requirements expected in the current sprint, he asked if we could just document the happy path requirements. If you’re doing stories and little bits of functionality at a time, that would work. But we’re not doing requirements in terms of happy or unhappy path. Only the use cases have that concept. We could write the use cases and then document only the requirements in the happy paths for those, but… it just sounds like it will lead to completely disorganized requirements documentation and reviews. Keep in mind that our documentation is all done in Word and Excel and we don’t have any requirements traceability tools (like DOORS, which I used at a previous employer) to allows us to draft/baseline things at a fine detail level.

What a mess…

Pay attention to this. Beware of Agile as a religion. Successful development is the goal, not the ritual.

“Then we start the next sprint which means we start work on the next set of requirements and then get interrupted by a mountain of questions and issues from the developers because NOW that they’re coding they’re finding gaps in the requirements from the previous sprint.”

You’re way out of sync here, I’d guess nowhere near enough preparation before starting. You may want to think you’re moving a legacy application to a new platform but in actuality you are creating a new product and have to approach it as such.

My company transitioned from waterfall to agile about 3 years ago. They tried a hybrid approach, but ultimately ended up saying that was a waste of time and BANG! we all went agile. It was a huge change, but it was supported from the CEO on down, and looking back, it was a great idea.

The company as a whole put a lot of time, money, and effort into it. We had agile coaches and it was understood that things would not run smoothly for a long time. Still, I think going whole-hog is the way to do it.

Also - I would strongly suggest hiring an agile coach, or at least contracting with one while you figure out all the bumps. It’s hard to go from waterfall to agile without having someone who knows what they hell they’re doing and has the skills to teach/coach others through the process.

True, but I find that to be one of the bits that’s hard to do in the real world. I can’t, for example, put a button on a screen that does not exist yet, and “make a full-functioning screen that has buttons that do X,Y, and Z” is too big to be one story. In the real world, some things just have to be done in sequence, and IMO it’s better to accept that. Otherwise you end up with stories where a dev has to put a button on a screen that doesn’t yet exist :slight_smile:

A short-term fix you might consider is to recognize that you will continue to get questions from developers during each sprint and plan for it. Assuming you have more than one analyst, assign one to be embedded with the developers during development of a,b,c while the other analysts work on requirements for d,e,f. Then in the next sprint, one of the analysts who worked on the d,e,f requirements is embedded with the developers while they work on those.

This gets you a little closer to an Agile philosophy of fleshing out the details as you go, but it doesn’t require a full-scale change in your methodology.

I think this describes where we are right now where I work, though we are trying to be more “purely” agile.

**JcWoman: ** Sounds to me like you need to be two sprints ahead of the developers instead of one, and that you need to create stories for dealing with the inevitable back and forth between developers and analysts over the requirements. To refer back to your table, this would mean that starting with sprint 3, the developers would add a story in each sprint to question the analysts about problems in the requirements they started coding in the previous sprint, and the analysts would add a story to deal with those questions and rework reqs as needed. Doing this is nothing more than just planning for the extra work you now know is there. If the developer and analyst teams can’t increase their capacity to handle that extra work in each sprint, then obviously, this will stretch the effort out over time (less features designed and less features coded in each sprint = more sprints).

ETA: Scooped by TroutMan.

Yes, think this is what we need to do, although it may postpone our implementation date, like it or not. The project is only supposed to have one analyst on it. Early in the project we had some staffing changes on the BA team, so I got assigned to be the analyst on the project until they hired a new analyst. They did that and we’ve been working together while I bring her up to speed on our business domain, legacy application and ways of working. We’re in a very complex business domain so even though she’s really doing well, she’s still spending a lot of time going “I’m so confused!” and I’m worried that she’ll get frustrated and quit. (Insert Obligatory Mythical Man Month reference here.) So despite her best effort she’s slowing me down instead of allowing us to do twice as much work - the PM didn’t seem to realize this would happen. At any rate, we’ve just this week brought on a third (experienced) analyst to help us catch up, but only for a few weeks.

To summ up: I’m supposed to roll off the project, as is the temporary analyst, leaving our new person to finish the project solo. I may have mentioned unrealistic expectations somewhere earlier in the thread.

Can you elaborate on what a story is? How does it relate to business requirements? Is it a type of documentation, like a use case?

A story is just any bit of work that can be completed in one sprint. It can be a particular completed feature, or a part of a feature. If the story is too big to be completed in one sprint, it should be broken into multiple stories. And each story should relate to something that delivers something to the customer, even if it’s just work that needs to be done before something valuable can be delivered.

So if the story is “The kitchen needs a sink”, then it can be broken into various tasks, like
“install plumbing”, “cut hole in countertop”, “slap the sink in”, “hook up pipes”.

But maybe you don’t have the sink yet. So there could have been a story to buy the sink from Home Depot, or build the sink. And so on.

Speaking as a Developer, the story vs. requirement thing is important if you really want Agile to work.

Some BAs and PMs like to write requirements that specify the how, instead of the what.

“We need a graph over time that shows the values for the last three months, on a scale from 0 to 100, where the value for foo is plotted as a solid blue line and the value for bar is plotted as a dotted red line”.

That’s a requirement. The story would be like:

“The user needs a visual way to quickly interpret how foo and bar have changed in the last quarter”.

And then it is up to the developer/designer to implement how to display that information - they may come up with a way that works a lot better than the strict requirement, they may ask clarifying questions, and if it’s a piece of crap, they can iterate on it in the next sprint.

Since you’re moving from a legacy system, this is especially important. I’ve been on some projects like that, and it comes out as “the old system did it exactly this way, so the new system should do it exactly that way”. If that was the case, why are you bothering to rewrite the system!? Save some cash and just reuse the old thing. Better is to say “The old system had the ability to do X, so the new system needs that ability too” and trust the developers to implement that in a modern way instead of what was typical in the teletype era.

In addition to what Lemur866 and yellowjacketcoder said, I’d like to add that writing stories is an art. We have a lot of good POs here (product owners, essentially analysts) but some are a lot better at writing stories than others.

We’ve had good luck using the given-when-then style of writing stories. It gives a framework in which the story-writer, the devs that need to implement the story, and the QA folks all easily can understand and agree on what needs to be done.

To take yellowjacketcoder’s example and given-when-then it:

GIVEN a user with administration rights
AND we have 3 months of data
WHEN they open the “Graphs & Charts” page
THEN a graph is displayed
AND it shows 3 months of data
AND the scale is 0 to 100
AND the foo value is shown as a solid blue line
AND the value for bar is shown as a dotted red line

(I took some liberties with the example, but you get the idea)

You can have more than one given-when-then in a story. For example, the same story might have this as well:

GIVEN a user with administration rights
AND we have less than 3 months of data
WHEN they open the “Graphs & Charts” page
THEN a graph is displayed
AND it shows all the available data
AND the scale is 0 to 100
AND the foo value is shown as a solid blue line
AND the value for bar is shown as a dotted red line
AND there is a warning that we have less than 3 months of data

GIVEN a user WITHOUT administration rights
AND we have 3 months of data
WHEN they open the “Graphs & Charts” page
THEN a graph is displayed
AND it shows 3 months of data
AND the scale is 0 to 100
AND the foo value is shown as a solid blue line
AND the value for bar is not shown

You get the idea. It’s tedious at first to get everyone in the mindset to break things down like this, but I would bet a lot of money that it will reduce the issue you describe where the team has a thousand questions and you end up iterating over the same stories again and again.

Lemur866 did a good job of answering this.