Lets start my first article on AgileSoftwareDevelopment.com with a controversial title. Just to get your attention. You're still reading? See! It works!
I often see teams, even teams that claim to be doing agile spend several weeks or even months at the start of a project doing requirements, analysis, design and planning. BDUF is a habit many people find hard to give up. Team members instinctively feel there's something of value in that first stage of a project they'll lose when they just dive in and start creating software. That value is not in the documentation they deliver, but it's something they do during those activities that they forget to do later on. Lets look at a typical project to see what people do during that first phase that makes it valuable.
In traditional projects the change in dynamics is often quite obvious. At the start of a project the team has energy. The analyst talks to clients and stakeholders, the architects meet with the developers, managers meet with everyone to make plans and get estimates.
Three months later the situation is quite different. The analysts has moved on to a new project and is only available to the team for a few hours a week. The architects have finished their design documents, the manager only wants status reports, the developers are behind their workstations in crunch mode and the schedule is slowly starting to slip.
The value teams get from the big design phase is not in the documentation like people often seem to think. In fact it's quite the opposite. The documentation actually causes them to stop doing what made that first phase of the project so energizing. The value is in communication. But as more documentation is written the need for communication seems to be less and less, as communication stops the team is unable to react to setbacks and deadlines start to slip.
This is an important observation to make when you want to make a team like this more agile.
I'm not saying we should just keep doing big design up front, I think this is a wasteful practice. But before dropping it and forcing a team to work iteratively we should look at the value it brings and try to reintroduce that value through other means. Teams have to communicate before they can iterate. This can be done by introducing practices like daily stand-ups, pair programming and getting a customer on the team. Only then will the team be ready to drop big design up front.
Comments
Retaininmg value in another form
April 28, 2009 by Scott Duncan (not verified), 2 years 40 weeks ago
Comment id: 2480
Very good comment, in general, about moving toward greater agility from a more phased, sequential development approach: "we should look at the value it brings and try to reintroduce that value through other means."
Thanks
May 2, 2009 by Mendelt, 2 years 39 weeks ago
Comment id: 2497
Hi Scott, thanks for the comment and for the nice generalization of my article. I actually hadn't thought about it that way but you're right. Before changing things around you should look at the value the current process brings. This is applicable to more than just communication through big design up front.
Excellent insight,
May 7, 2009 by Jon Limjap (not verified), 2 years 39 weeks ago
Comment id: 2520
Excellent insight, Mendelt!
The amazing thing about this is that it applies to any project in any industry, not just in software development
I've written a quite simular
May 26, 2009 by Machiel Groeneveld (not verified), 2 years 36 weeks ago
Comment id: 2613
I've written a quite simular blog, it's cool that you've made simular observations!
http://blog.xebia.com/2007/10/13/the-joy-of-big-up-front-design/
Its sounds like the real problem
June 25, 2009 by Mark Levison (not verified), 2 years 32 weeks ago
Comment id: 2767
...is that Analysis and Architecture aren't part of the full time team. Instead of dedicated specialists why not have full time team members shadow the specialists and learn enough to play that role later on.
Alternatively just give the team access to the specialists as needed. I've done the later very successful on several projects and never a problem has it caused.
Good approach
June 25, 2009 by Rolf (not verified), 2 years 31 weeks ago
Comment id: 2769
Hi Mendelt,
thank you for sharing this.
I'd like to add that BDUF, or BUFR (big up-front requirements) as some call it, might be the best thing you can do. Or what people call agile nowadays might be the best thing. Or maybe it's the new fad Kanban. The point is to find that out and then play it.
How to find out what is best? It's certainly NOT just what takes us as fast as possible towards delivering working software. It's delivering real value to stakeholders. (You can measure this.) And if BDUF is the way to do it, then do it!
Rolf
RE It sounds like the real problem
June 26, 2009 by Mendelt, 2 years 31 weeks ago
Comment id: 2772
Having analysts and architects available at all time would be an improvement over the situation I sketched at the beginning.
However having analysts and architects divide their work between projects might not be an ideal solution. These are the people who should have an intimate understanding of the project and in an ideal situation they should work closely together with the team. I don't think analysts and architects are really specialists.
Other specialists that might not be needed during a whole project could work the way you indicate. Security experts, database-performance experts or other highly specialised people might work as 'consultants' within an organization.
RE Good approach
June 26, 2009 by Mendelt, 2 years 31 weeks ago
Comment id: 2773
I actually do think that in ideal situations agile methodologies are a better solution than BDUF or BRUF based approaches.
Usually we work with a couple of constraints, and in many cases the biggest constraint is the way people are used to work. It's very important to work within those constraints. You can't just jump to the ideal situation and expect things to work. Just saying A is bad, we shouldn't do A usually will not work. In many cases there's a reason people do A. Often it's not a very good reason but it's important to analyse what they get out of it and replace that before removing A. With BDUF and BRUF (I like that term, i've seen it more than once even in situations that are called agile :-) ) it's often communication.
Post new comment