Wednesday, 15 December 2010 10:31

Agile Project Management—No Upfront Estimates!

Written by 
Rate this item
(0 votes)

Dec15_RobertGalenImage2Dec15_RobertGalenImage1

I’ve been managing software projects for much of my career. Early on, I spent most of my time trying to estimate projects more and more effectively. I pulled together models for how to estimate. I kept track of historical estimate vs. actual data, so that I could evaluate the quality of my estimates. I even tried some modeling or arithmetic techniques to fine tune my estimates. Some of these are quite well know techniques like Function Points or Cocomo or the Personal Software Process.

All of this was focused towards estimate quality…not software product quality. I was worrying about how to represent the time to build the software to stakeholders and accountants so that we could reasonably know how much it would cost. Then we could make better decisions around whether to start it or not.

The odd thing, at least in my experience was that no matter how hard I tried nor how much effort I expended on estimation and planning, over 60% of my projects went awry. They failed. They were Death Marches. They were incredibly painful. And in many cases, they resulted in people losing their jobs.

I guess my point is—estimation is incredibly hard.

Now you may say, well Bob, you simply were poor at estimation and didn’t really perform it all that well. My counter is that I am really good at estimation. I’ve studied a wide variety of techniques and applied them diligently. I’ve even taught software estimation at international conferences. So, while I still have much to learn, I’m not a tool-less novice.

And I guess my other more crucial point is—estimation was the wrong place to be focusing my efforts!

What the Agile Methods Taught Me

When I first was introduced to the agile methods I was struck with the practicality of the planning. Instead of focusing on planning & estimation, the methods broke things down into two levels—high level release forecasting and low level detailed iterative planning. More importantly, it was the interplay between these two levels over time that refined your estimates.

No longer did you try to predict a guaranteed endpoint for a project. Instead you gave a reasonable, high level view that you promised to refine every time you got real-time performance results from your team. You would then narrow your view over time as you iteratively gained traction delivering real, working software. At each point of actual data, you would update your release plan / model and re-communicate to stakeholders where things actually stood in relation to their expectations and your previous views.

If you were behind schedule, stakeholders had the option of dropping, reducing, or re-framing scope based on business value and priority. But in order to hold to a date, they would have to adjust something. If you were ahead of schedule, a not so rare event, they could pull in more value-based scope and deliver more than anticipated.

High Level – Release Planning

The methods don’t spend a lot of time estimating in excruciating detail at the high level. Instead you estimate work (usually expressed as User Stories) in generic level of effort/complexity units (usually expressed as Story Points) so that you can plan the number of stories you can fit into a series of sprints to meet a content commitment for your stakeholder.

Remember, release planning isn’t a firm commitment. Nor is it exhaustive, detailed planning. It’s a best guess, high level view to packing work into iteration sized time-boxes. However, there’s a missing point to accurately planning a release. What you might ask?

It’s the teams’ own velocity. Put another way, the teams’ ability to execute and deliver fully done stories within your iteration time-box. The first time your team actually delivers work from a 2-week sprint you have a wonderful data point—actual team velocity! Please don’t undervalue it.

Low Level – Sprint Planning

But I got a bit ahead of myself.

In the agile methods, where does the team dig into the details? Refining tasks, looking at dependencies, breaking things down into smaller, quantified (hourly) units of real work to be completed? They do that on an iteration (Sprint) by iteration basis—grabbing a small “chunk” of the work, always the highest priority and most urgent work, and breaking it down for the very next Sprint.

If you ever get the chance to attend a proper Sprint Planning session, you’ll have transparent access into a software team breaking down work into very small tasks. You’ll begin to understand all of the complexity and nuance for each story. You’ll hear the testers challenging the developers on testability and how challenging this piece of code will be to test—which will add more tasks for testing and quality.

If the team feels a more detailed design is required, you’ll hear them discuss it. How much? Who should be a part of it? And what does the review look like? Etc.

In general, you’ll experience all of the complex gory details of software development—the real work involved for a single sprint. Then they’ll do something wonderful. They’ll commit to the work and deliver what they can (fully done) at the end of the sprint. You’ll now have an actual data point for the teams’ capacity that you can compare and contrast against the overall release plan—with full transparency into the plans and details and with no extra padding allowed.

How cool is that?

Wrapping Up

I do quite a bit of sharing on agile methods nowadays—via presentations, formal training, and coaching. Believe it or not, I often get challenged on some critical aspects or techniques surrounding agile. None more than the point being made here.

The challenge goes – “There’s no way my boss will put up with a non-committed date for a project” or a “We’ll know how long it will take when we see it” approach to project estimation will not work in my company because we live in the “real world”.

My counter then is usually the same—“Fine, do what you’ve always done”. Try to predict the future on a highly complex software project without doing any real development. If you can guess correctly, then great—stick with your practices.

BUT, if you notice that you often fail. And by often I mean 50%, 60%, 70% or even 80% of the time to successfully meet your stakeholders expectations, THEN you’re practices are clearly not working for you. 

Admit that and try something a bit different. Agile Project Managers make the above approach work every day in a wide variety of business, customer, and technology contexts. It’s no longer a bleeding edge technique! It simply drives more real-time transparency into project progress. It helps with adjustment based decision-making. And it leads to more collaborative and successful outcomes.

From my perspective, if your methods aren’t working that well for you then what do you have to lose? So, what DO you have to lose?

Don't forget to leave your comments below

 

Read 2305 times Last modified on Wednesday, 15 December 2010 11:44
Robert Galen

Robert 'Bob' Galen is a VP and Agile Coach at Deutsche Bank Global Technology in Cary, NC. He’s also the President and Principal Consultant of RGCG, L.L.C. He is seasoned agile consultant & coach who is also active in the agile community and regularly writes & teaches on all topics related to the agile methods. Bob also wrote the book Scrum Product Ownership, which is focused on that role and driving value in team delivery. Bob can be reached at bob@rgalen.com and networked with via his LinkedIn profile.

Comments  

 
0 # PMOGuy 2010-12-15 03:29
Good post on Agile. However, my experience shows that accurate planning is essential when working across several business units. For example. Let's say you had a company that builds widgets. They do not sell directly to the end-user, but rather various dealers. The R&D team is following the agile model and working hard to put a quality widget 2.0 out there. Here's where the problem comes in... The company does not have a large advertising budget and relies heavily upon their dealers to get the word out about their product. The biggest advertising comes in the holiday catalog and the dealer does not want to add anything unreleased to it. They have a September 30th deadline for the catalog. Now, your widget 2.0 team has pushed back the date to October 15th and the company loses the opportunity to gain exposure to the new product they've worked so hard to perfect.
Reply | Reply with quote | Quote
 
 
0 # Agile Scout 2010-12-15 03:39
Thanks a bunch for sharing. These are great lessons learned about Agile and estimation!
Reply | Reply with quote | Quote
 
 
0 # Robert Galen 2010-12-22 23:06
Hi PMOGuy, Thanks for your comment/questio n. It's not clear to me that your scenario is a problem in an agile context. I handle fixed date commitments all of the time in my consulting and in my "day job". BTW: that day job IS in the real world ;-) The thing is, I/we never commit to 100% or full scope by a specific date. What we do is commit to the critical, must have, highest value features. This is what we detail in pre-release marketing and discussions with our customers. Then we do something extraordinary (or at least I like to think it is compared to traditional approaches). First we always hit our release date. Second, we don't compromise quality attributes on the features we deliver. Third, we'll jettison low priority features that don't make the date cut. Then we rinse & repeat for the next delivery date & commitment. An other way of replying is - I think there is inherent "wiggle room" in scope on ALL projects. I just don't think we do enough to negotiate this with customers and stakeholders in meeting their REAL needs. The LEAN folks would call that wiggle room waste by the way. Agile in a way leverages this wiggle room by using the just-in-time and just-enough thinking that the LEAN folks have brought to manufacturing and now software development. Anyway, I hope that sheds some additional light on your question...Than ks for asking! Bob.
Reply | Reply with quote | Quote
 
 
0 # Vilvaraj 2011-01-23 03:18
Hello, Thank you for this good post on Agile. However, not sure how Agile will help to overcome the below situation. Lets say, we need to develop a complex software product. As per the Agile methodology, we develop and deliver the product in sprints. We try to accomate a particular functionality after a few iterations. What should we do if we found that the current software design is not flexible enough to accomate this must have function. We might ran into the risk of re-developing from scratch or even scrapping the project. I would suggest to gather all the requirements and decide on a high level design. At this stage we can apply Agile and start delivering in iterative fashion. But if we can't fit-in a change request in the current design, again we have a problem. Is it right to say that Agile will work better for loosely coupled softwares than closely integrated sofware. Best Regards, Vilvar aj
Reply | Reply with quote | Quote
 

Add comment