If you've been following the conversation, I discussed in Part 1 how I like agile roadmaps and gross estimation and/or targets for projects and programs. In Part 2, I discussed when estimates might not be useful. In Part 3, I discussed how estimates can be useful. In Part 4, I discussed #noestimates. Let me summarize my thinking and what I do here.
This series started because Marcus Blankenship and I wrote two articles: Stay Agile With Discovery, which is how to help your client see benefit and value early from a small project first, before you have to estimate the whole darn thing; and Use Demos to Build Trust, how to help your client see how they might benefit from agile in their projects, even if they want an upfront estimate of “all” the work.
Let me clarify my position: I am talking about agile projects. I am not talking about waterfall, iterative, or even incremental approaches. I have used all those approaches, and my position in these posts are about agile projects and programs.
In addition, I have a ton of experience in commercial, for-profit organizations. I have that experience in IT, Engineering, R&D. I have very little experience in non-profit or government work. Yes, I have some, but those clients are not the bulk of my consulting business. As with everything I write (or anyone else does), you need to take your context into account. I see wide project and program variation in each client, never mind among clients.
That said, in agile, we want to work according to the agile principles (look past the manifesto at the principles). How can we welcome change? How can we show value? How can we work with our customer?
Many people compare software to construction. I don't buy it. Here's a little story.
In my neighborhood, the gas utility is replacing gas mains.The project is supposed to about three months or so. We received a letter in May, saying which streets they expected to work on and when. The reality is quite different.
They work on one street, and have to go around the corner to another street? Why? Because the mains and lines (water, gas, electric) are not where the drawings said they would be. Instead of a nice grid, they go off at 45-degree angles, cross the street, come back, etc. Nothing is as the plans suggested it should be. During the day, I have no idea what streets will be open for me to drive on. The nice folks put everything back to some semblance of normal each night. They patch the roads they work on during each day.
And yet, they are on budget. Why? Because they accounted for the unknowns in the estimate. They padded the estimate enough so that the contractor would make money. They accounted for almost everything in their estimate. How could they do this? The company doing the work has seen these circumstances before. They knew the 50-year-old plans were wrong. They didn't know how, but they've seen it all before, so they can manage their risks.
The learning potential in their work is small. They are not discovering new risks every day. Yes, they are working around local technical debt. They knew what to expect and they are managing their risks.
Here's another story of a software project. This is also a three-to-four month project (order of magnitude estimate). The product hasn't been touched in several years, much to the software team's dismay. They have wanted to attack this project for a couple of years and they finally got the go-ahead.
Much has changed since they last touched this product. The build system, the automated testing system, the compiler—all of those tools have changed. The people doing the work have changed. The other products that interact with this product have changed.
The team is now working in an agile way. They deliver demonstrable product almost every day. They show the working product every week to senior management.
They are learning much more than they thought they would. When they created the estimate, they had assumptions about underlying services from other products. Well, some of those assumptions were not quite valid. They asked what was driving the project? They were told the date to release. Well, that changed to feature set. (See Estimating the Unknown, Part 1 for why that is a problem.)
They feel as if the project is a moving target. In some ways, it is. The changes arose partly because of what the team was able to demonstrate. The PO decided that because they could do those features over there and release those features earlier, they could reduce their Cost of Delay. Because they show value early and often, they are managing the moving target changes in an agile way. I think they will be able to settle down and work towards a target date once they get a few more features done and released.
Why is this team in such project turmoil? Here are some reasons:
- Their assumptions about the product and its interactions were not correct. They had spent three days estimating “everything.” They knew enough to start. And, they uncovered more information as they started. I asked one of the team members if they could have estimated longer and learned more. He said, “Of course. It wasn't worth more time to estimate. It was worth our time to deliver something useful and get some feedback. Sure, that feedback changed the order of the features, so we discovered some interesting things. But, getting the feedback was more useful than more estimation.” His words, not mine.
- The tooling had changed, and the product had not changed to keep up with the tooling. The team had to reorganize how they built and tested just to get a working build before they built any features.
- The technical debt accumulated in this product and across the products for the organization. Because the management had chosen projects by estimated duration in the past, they had not used CoD to understand the value of this project until now.
The team is taking one problem at a time, working that problem to resolution and going on to the next. They work in very small chunks. Will they make their estimate of 3-4 months? They are almost 3 months in. I don't think so, and that's okay. It's okay because they are doing more work than they or their management envisioned when the project started. In this case, the feature set grew. It partly grew because the team discovered more work. It partly grew because the PO realized there was more value in other features not included in the original estimate.
In agile, the PO can take advantage of learning about features of more value. This PO works with the team every day. (The team works in kanban, demos in iterations.)
The more often we deliver value, the more often we can reflect on what the next chunk of value should be. You don't have to work in kanban. This team likes to do so.
The kinds of learning this team gains for the software project is different that what the gas main people are learning in my neighborhood. Yes, the tools have changed since the gas mains were first installed. The scope of those changes are much less than even the tools changes for the software project.
The gas main project does “finish” something small every day, in the sense that the roads are safe for us to drive on when they go home at night. However, the patches are just that—patches for the road, not real paving. The software team finishes demonstrable value every day. If they had to stop the project at any time, they could. The software team is finishing. (To be fair to the gas people, it probably doesn't make monetary sense to pave a little every day to done. And, we can get to done, totally done, in software.)
The software team didn't pad the estimate. They said, “It's possible to be done in 3 months. It's more likely to be done in 4 months. At the outside, we think it will take 5 months.” And, here's what's interesting. If they had completed just what was in their original estimate, they might well be done by now. And, because it's software, and because they deliver something almost every day, everyone—the PO, management, the team—see where there is more value and less value.
The software team's roadmap has changed. The product vision hasn't changed. Their release criteria have changed a little, but not a lot. They have changed what features they finish and the order in which they finish them. That's because people see the product every day.
Because the software team, the PO and the management are learning every day, they can make the software product more valuable every day. The gas main people don't make the project more valuable every day.
Is estimation right for you? Some estimation is almost always a good decision. If nothing else, the act of saying, “What will it take us to do this thing?” helps you see the risks and if/how you want to decompose that thing into smaller chunks.
Should you use Cost of Delay in making decisions about what feature to do first and what project to do first? I like it because it's a measure of value, not cost. When I started to think about value, I made different decisions. Did I still want a gross estimate? Sure. I managed projects and ran departments where we delivered by feature. I had a ton of flexibility about what to do next.
Are #noestimates right for you? It depends on what your organization needs. I don't need estimates in my daily work. If you work small and deliver value every day and have transparency for what you're doing, maybe you don't need them either.
Estimates are difficult. I find estimation useful, the estimates not so much. I find that looking at the cost and risks are one way to look at a project. Looking at value is another way.
I like asking if what my management wants is commitment or resilience. See When You Need to Commit. Many organizations want to use agile for resilience, and then they ask for long commitments. It's worthwhile asking questions to see what your organization wants.
Here are my books that deal with managing projects, estimation, Cost of Delay and program management:
- Manage It! Your Guide to Pragmatic Project Management: Specifically chartering a project, release criteria, and what's driving your project
- Predicting the Unpredictable: Pragmatic Approaches to Estimating Project Cost or Schedule: How to estimate and what to do when your estimate does not match reality
- Diving for Hidden Treasures: Uncovering the Cost of Delay in Your Project Portfolio: What your CoD might be and how to think about it.
- Manage Your Project Portfolio: Increase Your Capacity and Finish More Projects (2nd edition): How to use CoD and other value approaches to manage your project portfolio.
- Agile and Lean Program Management: Scaling Collaboration Across the Organization: How to think about organizing a large agile and lean program. Use principles, not frameworks.
For me, estimates are not inherently good or bad. They are more or less useful. For agile projects, I don't see the point of doing a lot of estimation. Why? Because we can change the backlog and finish different work. Do I like doing some estimation to understand the risks? Yes.
I don't use cost as a way to evaluate projects in the project portfolio. I prefer to look at some form of value rather than only use an estimate. For agile projects, this works, because we can see demonstrable product soon. We can change the project portfolio once we have seen delivered value.
Remember. my context is not yours. These ideas have worked for me on at least three projects. They might not work for you. On the other hand, maybe there is something you can use from here in your next agile project or program.
Please do ask more questions in the comments. I might not do a post in a while. I have other writing to finish and these posts are way too long!