133 89 4MB
English Pages 252 [126] Year 2016
1
2
What others are saying about NoEstimates, The Book “The way this book was written helped me not only to understand the main ideas behind #NoEstimates but to internalize the concept with the real examples behind the story.” – Hermes Ojeda Ruiz, LogicalBricks “Finally! The most meaningful text book about project management and governance! This piece of project fiction will become the real “don’t panic” guide to project management!” – Tapio Järvenpää, Beer Executive Officer, Hops United OÜ "Anyone interested in deliver their projects on time should read this book. It´ll make you forget the idea that you can predict the future with a crystal ball. Instead of that you´ll learn to use your data and be more effective. Take of red pill!" – Emiliano Sutil, Project Manager al Xeridia S.L “You’re doing it wrong. Estimates that is, and #NoEstimates tells you why. Most importantly, however, the book tells you what you should be doing instead. The compelling mix of theory with story means you’ll quickly learn the lessons and start benefiting from the book. Read, think and apply #NoEstimates today." – Dr. Bruce Shcarlau, Senior Teaching Fellow at University of Aberdeen “I was sold on this book after reading the table of contents of the first chapter.” – Nick Mein, Engineering Manager, Trimble Navigation. “Do the most important thing is not a startup thing only! In my 15 years of experience with software development I've seen a lot of patterns of projects failing. I've experienced myself every example described in #NoEstimates. I've worked for a startup, where it is obvious what's important without estimating. With the help of the #NoEstimates book I can do the same within a multinational corporate organization.” – Jeroen Knoops, Software Developer “Trying to be more predictable by working with estimates is a seductively simple idea. After decades of widespread use of this idea, actual results are now very clear. Estimation has instead caused reduced predictability, lowered quality and unhappy customers. Read this book to start exploring some more successful strategies!” – Henrik Berglund, Agile Organizational Coach, Cedur AB "A must read for all of us that has discovered that it's in the doing of the work that we discover the work that we must do." – Anders Lundsgård, Senior Engineer and Solution Architect, Sweden
3
FOREWORD "Transformation comes more from pursuing profound questions than seeking practical answers." Peter Block I’m pretty good at getting comfortable in my ways. Perhaps we all are. Still, I'm certain this is not a good thing so I work hard to keep an open mind about making things better. I suspect that our biggest problems are hidden within the things we trust the most. A few years back I noticed there are a number of practices and techniques used in the management of software development done "by default". That is, we do them without question. Perhaps we assume that this must be the "right way" since everyone does it this way. Maybe it's how we were trained for our job, or that we've been doing it so long we don't even remember why we started. It could be it is a practice someone has documented in a textbook, or we learned through some training sessions at a conference on "how to manage software development." The problem for me isn't whether the practice is good or not, but rather that many often accept it as the only way and don't question its applicability. Simply following a practice or methodology by default indicates to me that there are likely some hidden problems we might not be willing to uncover. Are we being willfully ignorant, or are we unaware that we are missing something here? When the feeling of control and certainty is more important to us than knowing the truth, and the fear of change holds us back from seeking better, it's time to do some questioning. It's time to face our fears. "Humans are allergic to change. They love to say, 'We've always done it this way.' I try to fight that." - Adm. Grace Hopper Although I love that quote from Admiral Hopper, I'm not so sure that humans are allergic to change. I actually think we are pretty good at it, and in some things we welcome change once we get the idea that change is needed. Estimates are one of those things where "we've always done it this way", and there is little scrutiny of the use of estimates. When estimates don't seem to be serving us as we wish they would, the natural or common approach is to simply try to get better at estimates. As business people (and as humans), we need to have confidence in the methods we use - "getting better" is a less than meaningful approach unless we have sufficient faith in the thing we need to get better at. And even still, we must keep a close watch on whether things are getting better overall, and not just the estimates themselves. So naturally, I want to dig a bit deeper. Estimates themselves are not bad, and in some situations they can be very helpful. However, estimates are often part of an unquestioned process of managing software development, so I want to learn more.
4 When I become aware of a situation like we have with estimation I want to question, explore, and validate (or invalidate) the practice or method. Is it suitable for the purpose to which it is put? To accomplish this, I start by asking questions of myself. I want to find the "profound questions" that will lead to a better understanding. I have a number of questions I've posed to myself about estimates. Here are a few examples of the sort I find useful to ponder as a starting point: • "If I found estimates are not informing the decisions they are meant to inform, what would I change about the way I use them?" • "If I found estimates are not useful for a purpose, in what way could that be the fault of the estimates themselves? In what way is that an issue with the purpose?" • "In what way would getting better at estimates help if the estimates themselves are of questionable use?" • "What ways can we meaningfully validate decisions we've made based on estimates?" • "If we believe that getting better at estimates is our only choice, what are the possible pitfalls?" • "If the decisions that we currently think are important are not as important as we think they are, what should we do?" Early October, 2012: I had just met Neil Killick in Twitter, and read a blog post of his named "Should We Estimate Software Projects… At All?" After a few Tweets back and forth, Neil introduced me to Vasco Duarte. I believe that the first blog post from Vasco that I read on this topic was "A better way to predict project release date!" What a great starting place. Alone, I had my suspicions about estimates, but with others such as Neil and Vasco also questioning the practices of estimation and use of estimates I was encouraged that some real progress can be made. So now there were three: Neil, Vasco, and myself. Little did I know how much I would learn from my on-going conversations with these two. Even more wonderful was that new folks were joining the conversation daily. One notable luminary is Ron Jeffries who has now written extensively on the topic, and over time many others such as Allen Holub and Kent Beck have shared their ideas on the topic. But I'm jumping ahead. I noticed an interesting thing very early on: While we were all questioning the "de facto" use of estimates in managing software development, we had different ideas about what the core problems might be, and what to do about them. I took this as a good sign. I seek a broad spectrum of ideas, especially at the beginning. We were all noticing that something was amiss. If the use of estimates and estimation are suspect, I'm more interested in learning all about that than what to do about it. The "how" reveals itself when we understand the "why" about the "what." This is where the power of pursuing profound questions comes into play for me. The "how" of estimates is a moot point if they are not serving us well. It's of little value to solve a problem we don't yet understand;; we are just a likely to be addressing a symptom rather than the underlying problem. Let's get that settled first, and then explore the alternatives.
5 Getting better at estimates (which the entire industry has been trying to do for a long time) doesn't help if the underlying motivation for using them is not valid. Rather than jump to the possible solution of getting better at estimates, I want to do whatever it takes to understand the underlying reasoning and purpose of the estimates. That is an area worth exploring. Along the way it became apparent to me that some of the decisions we depend on for managing software development efforts are probably not the right decisions to be making. Why do we feel that knowing the cost of something "up front" is useful? Is that really important, or simply just something we've convinced ourselves that we can't do without? Why is it that we think we have "limited funds" for software development? If we are good at generating income from the work we do, are these limits even meaningful at all? What if there are alternative models that lessen or eliminate the need for knowing the cost? Consider that it might be better to become great at creating software, and delivering it into actual, meaningful use early and often, and earning a return almost immediately. Would knowing the cost be as important if we can start re-cooping whatever costs there are almost immediately? Maybe by following this model the desire and interest in estimates will simply fades away. Maybe not. Let's find out. Estimates are used in many ways, and there are seemingly countless methods of estimation for devising those estimates. What if we could forecast some aspects of our project without estimates at all? This is something I find interesting, and it's a possible game-changer. Vasco has been exploring one such alternative that is of particular interest to me, and he covers it nicely in this book. His ideas about forecasting based on the data collected in the doing of a project eliminate the need for certain estimates for that project, and the results are easily verified. If we find that forecasts are helpful, what if we could find a way to forecast without estimates that works at least as well as estimating does? What if it is actually better? And easier? How would that change our dependence on estimates? How would that change our regard of estimates? Should we at least experiment with ideas like this? What if we could try this and prove it for ourselves while still working in the same way we always have? Powerful stuff. I'm glad you are reading this book, and exploring along with Vasco. While this is still a very new effort, many people are gathering around these ideas and questions, and exploring for themselves the method that Vasco shares in the #NoEstimatesBook. Business people, Managers, "Customers", Developers, Analysts, and just about anyone will find this book useful. We all see a need for better, and insist that regardless how well entrenched the "way things are" might be, it's time for a change. And we welcome it. Woody Zuill #NoEstimates Pioneer, and Software Industry veteran www.MobProgramming.org, http://zuill.us/WoodyZuill/
6
THE #NOESTIMATES PREMISE If you have been around Agile and Lean for some time you might be familiar with the Japanese- born concept of “no inventories”. Between the sixties and the eighties, Japanese companies – Toyota being one of the most prominent examples – embraced a new paradigm of production founded on the premise of maximizing value for the customer and seeking continuous improvement. In order to maximize value, all activities and investment that were not directly adding value to de customer were labeled as “waste”. In this sense, moving materials from one place to another is waste;; reworking, overworking or overproduction are waste;; fixing defects is, of course, waste;; and unfinished materials waiting in a queue to be used (inventories) are waste. The golden rule to determine if something in your organization falls in the category of waste is: “do we want to have more of this? Like double or triple it?” Companies seldom want to ask this golden question from themselves. If you ask it too much, you’ll find that Managers are waste - you don’t want more of them. Meetings are waste. Code is waste. But, if mostly everything around us is labeled as waste, shall we get rid of it? The answer, of course, is no. The premise is that you want to have as little waste as possible, and not more. Once you reach the state of minimum waste, you should try to go even further and reduce it a little bit more – continuous improvement or Kaizen. Of course, you don’t want to double or triple your inventories. Inventories are a hidden bank account, money lying around doing nothing but deteriorate. Even worse, it requires investment in the form of space, maintenance, rotating stocks, security… You even lose inventory pieces due to aging, bad storage or warehouse mismanagement. You have to maintain stock records and reconcile inventory periodically – and if you’ve ever done something similar, you know how soul crushing this process can be. So what’s the only reason we keep inventories? Organizational dysfunction, or so believed the Japanese companies. People need inventories so they have access to materials between resupplies. These resupplies were separated by several hours, sometimes days. Each resupply needed to be huge so workers would have materials until the next resupply. Huge resupply needed space, storage, management, rotation, movement… Waste everywhere. The Japanese breakthrough was to imagine a company where resupplies were happening constantly, Just In Time. By imagining how work would look like in a world with no waste, they could forge new production paradigms like one-piece-flow, single-minute-exchange-of-die, zero- defects or total-quality. Of course, you could be picky and observe that each worker on a Lean factory might have a small inventory of pieces around, maybe a handful, maybe a dozen. You could then claim “Look! Look! That’s inventory! It is not actually true that they work with #NoInventories!” The
7 point is that these Lean factories have been able to reduce the resupply period from days to minutes, and their stock, inventory or storage needs from stadium-sized warehouses to drawers. So, #NoEstimates… It is obvious to me that estimates do not provide more value to the customer than inventories. People who find value on estimates are just addicted to a practice (estimation) to get something they find valuable: plans, comfort, uncertainty reduction, financial projections, sales proposals… But, again, these are not customer value. Applying the golden question, you don’t want to triple plans, estimates, reports and proposals. Hence, you want as few as possible – not less, but not more. So they immediately fall under the label of waste. Of course, you will always find someone that defends that inventories are in fact customer value, the argument being that inventories protect the customer against accidents and company dysfunctions. No serious Lean discussion can be forged around this argument nowadays. Interestingly enough, when it comes to reducing the need and dependency on estimations, people can be quite belligerent – you just have to wander around the twitter conversations around #NoEstimates to get a taste of it. I imagine that, in the early days of Lean, when Womack and Jones were just starting to spread the news about this crazy Japanese production system, several people would be as baffled as some other are nowadays with the #NoEstimates question. I can clearly imagine western managers protesting, “just in time production? Resupplies every few minutes? Are you CRAZY? Why are you trying to debunk the proven practice of accumulating inventories? What are you, smarter than all of us, than all managers that have been promoting stocks and inventories for the last four-plus millennia?” Ah, human beings… ‘gotta love ‘em. I have faith and patience. When some people in the Agile community started talking about zero defects or continuous delivery, not few voices rose against such concepts stigmatizing them as ‘delusional’ and ‘misleading’. Even the ideas behind the manifesto, which are enthusiastically defended nowadays, were difficult to promote mostly everywhere just ten years ago. I feel there’s a natural learning curve towards #NoEstimates. It is very frequent nowadays to hear from teams that moved from WBS-like estimation - estimating each and every task, then adding up all estimates - to story estimates, point-based estimates, t-shirt sizes and, counting stories and, finally, dropped the estimation-based conversations to focus on throughput, cadence and flow. I did my first public talk on #NoEstimates at Agile Lean Europe Berlin 2011. The audience was crowded by several well-known European Agilists, and I could metaphorically hear the sound of their neurons crashing into each other while I presented the idea of reducing the estimation effort and focus on stabilizing the team throughput and using past information to drive forecasts. People rapidly organized an Open Space around the topic, and the usual question was “yeah, but… You need estimates, right?” Not a question, in fact, more of a desperate cry in the middle of a withdrawal syndrome. My answer was direct – no, you don’t need estimates. You are using
8 estimates to produce some other stuff, so the question is, can we produce that other stuff in a better way that using estimates? Unfortunately, several people still ask for better ways to estimate. It is a flawed question. For me, it is like asking for better ways to win the lottery, or better ways to guess what team is going to win a sports match. But I have faith in the capacity of human beings to change, and patience to watch that change happen. A year ago I decided I wanted to push this change a little further and I asked my good friend Vasco Duarte if he was up to the job of writing a first book on #NoEstimates. Vasco had enthusiastically defended this approach based on his own experience. A few months after my talk at ALE2011, he presented a similar topic at OOP2012, and have been very active on the #NoEstimates debate since the very start. We started this work together, but I had to quit after some months – my job engagements and workload were keeping me behind the intended pace, and I was basically endangering the project. To be honest, we also had “creative differences”, as artists say, and decided to “pursue our own careers and personal projects”. No problem. We are still good friends, and I kept illustrating Vasco’s work - sort of – and providing my feedback and insights. We still collaborate on some other projects, and I’m sure we’ll keep finding opportunities to promote innovation on the Agile world. My final word to you, reader of this book, would be to remember the fact that mind is like a parachute, it only works when it is properly open. Too many people have lost the track of the #NoEstimates premise to dig into inane details. For instance, some people would say “oh, but you are forecasting results based on past information – isn’t that an estimate?” Or maybe “oh, but you are breaking big stories into small, one-or-two day sized stories, but in order to do that, won’t you need to estimate the story size?” Remember that #NoEstimates is not about no estimation ever, but about the minimum amount of estimates that will do, and then look carefully at ways to reduce that need even more. In that sense, I love J. B. Rainserger concept of #MehEstimates, like in “Oh, estimates… Meh!... Yeah, I guess we’re doing some, we are just not very concerned nor serious about them.” So, here’s to life, the #NoEstimates book. Enjoy. Ángel Medinilla Agile Coach, #NoEstimates practitioner, Book illustrator http://www.proyectalis.com/
9
CHAPTER 1
THE PROBLEM WITH ESTIMATES
C
armen came into the office bright and early in the morning. She was surprised when her boss unexpectedly called her into his office. Any other day he would greet her; invite her into the break room for coffee; have a friendly one-on-one chat with her, and talk about life… But not
this time.
This time her boss looked nervous, and he closed the door before he even said good morning to her. Carmen appreciates her boss, because she has learned a lot from him. But right now she is nervous. What could her boss possibly want that required them to meet behind closed doors? What could be so secretive that it couldn’t be overheard by anyone else in the office? “Carmen, we have a big project coming in. This is potentially the largest software project our company has ever won.” “A big project you say?” Carmen’s interest grew. “It’s about time they consider me for a big project,” she thought. “Yes! This project alone could finally make us profitable! And I want you on it; I trust you and appreciate your work greatly. I know you can pull it off…”
10
Carmen was surprised. She had heard of a new, secret client project that they called Big Fish, but she did not expect to be assigned to this project. After all, she still had the Telemark project going on. Carmen shifted in her chair and tried to think of something to say. Something didn’t feel right. “Well, that’s a surprise. I still have the Telemark project, which will be landing soon. I thought you wanted me to finish that before moving on to other projects…” “I did, but his came up suddenly.” Carmen’s boss interrupted, “I only just heard about it yesterday. Our CEO was able to find a way for us to bid on this project. It will be huge!” “Errr, Okay. What should I know about this project before I take this assignment?” Carmen was unsure about this. Her boss seemed almost too eager for her to say yes to the project. “Well, basically nothing. It’s just another software project. The only difference is that this project is bigger than the others you’ve worked on. But this time it’s with a very more important client.” “How much bigger project are we talking about?” Carmen asked. “Well…” She felt uncomfortable. Her boss wasn’t being upfront with her. “Is it twice as big as the Telemark project?” She asked, but her boss didn’t reply. “Five times bigger?”
11 Still no comment. “Ten times bigger?” “Actually, it is a public sector project, so I guess you could say that it’s several orders of magnitude bigger than your Telemark project….” He finally admitted. “Oh…” Carmen was speechless. This could potentially be the largest software project in the country, and she was being lined up to manage that project. “And we’ll need to present a bid by the end of next week!” Her boss looked excited. “So get your team on it. We need to close this deal now Carmen; it could change our company’s future! We need to submit our proposal as soon as possible!”
Do Estimates Work? If you were Carmen, you’d probably feel nervous too! I know I would. Estimating a software project is never an easy task, and the situation gets even worse when you have to do it without first understanding the context or the requirements well enough. Add that to the pressure to create a winning bid, and you have an explosive mix! And not in a good way. When I talk about #NoEstimates I get the most serious questions from people like Carmen. Questions such as, “How can I win a bid if I don’t estimate?”, or “My customers will not award me the contract unless I give them an estimate!” Fair questions, but before we tackle them, let’s tackle the real question here;; a key question for both you and Carmen, which is Do estimates work? Some researchers have already proposed what a “good” estimate should be. In 19861, they proposed that a good estimation approach would provide estimates “within 25% of the actual result, 75% of the time”. What this means is that, for all the projects you estimate, you should complete those projects within 25% of the original estimate for 75% of the time. Another way to put this is that you don’t have to always be within 25% of your estimate, but that you should be for 75% of all of your projects. Let’s examine the track record in the IT industry to see if we’re consistently able to estimate correctly. First we look at the Chaos report, a study that is run every few years to assess the “success” of software projects worldwide:
1
Steve McConnell, Software Estimation: Demystifying the Black Art
12
Figure 1 – Project success rate over the many CHAOS report surveys from 1994 to 2004. Graph adapted from Steve McConnell's book, Software Estimation: Demystifying the black art
This picture looks grim. If Carmen works for an “average” company her chances of success are slim, about 25% if you believe in the accuracy of the Chaos report. Not good. You can improve your chance of success by using certain software development practices like Agile, but even then the success rate is a poor 42%2. But let’s look at this from another angle. Even if you agree that being within 25% of the original estimate is a good result, what about the outliers? The tasks and projects that exceed the original estimates by so much that they run the chance of jeopardizing the entire project or portfolio? You may think that your projects don’t have such tasks. …Bad news…
2
CHAOS report for 2011-2012 shows 42% successful agile projects.
13
Figure 2 - Project estimates vs. Actuals (in days), track record for one organization. Graph adapted from Steve McConnell's book: Software Estimation, Demystifying the Black Art.
Look at the project on the top-left of this chart. This project was estimated to last 7 days, but ended up taking more than 250 days to complete. This is a difference of 1 week to nearly 9 months! While this is only one outlier, but the potential impact on the company is tremendous. A project like this can drive a company bankrupt. There are several examples in our industry that look like this. In a famous UK contract walk out, Accenture avoided up to £1bn in penalties3 in a contract with the National Health Service (NHS) in the UK. Some will argue that this is an extreme case, an outlier. But do you want to bet your company on one project if the possible result is obliteration? I don’t think so! Beyond the problem with outliers, let’s look at examples of sustained performance. Here’s the project delay (in % from original estimate) for 17 different projects from one single company spanning a period of 4 years. 3
Accenture avoids £1bn penalty for walking out of a contract with the NHS http://www.theregister.co.uk/2006/09/29/accenture_nhs_penalty/
14
Figure 3 Percentage delay to estimates at approval, and estimates at requirements completed phase for one organization. Adapted from data collected by me in one company between 2001 and 2003 for 17 different projects.
This company had an average (yes, average) delay of 62% for their projects. This means, for every project that should have lasted 3 months, it lasted nearly 5 months! As I look at the graph above I can’t help but ask: “Can I really trust estimates as a reliable tool to manage our companies?” Would you bet your entire company on a work-method (estimates) that delivers 60% to 80% of the projects late or over budget? This is the question that Carmen had to ask herself in the scenario above. Can she, in all honesty, risk her company’s future on a method that has that large a failure rate?
Why Don’t Estimates Work? “Carmen, I want you to know that you have my full trust. I know that you can pull this project off.” “Thank you sir, that means a lot to me.” Carmen said, while thinking: “and I may need to call on that trust. Hopefully you are not bluffing.” Estimates don’t really work. Specifically, not in the way the software industry practices estimation. And not in the way that many, including in the Agile community, propose estimates
15 should be done. There are three clear, intuitive, and proven reasons as to why that is so.
Hofstadter’s Law Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law. — Douglas Hofstadter4 Douglas Hofstadter observed that, no matter how much work went into developing computer programs to play chess against Grand Masters, the winning program always seemed to be 10 years away. Even though Hofstadter was referring to chess programs, this observation was picked up by several other writers, such as Brooks in The Mythical Man-Month and Beck in Extreme Programming Explained, as a way to highlight just how difficult it is to estimate programming, or other software development related tasks. However, Hofstadter’s Law is only one of several explanations for the continued failure to correctly estimate software development work.
Parkinson’s Law Work expands so as to fill the time available for its completion. — Parkinson’s Law Parkinson observed that bureaucracies seemed to expand and therefore create more work for themselves. He was commenting on the British colonial bureaucracy, but the rule was picked up later by Alessandro Natta in Italy and Mikhail Gorbachev in the Soviet Union who famously stated that “Parkinson’s Law works everywhere5”. Indeed, it works everywhere;; even in software development environments where the modern formulation of Parkinson’s Law is “work always expands so as to fill all the time available for its completion”. Another way to put it is: “If you wait until the last minute to complete a task, it only takes a minute”... Or does it? Parkinson’s Law is a description of the phenomenon that work will consistently expand to use all the time allocated to it. In other words, projects that get delayed, rarely catch-up. This, in turn means that if you have one task that is delayed, you should consider all subsequent and 4
Gödel, Escher, Bach: An Eternal Golden Braid. 20th anniversary ed., 1999, p. 152. ISBN 0-465-02656- 7. 5 O'Sullivan, John (June 2008). "Margaret Thatcher: A Legacy of Freedom". Imprimis (Hillsdale College) 37 (6): 6.
16 dependent tasks to take at least the time they were allocated, meaning that they will end after the originally scheduled time. Therefore, having one task late can potentially derail the whole project. How about that for a shot in the dark?
Accidental Complication Another reason why estimation is so hard goes by the name of accidental complication. J.B. Rainsberger introduced this concept at Oredev 20136. The gist of the argument is this: every feature or functionality added to an existing project has two cost elements (what you’ll want to estimate): • Essential complication or g(e): How hard a problem is on its own. For example, implementing tax handling is hard, because the tax code is complex in itself. That is what J.B. Rainsberger calls essential complication or g(e). • Accidental complication or h(a): The complication that creeps into to the work because – as J.B. Rainsberger puts it – “we suck at our jobs”. Or more diplomatically, the complication that comes from our organizational structures (how long does it take to get the approval for a new test environment?) and from how programs are written (no one is perfect, therefore some things need to be changed to accommodate the new functionality). The cost of a feature is a function of both essential complication and accidental complication: cost of feature = f(g(e), h(a)) In software, estimates of cost are often done by analogy. If features A and B are similar, then if feature A took 3 weeks, feature B will take 3 weeks. But then J.B. Rainsberger asks: “When was the last time that you worked on a perfect code base, where the cost of the accidental complication (how messy the code base was) was either zero or the same multiple of g(e) as when you implemented feature A?” He concludes that often the cost of accidental complication – dealing with organizational and technical issues specific to that code, and that organization – dominates (yes, dominates!) the cost of a feature. So, if h(a) is much larger than g(e) the cost of a feature cannot be determined by relative estimation. In turn, this means that the most common estimation approach, Story Point estimation, cannot work reliably. What this means for you is: You can only determine the real cost of a feature by recognizing and measuring accidental complication, or – like I suggest in this book – by using the #NoEstimates approach. As Troy Magennis 7shared with me in an email conversation: When we ask someone to estimate how long it will take to develop a feature or project they think about how long it would take hands-on, with perfect hand-off between teams and other staff with the specialist skillsets. This never happens. Work sits in queues;;
6
Watch the full video here (duration ~8 min): http://vimeo.com/79106557. Troy Magennis writes about software projects in his blog: http://focusedobjective.com/news/
7
17 people work on more than one project at a time;; people take vacations. We estimate the work, when we need to estimate how long that work takes to go through a complex system given all of its foibles. Systems thinkers like Goldratt, Reinertsen, and Deming understood this well. Work spends considerable more time idle and blocked by system constraints than progressing towards completion. Given that for inventive knowledge work the hands-on time through a system is considered exceptional at 30%, even if we were PERFECT at estimating that 30% of the time, we would be off by a factor of 70% without compensating. Even the commonly used doubling what you are told method would still be 20% low. The delays involved in a complex system are unknowable in advance. Just like travelling to work along the same highway each day, you can't know there is going to be an accident blocking all lanes three weeks from now, you can't know that the test environment will “catch fire” three months from now blocking all testing work. It's these unknowable system delays that make forecasting software projects exceptionally difficult. The only way to estimate and forecasting a system is by estimating the system impacts and the easiest way to do that is by observing prior history of work flowing through that system. #NoEstimates is a strategy that considers the system on its own terms, allowing some ability to predict completion times in advance. What Troy refers to is a critical insight: work flows through a system. Without understanding how that system works through metrics like cycle-time, lead-time, etc., the best we can do is estimate a “perfect” engineering day. You and I both know how many of those “perfect” engineering days we’ve enjoyed in our lives. Not many.
More Than Meets the Eye: Why Estimates Are Actively Harmful for Your Project and Your Company “Carmen, one more thing.” Her boss said as she was about to leave the office. “Yes?” “We have a lot riding on this project. It is important that we give them the right estimate for this project!” Carmen did not fully understand the meaning of this statement. “What does right estimate mean? Why would it be important to have the right estimate instead of whatever else he thinks I may give? Does he want to setup me up?” Carmen’s thoughts quickly spiraled in her mind, but she decided to keep them quiet for now, and answered: “of course!”
18
I would not like to be in Carmen’s shoes. What should she do? The average person would first find out what the right estimate for the project was, and then deliver that. And at first they would be hailed as heroes. But, what if the right estimate at the time of the project bid is actually the wrong estimate in the end? Deming8 was quoted as saying that “if you give a manager a target he will do anything to meet that target, even if he has to destroy the company in the process”. This is why targets are so important, but at the same time so dangerous. Carmen will probably go to her team, do the best job she can, knowing full well that the goal is not to give the customer a realistic expectation of how much time and money is needed to complete the project, but rather that she is responsible for winning a contract – no matter what it takes. Wanting to meet the target is a very strong pattern in organizations. So much so that, at the end of every quarter we see a frenzy of meetings and busy people trying to meet that quarterly target, be it sales or operations. Estimates are no different and help make projects prisoners of the targets they set. And this is one reason why estimates can transform from useless but harmless, to influential and harmful targets. Look at what happened at Enron in 20019 where the
8
W. Edwards Deming, American writer, author and coach that helped propel Japan to the most productive nation status with his work after the Second World War. 9 For details on the Enron scandal, visit http://en.wikipedia.org/wiki/Enron_scandal
19 “compensation and performance management system [that] was designed to retain and reward its most valuable employees, [...] contributed to a dysfunctional corporate culture that became obsessed with short-term earnings to maximize bonuses.” But there are more reasons and tempting shortcuts that make estimates actively harmful in certain situations. Below are 4 situations that are possible because of the use of estimates in software development: • Internal politics become a problem when deadlines are set because top management wants something done by a certain date, with fixed scope and fixed resources. Despite advises to the contrary, in these cases the HIPPO (Highest Paid Person’s Opinion) overrules any potentially “good” estimate created by the team. • Estimate bargaining occurs when a team has created the estimate and defined a possible release date, and then they suffer pressure from stakeholders to change their estimates. Symptoms of this dysfunction include calls for “more efficiency”, or “more commitment”, generally followed by phrases such as “we are all in this together”. • Blame shifting happens when people outside the project team estimate the work (e.g. experts), and then the project team members are blamed for not meeting those estimates. • Late changes are a form of Estimate bargaining, whereby changes are added to the project, but the schedule is not allowed to change for whatever reason. These are only some of the possible dysfunctions associated with estimates. This list is an illustration of how estimates can be used and abused for purposes other than actually understanding the project and the work that needs to be completed.
Entangled: How Complexity Destroys Predictability The biggest conundrum of all however, is how to deal with complexity. How complex dependencies in software projects hide the really big risks. Software projects present challenges that are unique to the software development domain. Unfortunately, many in the software industry still fail to recognize this. I often hear that “a good software project must, like a house, start on strong foundations of good architecture and good requirements”. My usual answer is: “sure, if you consider that you can start by building a tent, then evolve it into a hut, then increment it into a trailer, and later on deliver a castle, then yes, you could say that building software is the same as building a house.” Clearly, software is far more flexible and susceptible to evolution than a house. And that leads to creating a Complex10 environment where simple A causes B causality links are not always possible to determine. Software does not follow simple causality links. Rather, it follows complex causality links. A complex link is, for example, when a small change (like a single line) can
10
For the remainder of the book we will use the term ”complex” to define an environment where the relationship between cause and effect can only be perceived in retrospect, but not in advance. This definition comes from the Cynefin model (https://en.wikipedia.org/wiki/Cynefin) developed and popularized by Dave Snowden.
20 cause a catastrophic failure. Take Apple’s famous “goto fail” debacle11, where one simple line of code completely destroyed all the hard work to keep their product safe. No matter how strong the foundations of Apple’s products are, this single line addition to the code was enough to completely destroy their foundations and security credentials. How about that for a house project? Apple’s example above illustrates one additional property of software systems: non-linear causality, i.e. when a small change can have very large impact. When it comes to estimates, and estimation in general you have to be aware that no matter how thorough you are at estimating the work you must complete, it is unlikely you will uncover all the small problems with disproportionally large impacts. And there’s a very good reason for that: we wrongly perceive these examples of extreme non-linear causality to be rare12. We perceived to be so rare we usually call them outliers. The problem is: in software, an outlier may completely destroy all the effort that went into creating credible, solid estimates. Does this mean that we cannot estimate? No. But it does mean that our estimates are built on quicksand, no matter how strong we think the foundations are. Don’t believe me? Check out this collection of quotes that emphasize how unstable the ground underneath estimates is. Berard’s Law13: Walking on water and developing software against a written specification is easy if both are frozen. Humphrey’s Law: The user of the software won’t know what she wants until she sees the software. Ziv’s Law: Requirements will never be completely understood. Wegner’s Lemma: An interactive system can never be fully specified nor can it ever be fully tested Langdon’s Lemma: Software evolves more rapidly as it approaches chaotic regions. Medinilla’s Law for Software Contracts: 11
For more details on the Apple Goto Fail details, visit: http://www.digitopoly.org/2014/02/26/apples-goto- fail-is-pretty-interesting-and-worth-reading-about/ Read also Uncle Bob’s take on the “sensitivity problem” that software development suffers from: http://butunclebob.com/ArticleS.UncleBob.TheSensitivityProblem 12 In Black Swan, Taleb describes how often we ignore extreme conditions because we don’t consider the nature of systems we analyze. He describes 2 types of systems: ”mediocristan” where linear causality rules;; and ”extremistan” where non-linear causality is prevalent. He then explains how we tend to classify the systems we study in ”mediocristan” because we don’t consider the potential for non-linear effects which should drive us to classify those systems as ”extremistan” systems. 13 From: http://en.wikiquote.org/wiki/Edward_V._Berard
21 The 80 000 lines of code won’t fit into a 20-page contract. Do you have some more quotes to share? Send them over, I would like to collect them. Email me at vasco.duarte@oikosofy.com Quotes about late changes in projects Thank you Andres Lundsgård for the following quotes. “A late change in requirements is a competitive advantage.” Mary Poppendieck “The only thing certain in life is change.” Anonymous
Change Requests, Change Everything
And then there were changes. You have been there before. You work hard to try and plan a project to the best of your knowledge. The team starts to get the hang of the project and is able to deliver some software, only to see the changes start flowing in. First they flow in at a trickle, one by one. But later on, as the testing progresses, changes come in like an avalanche.
22
Figure 4 Number of cumulative open defects and the daily rate for closed and submitted defects during a project. Includes indication of development and testing phases. This is an illustration based on data collected during the lifecycle of a project where I worked as project manager.
Hopefully you have some margin (aka buffer) in your project. Right? Sure, but how much of a margin is margin enough? According to the definition of a good estimate cited earlier in this chapter, you should count on at least a 25% margin - assuming the estimation was “good” to begin with. Are you safe if you add a 25% margin to your project? The answer is no. And if you believe it helps, just re-read the Hofstadter’s Law again. In software development, changes have (sometimes very large) side effects. As you discover problems you find that the consequences of those problems go beyond what some call “bugs”, you discover blind spots: complete sets of functionality that require rewriting;; or new functionality that was missing. As a friend once described to me: “building software is like when you try to unclog the pipes in your bathroom and end up having to build three more houses just to get the toilet working again”. Can you predict all the significant changes you will get, and the impact of those changes? If you answer yes please send me your CV. But you will probably answer “no”, just like many people do when asked the same question. The bottom line is that estimation is a very poor method to predict the future, and change requests only amplify that problem.
23
All or Nothing: Death March Projects Estimations can become a life or death game for teams and companies alike. But nowhere is the effect of bad estimation more visible than in the statistics of mental health problems in overworked and overstressed IT industry folk14. The idea of the death-march project15 can be summarized like this: you estimate that you need five days to cross a desert, so you pick five water containers, one for each marching day, and you start walking. But, at the end of day five, you are out of water and you are still in the middle of the desert. What can you do? You cannot go back, as you know that it will mean five days walking through the desert and you don’t have any water for that. All you can do is keep walking until either you find more water;; you reach your destination;; or you die.
14
Article on the incidence of burn out and stress related illnesses in IT http://www.net- security.org/secworld.php?id=14666 15 The idea of death-march projects was made popular by Edward Yourdon in his popular book Death March: The Complete Software Developer's Guide to Surviving 'Mission Impossible' Projects http://www.amazon.com/dp/0130146595/
24 In a similar way, some projects follow an “all or nothing” strategy. This strategy borrowed from poker means that a team either delivers everything (“all”) or the project has no value (“nothing”). In this context, the estimation process becomes a battleground between the teams and the customers for that project. The teams want to survive at the end, and the customers want the certainty they will get everything they want – and when they want it. At the end of the estimation process the project will start, and the people trapped in that project can easily fall into a death-march mentality. They battle everyday to get the project on track, but a combination of estimation problems with constant change requests transform that project into a constant struggle. You work every day to the best of your ability and deliver concrete work. But instead of feeling confident and enjoying the progress, you feel like Sisyphus16: pushing a boulder up a hill that will invariably slide down, again and again. Making you - and the team - feel that there is no hope. A death-march project is caused by the all or nothing mentality and a utopian faith in estimation.
Is There Hope for Software Projects? If it is so hard to estimate software work, can you predict when a particular project will end? Yes, you can. And that is the right question. Instead of asking how long the project will take, ask instead: “given the rate of progress so far, and the amount of work still left, when will the project end?” Or, a similar question: “Given the rate of progress, how much of the work can be finalized by date X?” These are much more powerful questions. Here’s why: • These questions don’t assume an all or nothing mentality because, for example, you can remove work from what is left. • These questions don’t assume that it is possible to predict the future. Instead to answer them, you can use data about past progress and constantly update your answer to the questions. • To answer these questions, you can use available data that the project team has already collected (aka actuals) in the form of “rate of progress”, instead of having to guess at future events without considering the current rate of progress. In this book we will cover how Carmen will answer the question “when will X be done?” using something else than estimates in Story Points or hours. We will also cover the main challenges that come from the traditional approach to project estimation, and how to avoid, or reduce the impact of those challenges. But before exploring how a #NoEstimates practitioner would predict an end date for a project or how much work can be done by any given date, let’s review some of what the software industry today considers “best practice” methods for software estimation. This review will be essential for us to clarify the stark contrast between Estimates and #NoEstimates. 16
The myth of Sisyphus: http://en.wikipedia.org/wiki/Sisyphus
25
CHAPTER 2
WHAT ARE ESTIMATES?
“T
he right estimation for this project.” The boss’ words were still on Carmen’s mind as she walked down the hallway to her desk. This was not Carmen’s first project, but until now she had managed to give fair estimates on her projects because they were small and somehow similar. Take this system we already installed here, then install it there. Create a customized copy of that other system for a new client.
But this was a different kind of beast. New technologies, new client, new domain, new product. Until now, Carmen had just looked at how long things took in the past, then added some contingency buffer that could be accepted by the client. So far, so good. Of course, she also knew that keeping estimates ‘good’ during the project involved a strong management of the project. She was known to be very kind and empathic with clients, but 110% uncompromising when it came to scope creep and project changes. “Carmen delivers.” That was the usual comment of managers when they talked about her, and she liked it. Now, her reputation had put her in a tight spot. For the Big Fish project there was no useful historic information she could rely on, and still she was asked to give ‘the right estimate.’ Anyway, what was the ‘right’ estimate, or the ‘wrong’ estimate? Was this a game of guessing? Carmen sat silently for some minutes trying to assimilate it all. One thing she knew: once she would cast a number, an estimate, it wouldn’t matter if it was ‘right’ or ‘wrong’. That number would instantly become known as ‘the plan’ and for the following months she would be measured against it. But on the other hand, if that number was ‘too large’ the company might lose the contract and she would be held accountable. Carmen opened a drawer and pulled her old project management books in search of something she hoped would help her find the ‘right estimate’. If she failed to produce the right estimate, at least she wanted to have the opportunity to say “hey, I did it by the book! Literally!” It might seem like an obvious question. Everyone involved in some kind of project-oriented environment will have much experience using, producing or asking for estimates. Because of that experience, most people tend to form paradigms, models and pre-conceived ideas about estimates. In order to fully understand the #NoEstimates principles, let’s contrast them with the inherent meaning of the term estimates. What are estimates and what are they not? The Merriam-Webster Dictionary provides a good starting point, defining ‘Estimate’ (transitive verb) as ‘to give or form a general idea about the value, size or cost of something’. From this, we can deduce that estimates are ideas. Sometimes those ideas are vague, and other times they are very precise or accurate, but they are ideas nonetheless. Hence, estimates are guesses, not facts.
26
Every single time you provide an estimate, you are basically saying “I don’t know”. If you were 100% sure of what something is going to take in terms of time, resources or effort, then you wouldn’t be estimating - you would be providing concrete facts. This is not the case with estimates. When you estimate, you rely on task description, past experience and other available information to form a general idea and provide what feels likely to be a reasonable number. This number usually takes the form of a precise quantity, like in ten days or five thousand dollars. As soon as the human mind understands this number, it will likely tend to stick to it and give it the category of a fact, in an interesting form of grasping and clinging. As an interesting piece of trivia, Buddhists believe that grasping, wanting and clinging are the source of suffering – but that is a topic for a whole other book. Every estimate has an undetermined amount of uncertainty included. When you estimate ten days you would better be saying “roughly ten days on average;; it could be eight days if we’re lucky, and it shouldn’t be more than thirteen days unless all hell breaks loose.” Hence, every estimate is also a probability cloud17.
17
Probability cloud is used figuratively in this context to help the reader visualize an estimate as a fuzzy construct, just like the position of an electron around the nucleus of an atom. We know the region, but not the absolute position, and the position is constantly changing in time.
27
Figure 5 - Probability distribution for meeting a specific estimate. Note how the cumulative probability (area of the curve) of being late is much higer than the cumulative property of being earlier.
Another important fact to understand about estimates is that, once you place an estimate on something and there’s someone interested in that something – for example: your client – the clock usually starts ticking and will not stop. It’s Monday, you are asked for an estimate, you say “four days”, and your client automatically starts to expect something delivered by Thursday. But estimates are not commitments, nor are they a promise. Estimates will need to be carefully placed in a plan for them to make any sense at all. An estimate of three days depends on when we are be able to spend three days on the task. It also depends on many other facts like, for instance, if we will be able to focus on the task full time or we will need to split our attention between several projects. For now, we just need to make the difference between an estimate: “It will take three days”;; and a commitment: “It will be done on Thursday.” Imagine that I provide an estimate of five days. Then, I show up early at work every day with my best smile, I do the best I can, I work harder and smarter than ever, I even stay a little bit later every day… And, after five days, the task is not done. Would you say that is my fault? Of course, it might be my fault that I provided a guess and I did not make clear to you that it was not a commitment or a given fact. Hence, many people tend to think “oh, what we need are better estimates;; if we have good enough estimates, then all deadlines will be met”. Given that estimates are probability clouds, the statement above is like playing lottery and saying “oh, what we need is to choose the right number”, or investing in the stock market and saying “what we need is to invest in the right stocks.” Estimates in some very controlled and determined domains might come from a carefully developed mathematical model, and in this case all people involved will agree to these estimates because they agree on the model. In some other domains, people will observe the system, notice that there is a small variance or deviation from an average behavior and then
28 use that behavior to forecast18 future outcomes – provided that there are no unknown changes to that behavior in the future. But for complex environments, where estimates come mostly from personal experience and knowledge, these estimates will be different for every person. Experts might estimate some work as easy and fast, while novices might estimate the same work as difficult and long lasting. Some team members may see risks and estimate the impact on the schedule, while others may ignore those risks. Hence, in most environments estimates are personal. Because estimates are ideas and they are personal, there are several psychological aspects that affect them. For instance, if you are bound by your estimate and you will be judged, even fired because of the outcome, you will tend to be more conservative. On the other hand, if winning a project or making a sale depends on your estimate, you might be tempted to make a more aggressive estimate. If you add uncertainty, missing information, unknown factors that will affect the project, personal and psychological aspects, what you have left is a very inaccurate number that will sometimes result in an overestimation19 and, most of the time, in an underestimation. The usual difference between the estimated duration of a task and the actual duration of that task varies greatly depending on many factors. Some authors draw a cone of uncertainty20 with 60% variability at the beginning of the project, meaning that anything could happen between 0.4 times and 1.6 times the original estimate. In some cases, however, the difference between estimate and actual can be closer to 400%. This means that sometimes, the cost, time or size of the actual product ends up being four times bigger than the original estimate. Given the wide variation of between estimated and actual values, it is impossible not to cringe when some companies ask their people for estimates that are 10% accurate or 25% accurate. The only way to produce such accurate estimates, we have discovered, is to actually build the thing, then report the actual cost, size and duration as our 100% sure estimate. Another possible strategy to create the perfect estimate is to create a huge buffer for uncertainty. For example: estimating one month for something that shouldn’t take more than a week. Note, however that this approach will destroy your competitiveness: your direct competitors might be offering one or two weeks as estimates for the same work. And you shouldn’t forget Parkinson’s Law: once the one month estimate is approved, people will tend to use the whole month to add scope and functionality to the project – therefore increasing the risk of being late after all!
18 Editor’s note: Please notice the difference used here between forecast and estimate. This difference is further discussed later in the book. 19
Overconfidence as a very common bias leading to underestimation of task duration: https://en.wikipedia.org/wiki/Overconfidence_effect Thanks to Pier Lorenzo Parachinni for the reference. 20
Cone of Uncertainty by Barry Boehm, as described by Laurent Bossavit in Leprechauns of Software Development: How folklore turns into facts and what to do about it, LeanPub, 2013. Note that Cone of Uncertainty idea has been discredited in the software industry by the work of Todd Little and Laurent Bossavit.
29
#NoEstimates as #NoInventories Estimates are seen as useful by many, but even those that want to continue to use estimates do not advocate that we spend as much time as possible estimating a project. This type of activities, where more is not necessarily better, is labeled as waste in Lean Manufacturing (Lean). Lean defines waste as any activities that don’t directly add value to the product from the client’s perspective. Companies that adopt Lean work to eliminate or reduce waste to a minimum. Inventories, for example – partially produced or fully produced products not being delivered and instead kept in the warehouses – are a well known example of waste in Lean Thinking. But meetings are also waste. Consider this: if we double the amount of meetings, we are probably not giving a proportional amount of more value to the client. Use this heuristic to label waste: anything that we don’t want to do more of in order to make our customer happier is waste. Some people say “oh, but meetings add value, and inventories are valuable in some situations” - and they might be right. But from a Lean perspective, you don’t want to have as many managers as possible, as many meetings as possible, as much inventory
30 as possible. You want the bare minimum, and then you should try to figure out ways to operate with even less. You don’t want to spend double, three times or even five times more effort in estimates. You want to make as few estimates as possible. And, if possible at all, eliminate them. Hence, estimates are waste in the Lean mindset. This is the main premise behind #NoEstimates: estimates do not directly add value to your process, so we want to find ways to reduce the estimation process or even stop it where possible. #NoEstimates does not mean that there are no estimates at all, just like in Lean environments ‘zero inventories’ does not mean that there is no inventory at all. It is very usual in Lean factories to find small inventories of unfinished goods or pieces on every production cell, but compared to the old production paradigm these inventories have dropped close to zero. The same is true for #NoEstimates – do as few estimates as possible, ideally none. In an attempt to make this this concept even more clear, J.B. Rainsberger has suggested the hastag #MehEstimates as a possible alternative to #NoEstimates. However, the goal is clear: reduce estimation work to the minimum necessary, and then reduce it a bit more. Reduce it until you find it painful to work without those estimates, then adapt and reduce the use of estimates even more. For ideas on how to do this and be successful just keep reading.
Estimating vs. Forecasting Although these two words are used many times as if they are synonyms, they are significantly different. The Merriam Webster dictionary defines forecasting as “to calculate or predict (some future event or condition) usually as a result of study and analysis of available pertinent data”. If you compare this with the definition of estimates (“to give or form a general idea about the value, size or cost of something”) you can see that there is a fundamental difference between the terms: in the case of forecast, we use actual data to make calculations instead of using experience and other information to guess at something. Hence, when you study estimation methods you can divide them into pure estimates and forecasting methods – those that use specific data, correlation and system dynamics to predict future outcomes. Another way of looking at the difference between estimates and forecasts is that forecasting is viable only when uncertainty and variability are understood. For instance, let’s say that you are trying to predict the behavior of a system that is bound by certain physical variables. Some examples could be: • The properties of an electrical system, which are determined by the properties of its components, each of these properties with its own tolerances or variability. • The robustness of a physical structure, which is determined by the strength of its materials, which again have certain tolerance or variability.
31 • A simpler example, let’s say you want to predict how many lemons will your crew collect this morning from your lemon tree plantation, which depends on the man-power of your crew and the amount of lemons each tree produces. In the examples above, and under normal conditions, you can inspect existing data and find maximum values, minimum values, average, deviation and variability. You can then use that data to predict what is going to happen in the future with some accuracy. On the other hand, tomorrow may change the conditions substantially, it might rain, or some people might stay at home ill, and you should then react and update your forecast. This inspection of the existing data, together with building a model to predict future performance is what we call forecasting. As a counter example, if you used your own data on how fast you collect pumpkins as a basis to predict how many lemons a group of five people would pick, that would be estimating. You would have to make many assumptions: the walking distances are different;; picking lemons from a tree is different from finding and collecting one pumpkin at a time, etc. The reason for this is that you don’t have available data on the same task and you don’t understand the possible performance when five different people are given this new task, you assume that it will be relatively similar to picking lemons. However, estimation is possible and relatively easy in some domains. Let´s say that my friend and illustrator for this book, Ángel Medinilla is an average motorcycle-racing aficionado (editor’s note: which he is!), and he can race around the Jerez fast track in 2:15 (editor’s note: ahem!), which is pretty fast for most street bikers. When you compare that to the usual Spanish Motorbike Championship times that range from 1:50 to 1:42, it means that the Spanish Champion is roughly 25% faster than Angel. And then you have the world record for the track, which is Jorge Lorenzo’s 1:39 (only 10% better than the average championship race lap). In this domain we observe that there is not much difference between ‘average’ race lap and ‘world’s best’ (at least when it comes to percentages). You could forecast the time Ángel would take to complete two hundred laps with a relatively small margin, not more than 20 or 30%. In this domain estimation would be relatively simple and accurate. In software projects, however, the situation is different. Even if you don’t believe that the best developers are 20 to 50 times more productive than average, just consider the following story: Jon arrives at the office, energized after a good night’s sleep. He is focused, and is ready to get into the groove of delivering high-quality software. A few minutes later Karl, a star programmer, with many years experience arrives as well. However, he just spent the crappiest night of his life. His daughter was sick all night and he had to take care of her. He basically slept a few minutes during the whole night and is feeling like he was steam rolled. Which of these people will complete the tasks they had estimated with less variation to the original estimates? Whatever your answer was: can you be sure of your answer? In software development there are many factors affecting performance on the job, and those factors are not predictable nor do they exhibit ‘predictable’ variation. Karl’s daughter had not been sick for the last 5 years, now she is. Jon just lost a dear friend to cancer, and he is trying to come back to his full potential with the help of friends and doctors. Life is not predictable, and life is the key ingredient in software projects: our intellectual performance is the key-determining factor of our productivity and many factors affect us. Finally, estimation is affected by the expert knowledge fallacy. Experts are asked to estimate the average time a task will take and some understanding of the possible variation (in some cases). But experts can’t factor in the performance of other processes. A programming expert (e.g. an architect) cannot predict the time it takes to allocate testing staff to a particular task. Experts are good at predicting certain aspects of work, but you need to consider the whole flow of work before you can have reliable data to help forecast (data from several iterations for example).
32 When you base estimates solely on expert estimation you fail to account for many aspects that affect directly the performance of the project. When you use data from the project to update your forecast, you are factoring in all aspects of the current project, and will be able to detect when the project performance changes (more on that later).
The Iron Triangle Carmen realized that she had no way to forecast results for this project. There was no team selected, so there was no past information on performance. There was also no previous experience with this client, technology, product, or domain… There simply wasn’t any historical data. Undoubtedly, the amount of uncertainty in this project was too big to create an accurate estimate, if that was even possible. According to her experience, uncertainty would find it’s way into the project, usually in the form of delayed deliveries or increased costs. On top of that, she knew most of the time many of the requested features were never used, so maybe having some sort of variable scope would be a better way to deal with uncertainty; but as usual this was out of the question: this was a government contract after all. Old school. Closed contracts, up-front definition, zero tolerance to deviations from the original plan once this plan was given the GO-decision. As Carmen thought about the best approach to this project she doodled a triangle on a blank page. A discussion on the topic of estimation is incomplete without some mention of the well-known figure of the Iron Triangle. The Project Management Institute, in their Project Management Body of Knowledge (PMBOK), described nine domains for project management. Those are integration, scope, time, resources, risk, quality, communication, human resources and procurement. But it is commonly understood that there are three main variables that will place your project in the ‘project space’, and those are: • Time: when will the full scope of the project be completed given the investment and people assigned, or how much time is needed in order to finish the project given those constraints. • Cost: How many people, investment and resources are assigned to the project, or how many people, investment and resources are needed in order to complete the full scope in the projected time. • Scope: the work that must be completed in order to consider the project finished. These three variables are linked together: once you define scope, there will be a non-linear equation that will give you different possibilities on time and cost - the more cost, the less time, but with certain ‘crash points’ where spending more won’t cut time down, and using a longer schedule won’t reduce costs.
33
These three variables define the so-called Iron Triangle. In the center of the triangle lays a big question mark that symbolizes uncertainty. Once you understand these three variables as a single equation, you will understand the iron law of the triangle, which is that you can fix one or two of those variables, but you can’t fix all three of them. As a corollary, when you fix two of those variables, the third one will absorb all the uncertainty on the project, and expand as necessary.
34
Imagine that you want to print the complete Wikipedia. You fix scope by downloading the Wikipedia content to a massive storage device. Then you decide to print it in the next 50 days. At this point you have fixed scope and time, so you can start calculating how many pages, printers and people you need to successfully print the whole of Wikipedia in 50 days. Let’s say you calculate 9.6 million pages, 20 pages per minute with one printer, you’ll print eight hours a day, with infinite resources of paper, toner and people, and a simple calculation will give you an amount of just 20 printers to get the job done. Of course, this sounds like a very reasonable, and simple calculation. What could go wrong? But again, this is your estimate. You defined an Iron Triangle of 9.6 million pages;; 50 days;; 20 printers. In the center of the triangle, uncertainty will find a way to get into your project... Let’s say you start printing on day one, and on day five you decide to look at the numbers… And they show you that you are behind schedule! You call a meeting with your people and they tell you that, yes, paper and toner are infinite, but they need to stop a printer for two minutes in order to change paper, which happens after every 400 pages (20 minutes), and that every day they have to change the toner, and that takes another ten minutes. So, on average, every day there are 58 minutes where you are not printing. And, multiplied for 20 printers, that means 1 160 minutes, or 23 200 pages lost every day! In the next weeks, several other unknown factors will affect your project - printers will stop working, unplanned vacations and holidays, power outages, urgent tasks that will need the attention of your people, the list goes on. What you did when planning the printing of Wikipedia was estimation - you tried to predict what was going to happen, taking into account some nominal values and trying to imagine how the
35 project progress would look like. On the other hand, once you started managing actual progress data you were forecasting. At this point in the Wikipedia printing project, you have committed scope, time and people and resources with your client. What can you do? You cannot add more printers, as your contract does not allow you to. You cannot add more time, as you would miss the deadline. And you cannot cut scope down and print the Wikipedia only from A to U, you need the whole A to Z. The common answer in the software industry would be to drop quality: print in lower definition or make printers print two 50% size pages on every paper;; or make your people stay longer every day to meet their planned printing quota. The latter is a terrible idea both morally and rationally. It is reprehensible from a moral point of view as you are asking your people to give more than they are paid for, as they were not responsible for your failure to properly estimate this project. From a rational point of view it will make your people angry, frustrated, demotivated and will probably increase your turnover as people leave. In knowledge work environments – like software development – motivation is crucial to productivity, performance, creativity and innovation. By asking people to reduce their standards or stay over time, you destroy their motivation because of a commitment made based on an estimate! As this is a simple, repeatable project, the experience you gained the first time will help you reduce uncertainty in the future. The next time you are asked to print Wikipedia very few things will change when compared to the previous time you tried to complete that project: the content of the document will change, but you will have the same printers, same people, same time schedule, etc. Armed with a deeper understanding of the project: you will plan for paper change, toner change and maybe check the ‘Mean Time Between Failure’ (MTBF)21 statistics of your printers so you can plan for malfunctions. You can even create a risk management plan that involves some spare parts and a limited inventory of spare printers. Still, even the second time around, there will be some uncertainty that involves all the Unknown Unknowns, all the things that could go wrong and you could not know about. And when the domain of the project goes beyond a simple, repetitive, algorithmic tasks, and involves even rudimentary knowledge skills, the task of providing an accurate estimate proves to be really challenging, if at all possible.
The Start of a Project Is the Worst Time to Estimate Its Duration or Cost “How can I estimate the cost of the project or the time it will take? I don’t even have a team yet!” “Carmen, I think you understand how critical this project is for our company. Our CEO gave his personal commitment that this project would be done before the next election. Carmen, we can’t fail our company or our CEO!” “I understand sir, but I don’t even have a team yet. You can surely understand that these are not ideal conditions to make an estimate for a project that is this critical.”
Mean Time Between Failure, Wikipedia: http://en.wikipedia.org/wiki/Mean_time_between_failures
21
36 “Carmen, I chose you for this project from all of our project managers. I know you can pull this off. I’ve seen how well you tackle crisis situations. This is just another one. I expect your bid ready by the end of this week. Now I have to take a call with the board of directors.” Carmen turned to leave, but her boss had one more thing to say. “Oh and Carmen, don’t forget. This is our chance; one strike and we are out. Don’t let us down!” “Tell me something I don’t know!” She thought. At the start of a project is when we know the least about the project. Yet, in many cases it is when we make the most important decisions. We decide on timelines, functionality, technology, architecture, and other critical variables for the project. Many questions went through Carmen’s mind: • Can one developer estimate a project that other developers will work on? • How many people do I have to assign to this project? Will other projects be starved of people? • I need to balance price (part of the bid) with assigned people, resources and time. How do I do that? – In estimating we have two variables, cost and time, that are interdependent, but how? How do we quantify that dependency? Is a larger team more productive than a smaller team? • What if the team changes during the project? – Other projects will be started during this project. What if some of the people in this project’s team get assigned to another project? How will that affect the project?
Uncertainty and Buffers Carmen had a just a couple of facts to work with. Fact 1 was the expected delivery date: this was a fixed date, as the system should be ready for a major integration event with another project – which of course was out of Carmen’s control. Fact 2 was the scope defined in the request for quotations. The scope was particularly problematic because of the way it was written. Just like any other written document, there were many ways to interpret that document. For example, in some paragraph you could read ‘the system shall be able to export information to the most common data interexchange formats’. Of course, if this meant to create comma-delimited files, this wouldn’t be a problem, but she could recall projects where similar clients asked for PDF, Excel, OpenOffice, XML and even some really arcane formats. How could she tell up-front what was the meaning of this high-level scope definition? One way to try to limit the impact of the lack of scope understanding was to make some assumptions on the proposal and try to delimit what was included and what was not, but anyway there would always be a certain level of uncertainty and lack of definition. So no matter how many disclaimers she added, at the end the successful mutual understanding of the scope would be down to feature-by-feature negotiation, customer collaboration, win-win relationship and good will. “How likely is this client to behave this way? Not much…”, she had to acknowledge. Carmen realized that she needed more ways to deal with this project’s uncertainty. She needed new ideas. Every project has some uncertainty in it. In some domains, this uncertainty can be constrained in a way that ensures the project should (under certain conditions) not be off by more than a predictable margin – for example: plus or minus 20%. But in other domains the deviation from
37 the estimated time can be orders of magnitude larger. In some cases the estimation errors can be the 300% or 400% range, i.e. projects that take 3 to 4 times more than estimated. Most projects, at the advice of planning textbooks, build into the schedules and plans an uncertainty absorbing device, also known as a buffer. The idea is: we can’t know everything, so let’s add some buffer. A buffer adds some security margin to your project’s estimate. It can take many forms, although all of them are closely related by the Iron Triangle rule: • Time Buffers: once we estimate a deadline, we add some more time to deal with project uncertainty (which also means more cost, as people will be assigned to the project for a longer period of time). • Scope Buffers: instead of planning for N features, we plan for N + X%, where X% is the ‘scope creep’ expected, i.e. changes, new features, unexpected requests, feature size deviations, etc. Planning for more features means of course that you will need more time and money. • Cost, investment and people assignment Buffers: if you think you need a group of people or an amount of money Y to get the project done by some given deadline, you will plan for assigning Y+Z% money or people so you have a better chance to meet the deadline. Equally important to buffer definition is to decide how to manage that specific buffer. The buffer should not be just some extra time added to each task. Instead of that, every small deviation on the original plan should immediately be logged against the buffer, so we have constant metrics on project completion / progress rate and buffer consumption rate. Eli Goldratt described this approach in his Critical Chain Project Management22. Goldratt noticed that when every task estimate has some specific mini-buffer (padding), Parkinson’s Law would kick in and all tasks would expand to consume the available buffer. Tasks that take shorter than estimated will take advantage of the buffer and extend a little bit, or people will see that the next task is not supposed to start until next week and will take care of other pending tasks (HR policies, old projects, etc.) until it is time to start on the new task. Even worse: tasks that take longer than expected will consume their buffer and a little bit more. This phenomenon will affect the whole project. That’s the reason Eli Goldratt proposed using a single buffer for the whole project, instead of individual buffers for every estimate.
See Critical Chain by Goldratt, more information at: http://www.goldratt.co.uk/resources/critical_chain/
22
38
Buffers are dangerous as they give implicit permission to be late, as stated in Parkinson’s Law. Eli Goldratt noticed this, and suggested hiding the buffer from the project team. In fact, he even proposed to cut all estimates by half in an attempt to fight the negative effects of Parkinson’s Law, and then use the other half as a project buffer. Success is unlikely if your project management strategy consists of hiding information, scheming, conspiring and deceiving. And by the way, the project team will soon find out your strategy and will balance things out by doubling their estimates. The sad truth is that buffers don’t solve all estimation errors. Buffers can help you balance the expected schedule impact of bugs, rework, scope creep and other predictable risks. The type of risks that can affect software projects go far beyond slips of schedule or unplanned down-time. Hence why instead of managing risks, you should design strategies to reduce their impact when they materialize. One such strategy includes having a working product (potentially shippable increment or PSI) as early as possible. This PSI can work as an interim or ‘beta’ solution until you finish the whole product. Later we will discuss other ways in which you can use a PSI to actively reduce the impact of risks on your project.
Classic Methods for Crafting Estimates As Carmen worked on the project plan, things started to make some sense, but as understanding increased, her intuition told her that the overall size of the project was getting bigger and bigger. Even if
39 she were to improve her skills as a project manager and as a leader, she wasn’t sure that there was a way to comply with all the project constraints and requests. She thought of just calling it quits and rejecting the project, but this would be a bad career move. Rejecting responsibility just when everyone was relying on her to save the day would definitely force her to look for work somewhere else. Carmen had a reputation for facing problems head-on and being open about finding solutions. So she resorted to the oracle of all project managers: Google. She sighed deeply, typed “how to save a failing project” on Google and started browsing. All she could find was the good old “get better at estimating” advice, which obviously was not an option for her. Her project did not have more time, or more people, or some magic silver bullet to help her find the “better” estimates all project management specialists were suggesting she should find. Estimation continues to be the preferred method for project definition and planning. The Project Management Institute (PMI) has been the powerhouse for Project Management in the last decade. They issue the reputed Project Management Professional (PMP) certification, based on their Guide to the Project Management Body of Knowledge, the PMBOK23. The PMBOK has a full chapter for Project Scope Management, another for Project Time Management and yet another for Project Cost Management. Interestingly enough, the chapter on scope management does not talk about estimates – in other words, scope is implicitly considered fixed and defined. Both time and cost management chapters have several pages on how to estimate against this fixed, up-front defined scope. In practice most project management practitioners will face a flexible scope in their projects, whether by design or necessity. This difference between the prescribed approach and the actual practice creates a dilemma for all project managers practicing their craft in software projects. They can either accept a fixed scope approach or look for an alternative, for example, the value centered approach. The value centered approach accepts a fixed time and cost which are most likely to be determined by contract and availability of people and money, and accepts that scope will be variable. In practice, this is translated into a practice of adding or removing scope from the project as needed to compensate for unplanned work or risk events. In other words: to compensate for uncertainty. The value approach focuses on specific practices, like prioritizing scope and delivering the most valuable and necessary part of the scope early, leaving all the ‘nice to have’ and ‘bells and whistles’ for the last part of the project, where uncertainty is more likely to affect the project.
A Guide to the Project Management Body of Knowledge (PMBOK Guide) Third Edition
23
40
After some hours of writing high-level work packages on a Gantt chart, Carmen decided to ask for help estimating all of those work packages. She was looking for dependencies by dividing work into smaller work packages and analyzing their dependencies. She needed some experts to help her. During the following days, Carmen desperately tried to book some time with the architects and technical leads in the company. Unfortunately, they were all too busy with ongoing projects. Other project managers even asked her not to disturb ‘their people’. She managed to gather some insights on the technical side of the project, but barely enough to understand the meaning of some terms – not even close to craft a meaningful estimate. “Darn, I need to continue to dive deeper into this project. I’ll go and interview the Business Analysts (BA) at the client site. Maybe they can answer the questions I have from reading the requirements document.” Carmen picks up her jacket and starts walking to leave the office. She dials the number of the contact person at the client. “Caroline, hi! It’s Carmen from Carlsson and Associates. I’d like to come in and interview the BA’s for project Big Fish. Is it ok if I drive over and meet with them after lunch?” “Hi Carmen, nice to hear from you. Yes, you can come over but I’m afraid that the BA’s have already been assigned to other projects and are out of the office during this week for kick-offs. Oh wait, Travis is still here. Let me check if he is available…” Carmen hears Caroline ask something. Silence. After a few seconds: “Carmen? Still there?” “Yes, Caroline. I’m here.”
41 “Yes, so you can come in and meet with Travis, but he is very new on the project and may not be able to answer all your questions.” “It’s better than nothing,” – Carmen thought to herself. “Ok, I’ll be there at 13:00. Talk soon.” As Carmen drives to the client’s offices, she starts thinking about uncertainty. “What is the uncertainty level in this project? If I could quantify it, how large would it be?” She decided that the uncertainty level for this project is a solid 5 on a scale of 1 (no uncertainty) to 10 (complete unknown). Usually this would mean that she would give a margin of 50% to the project estimate. But she knew it would not be acceptable this time. She thought about it and decided that a margin of 20% was all her stakeholders would accept. A few hours later, on the way back to her office and after having spent 2 hours grilling Travis the Business Analyst, Carmen reflects on the questions she could not get answered and concludes: “If this is how sure they are of the requirements of this project, then it is clear that the requirements are going to change a lot during the project.” “With this level of expected changes and the uncertainty on our side, the uncertainty level should be raised to a 7 or 8, but that is not sustainable in the current situation. I’ll have to spend a lot of time breaking down those requirements with our Senior Architect. We must win this bid.” As Carmen enters the office her boss calls her into an empty meeting room. “Carmen, I just got word that Accent Partners delivered their bid for Big Fish. You have an email with the details of their bid. Make sure we win this bid. I have faith in you.” Back to the PMBOK, the cost and time estimation sections provide several tools for crafting estimates. A short summary of those techniques is: • Expert judgement: as the name suggests, you find someone who is an expert on the domain and ask about his or her estimate – which is the expert’s guess. • Analogous Estimation: consists on using information from past, similar projects or tasks and assume that this project won’t be very different from past projects. • Published Estimation Data, Vendor Bid Analysis: the study of similar projects from other organizations can provide data that we can use to refine our estimates. • Bottom-up Estimating: the idea is to divide the whole project in small, estimable work packages or tasks and then add them all together to obtain a whole-project estimate. • Parametric Estimation: also known as sampling. If there are simple, repetitive tasks, then you can estimate the duration or cost of one or a few of those tasks and multiply by the total amount of tasks in the whole project. • Group Decision-Making Techniques: the main rationale for this approach is that a group of experts can produce a better estimate than one individual on his own. Brainstorming (producing several ideas and then analyzing them) or Delphi and Wideband Delphi (asking several people separately and then putting their estimates in common and discussing them) are some of the known approaches.
42
Estimating in The Agile World Agile practitioners have suggested several agile specific practices and tools. Possibly, one of the first approaches was the Extreme Programming planning game, which used a group decision technique to decide on how much work to take on into an iteration. Team members would discuss and collaborate to describe the work they were considering undertaking, and finally decide on what they could commit to. The discussion and conversations during the planning game helped build a common understanding among the team members. Poker planning and estimating Another well-known technique is the planning using cards with numbers, in which team members will select and later discuss around the size and complexity of work the team wants to plan for a particular iteration. This approach is often called planning poker, and helps the team discuss each work item (typically user story), followed by a blind estimation vote to avoid team members from being influenced by other’s votes. Once the vote is completed, the team will discuss the highest and lowest estimates to try and reach a consensus or, if needed they will estimate again. Once the team agreed on a particular size and complexity for a user story, they would assign a story point value to the user story and discuss the next, until they felt they had reached the limit of possible work for the next iteration. Planning poker is typically used by agile teams to do relative size estimation: the relative effort necessary to one work item, when compared to other items in the team’s backlog. This gives the team a measure of size and complexity in the form of a story point value assigned to each story. All stories of similar size and complexity will have a similar story point value associated with them. Using past velocity to estimate future capacity The Scrum framework also introduced the term velocity as a measure of the team’s capability to deliver completed (aka Done) work in each iteration. After collecting some data from several sprints, then teams can use the average velocity to analyze a prioritized and estimated backlog and forecast delivery dates and costs. The caveat is that the understanding of the work to be done changes over the course of a project, which in practice means that some teams end up re- estimating their backlog items several times during the project. Prioritization vs. estimation These tools and techniques assume that some kind of prioritized backlog has been created with the customer or their representative. However, most frameworks fail to establish a prioritization technique, they just assume that the client will know what is more important and valuable. This is a major flaw, but fortunately frameworks and tools – like the Lean Startup ideas – were developed to formalize prioritization methods. These prioritization methods are very much in line with the ideas in this book. Most noticeably Kanban and Lean Startup place a greater emphasis on the prioritization process than on having estimates of the backlog items. The rationale is that once you know which is the one single most important thing in the universe for your company right now, there is little value in knowing how much is it going to cost when compared to other items in the backlog. For these methods the value of the work in the backlog is the driver for decision-making.
43 Estimation vs. flow Lean, and Kanban highlight the importance of limiting the work in progress and helping the system flow. Flow improves as we reduce the number of work items in progress, which in turn reduces the time to complete each individual work item. Once there is a prioritized list of work items, the Kanban ideal is to be able to process work items one at a time, non stop, and do that with as little delay as possible. As a way to help the work items flow from backlog to production, variability in the work and/or processes should be addressed, understood and, if possible reduced. The use of historical data for flow metrics can then be used to forecast results, deadlines and projected costs, without having to estimate every individual work item. Selection method: riskiest assumptions first Lean Startup focuses on identifying the most important assumptions about your business model: those that, if proven wrong, would invalidate your whole project. It then urges you to define experiments to prove those assumptions right or, if they are wrong, create new assumptions through a pivot24. These validated learning cycles should be performed as quickly as possible, ideally several times a day. If you are able to perform this series of strategically critical experiments so quickly, then spending time trying to estimate the length or cost of each experiment is pointless. When are estimates reliable? Estimates are often used in agile projects to provide information that helps prioritize the backlog of work items. However, those estimates are so often wrong that the only appropriate use is to separate clearly the items that are sufficiently different from each other. This clear difference would help us with the decision to drop one of them. For example, if one item is estimated to last one week, and another item is estimated to last for 10 weeks, then it is easy to believe the first item will be delivered faster. However, if the difference in estimation is small (e.g. 10 weeks vs. 12 weeks), the errors in estimation can easily defeat the purpose of making a decision based on the estimated duration of that item. Focusing on value Additionally, experience shows that only a fraction of all product features deliver the bulk of customer valuable functionality. Identifying which features are the ones that deliver most value is therefore more important than finding which of them are small and which are big. In essence, cost is not proportional to value. Once the cost difference between features is reduced (by splitting the work into small, verifiable work items focusing on value), prioritization based on customer value for each work item provides better results than deciding which are the cheapest or the most expensive work items. But don’t we need to estimate to know when the project will be done? This is the most common objection to #NoEstimates that I hear over and over again. In the next chapter we explore the reasons why this question is asked. In other words: why do we really need estimates?
24
Pivot is a structured course correction designed to test a new fundamental hypothesis about the product, business model, and engine of growth.
44
CHAPTER 3
RETHINKING ESTIMATES The (Alleged) Need for Estimates: Deadlines, Costs and Scope
C
armen was exhausted. She had been working 14 hours a day for the entire week in order to produce a document that made sense. She had highlighted all the risks she could think of, all technical dependencies, all sources of uncertainty and interpretation, and all key boundaries and constraints. Still, she couldn’t think of a good way to define a vision of success without actually asking the client about it. Of course, the client was not available to clarify.
Carmen’s boss started to gently press her to produce an estimate three days ago. Two days ago he had started to send her e-mails and copying all relevant stakeholders up the corporate ladder. The day before, he had started to phone her almost every hour to ask about the progress with the document, and drop last minute recommendations such as “oh, by the way, it is absolutely mandatory that you find a way to introduce our Business Analysis, Automated Testing and Architectural Support consulting services into the proposal”. This was not what Carmen needed a few hours before the proposal was to be ready. At that moment, looking at her nightmare-ish document that already counted 300 pages, Carmen felt as if her life was a Dilbert cartoon. “Maybe it is because I’m exhausted,” Carmen thought, “but right now I cannot think of a reason we are producing this monster of a document. There are too many loose ends - it will just never work the way it is described here. Worse: everyone knows that! Very probably, even the client knows that, at this point any fixed definition of what the future will look like is just W.A.G. – Wild A** Guess. So what’s the reason everyone is so excited about having it as soon as possible?” “Why don’t we just start working on it and find out what really needs to be done?” Carmen shook her head, took a sip of her coffee and thought, “wow, I’m just losing it… I need to go on and finish this as soon as possible. I need to focus on how we can win this contract and move on to the next problem as soon as possible.” It was 22:00 and she could hear the distant sound of young people partying the night away at the pubs nearby. Let’s review for a moment the situation Carmen is in: • She is responsible for a bid on a very important project for her firm. • She is being pressured by her boss and her company to deliver the project under a certain time/cost. • She knows that uncertainty regarding the project itself is high, and the stakeholders do not want to have that uncertainty affect the estimate.
45 • She does not yet have a team – after all, they are only in the bidding phase. Many projects suffer from these same dynamics. They suffer from unrealistic expectations. How do you estimate a project like that? Can you avoid that part of the project, can you drop estimates altogether? The answer is not simple. When a bidding process is required, you can’t avoid providing an estimate. And there are many ways in which you can try to be precise, honest and create an estimate that you believe in. But when you go through a bidding process, even if you can provide an estimate you truly believe in, the start of the project is when you know the least about the project in all its dimensions: content or scope, costs, technology and, most importantly, people and teams. We need a different approach. All parties involved in a bidding contest use estimates to “win”. Providers use estimation as a tool to win the bid. Clients use the bidding process to create a pressure on the estimations by the providers. Clients want to create that pressure to win the cheapest or fastest project they can. But estimates – no matter how good they are – cannot give you what you really need: visibility to progress;; and actionable information.
Now that we have a common base to discuss estimates, we can move to one of the fundamental questions around the use of estimates in software projects.
46
Why Do We Need Estimates? Common answers to this question include: • To know when the work will be completed and delivered. • To know how much the project will cost. • To know how many features we can fit in the project, given time, and other constraints. Of course, this does not mean that estimates will help you to actually know time, cost or scope of the project, but you can have a better idea and constrain the outcomes to a minimum or maximum time, cost and scope. It is important to know that estimates, on their own, have no actual value unless they can help us understand better when the deliverables are going to be ready or how much the whole project will cost. If there were any better way to know the answer to these questions, estimates would be a waste of effort and time. For example, if you could know when a box is going to be delivered by asking the courier company, it would be a waste of time to conduct an estimation meeting and try to estimate when the box will be delivered. But there are deeper, human reasons to estimate and ask for estimate. One is emotional - you just need to know them so you can sleep better and reduce your stress. This is very common when I travel. When I travel early in the morning, the night before I make a careful prediction (or estimate) of how long it will take me to reach the airport. I check the weather and road conditions on the way to the airport and come up with an estimate for that trip. Then I book a taxi for a time that would give me a 30 min or so buffer because the security line at the airport may be slow that day. Making this estimate helps me sleep better. In any case I always setup 2 different alarms to make sure I wake-up on time. Without this estimation I probably wouldn’t sleep very well. Another possible reason is that you might need to give some answer to your client so that he stops calling you every five minutes, or you need to tell something to senior management and other stakeholders so they trust your ability to manage the project. You can probably think of other scenarios of when the people involved in the project just need to hear an estimate – no matter the accuracy of the estimate – so that they can feel safer, or that the project is in control. These human reasons are understandable, but they don’t make your estimates critical to understanding the project progress. They are part of working with other people, who have different needs. Without really thinking what she was doing, Carmen speed-dialed her boss’ number. He picked up the phone after just two rings – bad sign, he was expecting the call. “Hi Carmen! Do you have news for me on the Big Fish bid? I have the client’s people all over me…” “Er… I am almost done, sir. I understand that our company’s future depends on this project. I understand that we must present our bid soon, but I’ve been trying to get a team together for the past few days and no one is available.” “Well Carmen, that’s why we put you in charge, we’re sure you’ll find the way.” “I was just wondering…” “Yes Carmen?” “You know… There’s no easy way to put this...”
47 “Come on, Carmen, you know I absolutely support you, you can tell me anything.” “It’s just that… I don’t really understand, sir. It doesn’t matter how much work I put into this document, it just makes no sense. There are too many loose ends, too much uncertainty. Above all, why do they need such a complete plan now?” There was silence on the line. “Sir?” “Er… Yes, Carmen, it’s only that I’m not sure what your question was about.” “It’s simple, why do they need an estimate?” “Well, Carmen, I assume you are asking that because it’s Friday and it’s late. This is a very easy question: they just need something to show to the business.” “Yes, but why?” “C’mon, Carmen, you’re kidding me… They need something that shows them that the project will be done on time, something that makes them trust us.” “I understand, sir, but… If this is a trust issue, not a planning and analysis issue, wouldn’t it be better solved through communication? I mean, we don’t actually know if the project, and I mean the whole project, is going to be ready on time. We can just give them an idea of what might get done and what’s the uncertainty range. It’s like…” “Look, Carmen,” her boss interrupted, “it seems to me like you feel insecure. I understand that you are under a lot of pressure. But you know that we need to deliver the bid or we will lose the project.” “Well, if it’s just a matter of showing something, then I could have just made up those numbers instead of overworking myself through the last week.” Carmen was starting to feel anxious and frustrated. After all her hard work, her boss seemed to be telling her that whatever she wrote on the document it didn’t matter. “Carmen… Calm down. You are under a lot of pressure, I understand.” Carmen’s boss said in a harsh voice, “but it’s not like we could just put together some random numbers. These need to be accurate estimates, and you will need to live up to them. We will commit to these numbers, and you will be responsible to deliver according to them.” “This is not fair, sir. If you are going to hang me with my own estimates, then I’d prefer to keep them conservative. I’d rather say that we are going to do just some of the 400 features in the backlog, and that it will take us a year to do so.” “Carmen, don’t over react, please. We need to commit to the whole project scope. And it has to be delivered before the defined deadline. Period. This is non-negotiable.” “But sir…” Carmen felt her voice trembling, “you already have your estimate. All the features, right before the deadline. It’s like we already know what the estimate should be even before completing the due diligence work…” “Carmen.” Her boss said and paused for a few seconds. “You know what you need to do, that’s why I chose you. I pay you to solve the hardest problems in our projects. I know you can pull this off. Now I better get some sleep, we have serious work to do through the weekend. I hope you will see things differently tomorrow.” The phone line was dead…
48 What Carmen’s boss is asking her to do is to use her magic touch and convert an impossible project into a viable one. She will do just that a bit later in the story without the use of estimates, but before explaining how she does it;; let’s review her situation. Winning a bid no matter the consequences is a very common anti-pattern in the vendor-buyer relationship for software projects. The bigger the project, the more often it happens – because there is a lot of money, status and reputation at stake. And because there is so much at stake, we invest significant time and money to try to reduce the uncertainty of our decisions. Not knowing what is going to happen in the future causes a lot of stress to the untrained mind. Any projected deadline, cost or feature catalog crafted using estimates is a guess, no matter how well researched, prepared and reviewed. These guesses help reduce uncertainty, but not eliminate it. Sometimes, a very inaccurate estimate acts as a sedative: it will provide you with bad information that will make you feel secure, but when you realize the estimates were wrong it might be too late and at that point stress levels go through the roof and everybody loses their cool. In some other cases, estimates are used as a weapon to assign blame. In these cases, the estimates will turn into a deadline and all involved will be blamed when the deadline is not met. How can estimates used in this manner add value to a company? Is this a valid reason to spend so much time and money on estimates? Is it the best way to manage projects and mitigate risks? Often organizations will start a project that just needs to be done, no matter what, and then will spend some time estimating size, costs and deadlines because they need to know when it is going to be done, or how much will it cost, or what features will be delivered. In those cases, when you ask them what decisions will they take depending on the projected cost or delivery date of this project, what usually happens is that they stare at you as if you were speaking Klingon. “Because we can’t continue selling our product if we don’t do this project!” – I can hear them say. In these cases, what is the value behind these estimation efforts? If you just need it, start doing it and deliver something as soon as possible. You can report throughput and forecast future results later based on the first deliveries, and this information will be much more valuable and accurate than any estimation done at the start of the project. In other cases the reason why you might need to know scope, cost or time is rational: you will decide to start or to contract a particular vendor depending on the estimates. If we can have it before this date, or if it costs less than this budget, or if it has at least these features... This is also the case for clients who need to know what vendor to contract depending on the information they provide on expected cost, deadline and features included. Of course, you should notice that these decisions are being made based on estimates (guesses), and that an estimate is not necessarily equal to a commitment. As an example, a client recently needed to decide whether to invest time and money introducing better engineering techniques into their team or just maintain the low quality levels but have more chances to meet a projected deadline. As usual, they asked for an estimate: “How long will it take to introduce these techniques? What will be the impact to the team’s velocity at the beginning? When will the velocity stabilize and increase? And how long will it take to recover this initial investment?” There is no bulletproof way to know the answer to these questions in advance because the answers depend on many factors. Instead of a guess, you need to make a trade-off decision between short-term goals and long-term improvement you seek. If you choose short-term goals, you should then make the necessary decisions to deal with the long-term negative impact of
49 that decision. However, if you decide to support the long-term goals, you have to make the necessary adjustments to your short-term goals. No amount of time invested in estimates will help you make the inevitable adjustments, because predicting the exact impacts of either decision is impossible. Maybe your best engineer will quit because he hates Test-Driven Development, or your best tester will quickly recruit even better testers once she understands that you really mean quality when you say quality – thanks to your decision to focus on quality. In that particular case the teams were asked to invest at least 15% of their time on engineering improvement while keeping the deadline fixed. This meant that if we thought that the deadline wouldn’t be met, we would start cutting down on learning and training time. What happened didn’t surprise me: velocity didn’t change a bit once we started using 15% of the time to improve the engineering practices, while during the next six months quality increased dramatically! This was true win-win situation, which could not have been predicted by estimating. Magic? Not really. But it does take a great deal of experience to understand that not all activities have a linear impact on schedule or costs. This is what Agile Software Development is all about, exploring the non-linear relationships between time invested and benefits gained, just like #NoEstimates.25 Some argue that the process of estimating a project, will help the team get a better understanding of the requirements, the architecture or technologies needed to succeed in that project. The assumption is that estimating a process will result in a better analysis of the project details. This is not always the case. Having a conversation about the scope of a project or even the technological alternatives is very different from the process of estimating cost and time to implement. Estimating and analyzing are two different things, and although you might need analysis to estimate, the contrary is not true. Estimation and analysis are potentially linked techniques, but they are not dependent on each other. You can estimate a project without analyzing it (like I propose in this book), and you can also analyze a project without estimating its size or cost. The conflation of estimation with analysis leads to sub-par analysis, and that in turn, leads to bad estimation.
Project Driven Development The reasons discussed above as justification for estimation are part of what Ángel Medinilla calls Project Driven Development, a term he coined to clearly distinguish this approach of developing software from other approaches. In this approach, the most important project goals are not customer value, quality, product success, time to market, adaptation, learning, market share or even profit. The important goal is to meet the established deadline, within the defined budget, with all scope included. Simple.
25 An interesting rabbit hole for the statistic mind if the concept of Confounding variables (https://en.wikipedia.org/wiki/Confounding). This is a concept that begins to unravel why estimation is such a hard problem. Thank you Pier Lorenzo Parachinni for the hint to include this reference.
50
People that evaluate their performance through those very same metrics – not surprisingly – introduce project Driven Development to their organization. Other metrics, such as quality;; product-market fit;; or speed of delivery end up being ignored in favor of being on time and budget. In these projects developers and customer support teams will feel the pain of bad quality. The lack of product success will be blamed on the customer “not knowing what they wanted” or the marketing team. The negative effects of Project Driven Development will affect multiple people and teams in different departments;; hence the blame will be distributed while the project life-cycle process – the real root cause for product failure – remains unchanged. The Project Driven Development paradigm is characterized as delivering any scope on time, under budget and within the defined scope. Even if this approach might maximize your chances of receiving a short-term bonus, in the long-term it is does not help your company or your client’s company to be more competitive, nor is it maximizing value from the perspective of the customer. However, some will find a lot of value on Project Driven Development. But are they maximizing value for their customers with this approach? A commonality between organizations that follow this approach to software development is that they often have little or no urge to compete or survive, sometimes because they are a de-facto monopoly in some industry. Other times because the real goal of the organization is not survival or success, but rather to maintain their status quo. Yet another case is when the organization is very successful despite their software practices, and have no motivation to change because of that success. In these cases, Agile or Lean makes little if any sense, as there is no perceived need to maximize customer value, reduce waste or adapt to change. For example, let’s say you approach a traditional consultancy business and tell them “hey, I can show you how to turn that 8 year - 500 people - 250 million euro project for your customer into a
51 1 year - 10 people - 0.9 million euro Agile project.” The typical reaction will include an incredulous stare, followed by: “Why on earth would I want to do that?” Another example of Project Driven Development: maximizing project size, cost and perceived outcomes instead of searching for better ways to deliver customer value faster.
Set-Based Design vs. Point-Based Design One of the many things that distinguished the most productive car company in the world, Toyota and its Toyota Production System26 from its American counterparts was the use of Set Based Design, sometimes also called Set Based Concurrent Engineering. In this approach, the Japanese designers of new products would go to great lengths to make design commitments as late as possible in the project (a goal of set-based design). In contrast, the Americans were committing to sub-optimal decisions very early in the project, and then having to re-work those designs due to unforeseen performance or quality problems (point-based design). At Toyota, the production engineers would simultaneously start to design the production line and prepare manufacturing long before the new car designs were finished (hence, concurrent engineering), instead of waiting until all decisions about the design were closed. This, in the end, provided Japanese manufacturers with an astonishing competitive advantage that let them design and produce the Toyota Prius in about 3 years27, from idea to first sale! When the industry average for the time it took to introduce an improvement in an already existing car model was closer to four years. I sometimes wonder if this principle of “defer commitment” was not influenced by Japanese martial arts. When training Kenjutsu, Ángel Medinilla’s Sensei often says “you have to wait until the last responsible moment;; if you move too early, your enemy will spot your movement and neutralize it;; but if you wait too much, your opponent will strike you.” Making hard decisions early in the design process – when we have the least information – may force us to take the wrong path very early in the project. Later on some of those decisions will be very hard to reverse as decisions stack on top of each other as the project progresses. When you keep the scope flexible and do not limit features by a pre-defined estimation, you will be open to explore new possibilities as you gain more knowledge on the project. This will enable you to explore different solutions for the critical decisions, which is one way to use Set Based Design If your company is asking for detailed plans before any work actually begins, there's a good chance that you are practicing a linear method, aka waterfall. Product development experts nowadays advise against this approach in complex environments28. If you don't have a clear and detailed blueprint of what you need to build (like in cars, motorcycles, bridges or buildings) it would be far more productive and safe to start with a low-fidelity prototype and iterate it 26 More on the Toyota Production System at: https://en.wikipedia.org/wiki/Toyota_Production_System, and the very enjoyable book by Liker: The Toyota Way: 14 Management Principles from the World's Greatest Manufacturer 27 Wikipedia: http://en.wikipedia.org/wiki/Toyota_Prius_%28XW10%29 28 For a comprehensive discussion of linear vs incremental planning see Larman’s Agile and Iterative Development: A Manager's Guide. For a discussion of complexity, see Snowden’s explanatory video at: https://www.youtube.com/watch?v=N7oz366X0-8
52 frequently in an evolutionary manner, obtaining direct feedback from your customer as you go and reducing uncertainty progressively. When the Toyota Prius team started their project, the whole definition they had from Toyota's Chairman, Takeshi Uchiyamada, was to make a green car and "question everything you know about cars". This project gave Toyota a high-single digit or low double-digit year advantage when compared to other automakers (exception: Honda)29. In the Prius example we see that the project starts with a bold goal, and a clear direction. No estimates. When the Honda City engineering team, which averaged 27 years old30, started their work, the project definition they got from management was "we want you to build the kind of car that the youth segment would like to drive." How does this compare to estimated, fixed, inflexible project plans?
Variability The estimation process is an attempt to reduce uncertainty and variability in projects. In an environment with no uncertainty and no variability, estimates would have no meaning - you would always be certain about cost, time and scope. Once uncertainty and variability kick in, it is difficult to know the exact cost, time and scope up front. If your estimates are proven wrong this will impact heavily the results of your initial decision. Hence why you need to constantly check how the project is performing according to the initial estimates and re-plan and re-estimate again.
29 Wikipedia: http://en.wikipedia.org/wiki/Hybrid_electric_vehicle 30 HBR, The New New Product Development Game by Takeuchi and Nonaka: https://hbr.org/1986/01/the-new-new-product-development-game
53
Re-planning usually results in your client and stakeholder saying “but you committed to this deadline! You cannot change the plan now! Do whatever it takes to maintain the delivery date – but, of course, with no changes to budget or scope.” A lot of effort is invested into estimation, but not so much to reduce sources of uncertainty. On the contrary, companies that apply Lean Thinking (Lean companies) have been developing ways to reduce variability since the start of the Lean adoption. Lean companies use an approach they call heijunka31 to reduce variability in the work where possible. This leveling out of the work load (for example, by having small User Stories) will help you reduce variability in task duration as well as help you identify the unexpected variability early on. When the rhythm of work is steady enough, the estimation process loses importance and forecasts are more useful and more accurate. Below is a list of 8 possible sources of variability for software teams. Technology: if a team which developed a Cold Fusion application for fifteen years is asked to create a .NET application, all the previous data on velocity, feature size, cost and time will be basically useless for the purpose of forecasting their throughput in this new project. On the other hand, using technologies that are immature or buggy will dramatically increase accidental 31 A Japanese word that means “leveling.” When implemented correctly, heijunka elegantly – and without haste – helps organizations meet demand while reducing wastes in production and interpersonal processes. Wikipedia: http://en.wikipedia.org/wiki/Production_leveling
54 complication: the work necessary to work around that unstable technology. Lean companies try to use only proven, reliable technologies, no matter how fancy, trendy or innovative a platform might look. The use of established and well-maintained frameworks is a good example of this principle on more technology or software related environments. Domain or product: even when you don’t change the technology, there can be a lot of variation if the team is forced to develop a new product or have to work on a different knowledge domain. For example, if the team have been developing a micro-payment solution and now they are asked to develop a warehouse management software they will probably need to learn many new things, and their pace of work will vary highly until they reach a level of proficiency with the new product domain that allows them to focus more on delivery and less on learning a new domain. Team composition: some often-overlooked sources of variability are changes in team composition and team dynamics. Many people assume that, if you reduce team size by 10%, the throughput should drop 10%, and if you double team size you should be able to cut development time by half. This is not the case. If you have a team of 10 people and you fire the only business analyst in the team, the effective productivity rate will drop way more than 10%. On the other hand adding more people to a project that is late is likely to delay the project even more because of the increased complexity and the need for the team to adapt to its new composition. In other cases, removing someone from the team will actually increase throughput, while adding someone will dramatically backfire. Human teams are not bound by arithmetic - you cannot add, subtract, multiply or divide people! User, Client and client representative: as we will see later, one of the most effective enablers of a #NoEstimates approach, is a savvy client representative. No matter if it is a Scrum Product Owner, or someone from your client’s organization or even a team of people performing this role as a Product Management team: if you have someone that is able to divide your work in chunks of small enough work-items and prioritize them according to business value, it will make your life easier in so many ways that I wrote a book about it - this book, of course. On the other hand, a ‘bad’ Product Owner or client representative can have a very negative impact in organization by not helping them focus on the most valuable deliverables, or worse: trying to get so much work started that the whole organization grinds to a halt. Given the potential impact of a Product Owner in the organizational performance, it amazes me that the main focus of many organizations seem to be on training only team members or Scrum Masters. While they ignore the education and improvements necessary in management and product ownership. Workload and / or focus factor: having teams constantly changing their focus between different projects or having to attend to bug fixes every day, small requests, or side projects can dramatically increase variability in the pace of work. Not to mention the effect on teams’ morale, product quality and organizational performance. In my experience, teams constantly shifting from project to project have a significant performance decrease when compared to teams that are allowed to focus on one project at a time. On the other hand, at the end of the day, both teams will report ‘8 worked hours’, and many companies will consider that both teams ‘produced’ the same. Market and competitors: introducing your products to new markets can bring variability in the form of new requests, adaptation needs, regulations compliance and other requests for changes. Similarly, when new competitors or new products enter our market, our plans will change, which will inject unexpected variability in the project. Dependencies / specialization: in environments where the norm is high specialization and dependencies between production units, departments and even team members, variability is higher because of bottlenecks that constantly emerge when and where we least expect. Hence
55 why methods such as Scrum advocate the cross-functional team as the unit of productive work in software development organizations. Cross-functional teams reduce variability by reducing dependencies. But there are also other causes of variability, for example, some companies assume that every Story requires X% analysis, Y% development, Z% unit testing, with X,Y and Z all being fixed. But for some items, it could be that doing a lot more analysis could even lead to 0 development: the feature could be configured Instead of developed. Therefore the composition of the team will cause variation in the estimation of the work being analyzed and therefore cause variation in the overall project.32 Waiting for availability: Waiting happens when a work-item is ready to be worked on (the requirements are ready, or the design is ready, or the code is written), but it must wait for the people with the right skills to be available. The time work-items spend waiting to be picked up can amount to more than 90% of the calendar time it takes to deliver the work item. These wait times are also very hard to estimate because they depend on many factors. When you ask teams to estimate their work, don’t forget that they will only estimate the time they actually work on the item, not how long the item will spend waiting. These wait times can have a very large impact on the overall schedule for a project. With all these sources of variability in performance, it is amazing that people ask for accurate, precise, fixed estimates and commitment at the beginning of a project. This is the time in the lifecycle of the project when we know less about what is going to happen. And don’t forget: the people making commitments to deliver on a particular deadline, scope and budget usually have neither control over these sources of variability, nor authority to re-negotiate deadlines, budget or scope when variability kicks in! • The higher the variability, the harder it will be to predict the throughput of completed work;; therefore, any investment on reducing variability will impact the product development team’s reliability and predictability. Here are some techniques you can use to reduce sources of variability in throughput for your organization: • Stabilize your teams and avoid constantly changing people from one team or project to another. • Define clear priorities, reduce dependencies and allow people to work on one thing at a time, finishing it before starting a new work item. • Build quality into the whole production process, do not try to inspect quality in33 at the end of the line;; ensure that no defects are passed down to the next step in the line. • Enforce cross-functional work groups and generalizing-specialist34 teams, which can solve problems in parts of the product for which the specialists are absent, yet focus on specific areas where they have long-term experience (aka T-Shaped professionals). 32 A special thank you to Maikel Vandorpe for the explanation regarding dependency on the team composition. 33 Inspecting quality in: using reviews, or quality checks to help increase quality, instead of designing a work method that prevents mistakes from happening. The latter is often referred to as error-proofing. 34 A generalizing specialist is a specialist that can help the team progress by working in other areas where they are not the expert, but have enough knowledge to be able to help deliver certain work items. This is important because it reduces wait times, a major cause of variability in software development processes.
56 • Standardize and automate where possible. This will allow your teams to focus on actually getting the maximum amount of work done that is possible. • Protect the team from outside interruptions that disturb their focus and typically cause uncontrolled multi-tasking. • Freeze scope inside iterations and allow the team to work on delivering the most important work, without context switching that costs them time and takes focus away from the most important work. In the software industry, teams and organizations are forced to adopt new technologies, to change their domains of knowledge, or simply work in new projects. It is precisely in these cases that the #NoEstimates approach delivers the best results. It is much more appropriate to look at actual throughput (work delivered to the quality expected), than trying to estimate work done in a previously unknown domain, with a new technology, a new team, for a new project or client, etc. For example, assume you are a competitor to Facebook or Google. Can you estimate how much Facebook or Google are going to innovate during the next 12 months? Not likely. It is a much better strategy to improve your capacity to respond to whatever will come your way, no matter what your competitors will come up with, or come up with strategies that force your competitors to respond and adapt to you instead. When you are ready to respond quickly, no matter what your competitors come up with, you will be able to respond and adapt.
Estimation vs. Prioritization Scrum teams all over the world are asked to estimate the Product Backlog. The Product Backlog should be a description of the product, feature by feature in priority order. Once you know what is the most important functionality to help your customers and grow your business, you then break that functionality down – in priority order. And this is a very important approach when you want to focus on business value: prioritization comes before estimation. It is common that managers and business people say “I need to know the estimate, the cost of every feature, so I can properly prioritize.” The immediate consequence of this statement is that estimates become the real “value” for a feature. No one wants to commit a team or a project to a long feature because we have “lower hanging fruit”. This dynamic will slowly, but surely, destroy the value of your product and lead you to create a mediocre product. No matter what you try to do, the estimates for features will drag you down to mediocrity. And the reason is simple and easy to understand: because it is so easy to do first what is considered “cheaper”. My advice is simple: focus on value first, and then figure out how to deliver that value as quickly as possible. Don’t estimate your way into excuses. Deliver it, bit by bit, incrementally.
57
Delivering value in minimum sized increments (also known as: Minimum Viable Product or MVP) is not just a trendy software development approach. It is a risk mitigation strategy that uses the Agile principle of delivering working software early and often for your business benefit: lower risk and more value. Estimating the whole Product Backlog up front does not reduce your main risk: business risk, also known as the risk of delivering the wrong things. But having the right prioritization will. What this means is that you should invest your time in spotting the most valuable features in the Product Backlog that could constitute a first, rough, small version of the product (hint: ‘all of them’ is not the correct answer). Then make relentless progress in delivering the minimum subset of those features that will deliver the necessary value to your customers.
Walking at Random The traditional approach to estimating a project consists of breaking the project into work packages, creating a list of tasks, studying dependencies, estimating every task, adding them all together to see when the project could be completed. When asked for a more accurate estimate, teams will estimate to an even finer level of granularity, perhaps estimating tasks that could be implemented in 2 or 4 hours. Then they add them all in order to have a more accurate estimate. But that is not the only way of doing things, nor the most advisable in many situations.
58 Let’s say that you want to predict how the stock market is going to perform in the next ten years. You could go study each stock and try to figure out how it is going to perform, then add all performances together and obtain a 'grand total'. But no market analyst will advise that approach. Instead, what they would do is study how the stock market performed during the last 100 years, then see if we can use that in order to forecast performance over the next several years. What would this idea look like when applied to a software project? Let's say we conduct an analysis of the last 200 features and we end up with this kind of graph:
Let's say that you find that the average feature duration was 3 days, and there's a standard deviation of about 1.5 days. Now let's say that there's a new project coming in and it has 100 features. You probably don't know the size of feature 1 or feature 37, since you have not done any kind of estimation, just a functional definition. But would it be unreasonable to expect that these hundred features will require sometime between 300 and 450 days? Compare that to an estimate of 100 or 1000 days for the same features. There are some situations where this forecasting can't be made, and those are the ones where there is higher variability expected in the next project because of a change in technology, team, customer representative… But in those cases, would a feature-by-feature estimate be more accurate, even feasible? Let’s do a thought experiment – a Gedanken or Gedankenexperiment. Ángel Medinilla, this book’s fantastic illustrator, calls this the ‘Perfect Product Owner’ Gedanken.
59 Imagine a perfect Product Owner. This Product Owner has the mutant superpower of being able to divide any project into stories of only 3 relatively small sizes. For every story size, there’s a statistical outcome in terms of how long does a team need in order to finish it – like, for example, small stories are finished in one to three days, medium stories are finished in three to six days, big stories are finished in six to twelve days. We don’t know up-front if a story is small, medium or big – we only find out when it is finished and we realize how long it took us. If this super Product Owner existed in reality he would produce stories so that: • There would be nothing bigger than ‘Big’. • Sizes would be coming randomly – e.g. not all the small stories are at the beginning of the project and all the big ones are at the end. • Even not knowing if the next story would be small, medium or big, the statistical distribution of the sizes would be constant and known over time.
You don’t know what’s coming next, but you can predict the overall behavior over time. If you were to create a histogram, characterize the statistical distribution in the form of a median and a standard deviation and, if a project is divided in 100 stories and the median is 3.5 days, with a standard deviation of 1.5 days, would it be crazy to say ‘it absolutely looks like a 350 days project, worst case 500’? The only “trick” we required in the Gedanken was a savvy Product Owner that is able to consistently divide projects into stories that are small enough. Even if you can’t perfectly
60 determine what’s going to happen in the future;; this ability to slice the work into “small enough” work-items or stories will give you a very high degree of throughput predictability.
So… Rethinking Estimates What are you really trying to achieve with the use of estimates? What's the intrinsic value of estimates? Can you really use estimates to accurately predict what is going to happen, when is the project going to be ready? How long each work-item is going to take? How much will the project cost? And how many people and what resources will be needed? In this chapter you read about the concerns regarding the accuracy or value of estimates. Even if you estimate your project with great investment of time, those estimates will not help you manage the surprises that inevitably come up during a project, and in fact can make your work much harder if certain hard-dependencies cannot be resolved because of an error in estimation. Invariably plans fail, or need to change, and estimates must change with them. A better way to manage your projects is to acknowledge uncertainty, embrace change and fix the hardest constraints (time and people plus resources) while letting uncertainty be managed through a variable scope. Focus on delivering the most important part of your product early in the project and delay the less important and 'nice to have features'. This approach allows you to work on features identified after the project has started, when you find that these features are more valuable. This approach also allows you to drop features that might be considered less valuable, dedicate more time to the most valuable features and reduce scope of others. This approach has also been in use by many in the Agile community, and some call it "value driven" software development, as opposed to "scope driven" software development.
The Predictability Paradox “The best way to achieve predictable software development outcomes is to start early, learn constantly, commit late, and deliver fast. This may seem to cut against the grain of conventional project management practice, which is supposed to give more managed, predictable results. But predictability is a funny thing;; you cannot build with confidence on a shifting foundation. The problem with conventional approaches is that they assume the foundation is firm;; they have little tolerance for change.” Mary Poppendieck - The Predictability Paradox Predictability is the impossible quest of management. Predictability is important because we can base good decisions on what we know to be predictable. Predictability is what we seek, but how can we achieve it? And what does predictability really mean for a software project, especially one in crisis like Carmen’s?
61
CHAPTER 4
HOW NOESTIMATES CAN HELP YOU MANAGE A PROJECT IN CRISIS
“T
he project will be done in three months, give or take a week or two.”
I remember saying these very same words in a top management meeting. The number – three months – was not arbitrary. It was the result of in depth analysis, task breakdown (yes, even I did waterfall in my day), and a lot of internal meetings to get people assigned to the project “at the right time”.
The managers in that meeting were happy. Very happy. This was also the number they wanted to hear. They were so happy they did not hear how I completed that phrase: “But only if everything goes according to plan. We have no buffer with this schedule.”
62 This is not a unique situation. All of us that have managed projects have been in a similar situation. We’ve all been influenced by overt and covert expectations from our superiors. In some cases, we’ve also been in Carmen’s shoes, managing a project on which the company’s future depended on. A lot of sleepless nights follow. How can we answer this question? How to know when the project will be done without estimating all the work? That is the key question. (“When will the project be done?” can be replaced with “how much will it cost?” the process we go through is the same). Past approaches to estimation have not worked well, in chapter 1 I shared the data. At one of the companies where I worked, projects were, on average, 62% late. An average 100 day project would last 162 days! And even worse, several projects took longer (or much longer) than 162 days!35 Would you bet your company’s future on that kind of track record? I wouldn’t. And neither will Carmen. We need a better way to predict the end date (or final cost) for our projects that is not dependent on moody managers coming down and putting pressure on project managers to “improve” the estimates. Two months later… “Carmen, we have a review of the project with the Client next week. How are things going, what kind of progress can we show them?” Asked her boss. “Good Morning sir. Yes, we do have the requirements delivery and the Earned Value Management reports that I showed you just yesterday.” “That is great Carmen, but I was asking if we can show them working software. You know, to make a good impression.” Carmen felt the ground disappearing from under her feet. The requirements for this project had been written in a way that the software could only be demonstrated after most of those requirements were implemented. They were only two months into a 12 month development phase, there was nothing to show! The testers hadn’t even been hired yet. What could she do now? “Sir,” she started, “you knew from the start that this was going to be a project with a long development cycle. It is quite impossible to show any working software until we have requirements implemented in all architectural layers. We only just started to develop the first layers like database, services, etc. We have nothing to show…” “I’m sure you can think of something for next week, you always do!”
Thank you to Troy Maggennis for helping me correct the conclusion in this paragraph.
35
63
How can Carmen show the real progress of the project? When requirements are written in a layered fashion, progress can only be assessed at a component level.
64 More importantly, overall progress at the project level can only be assessed when all layers of the software have implemented a larger part of the overall functionality. How can Carmen show progress? She could count the number of requirements implemented;; the costs incurred, and compare that to the baseline that she created when estimating the project (how many, and which requirements should have been implemented by now? And how much money should we have spent by now?) But the truth is that these are very misleading measures of progress. Let’s look at an example. Here’s the graph from a project that followed the same implementation strategy that Carmen is following. Take a look at the number of open bugs found. If you were the project manager for this project, when do you think the project would be ready for release?
Figure 6 - Data from a project using Rational Unified Process (RUP), a linear process model. This represents the project bug, or defect-curves (cumulative open, Submitted, and Closed) at the end of development phase, and beginning of validation phase (phases are used in RUP).
That’s right, no one can say when that project will be done. In fact, we can see from the graph that all requirements were implemented long ago (the development phase already ended), but the number of open issues just keeps growing and no one in their right mind would release that software. If we batch (accumulate and delay) the fixing of bugs to the end of the project – which
65 we have to do if we take the layered approach – we will not know the real progress until we start fixing those bugs, and very likely later than that. A simpler way to see this is: if you have a 800 man/hour project, and someone says that you have actually invested 400 man/hours, can you say with confidence that you are 50% done?
Is there an alternative that Carmen can use? Yes! You have the #NoEstimates alternative that creates true visibility to progress in a software project.
Visible Progress The main goal of my approach to #NoEstimates is to help evaluate progress in a concrete – and easy to implement – way. There are many ways to specify a project. For example, we can start by doing a business analysis and create a requirements document. The requirements document can be useful in generating consensus on what the project should deliver, and what are the concrete problems you will tackle with the project. However, requirements – in their classical form – are not practical when trying to assess progress (aka progress follow-up). Remember the vertical vs. horizontal division of work graph above? If you have started (but not completed) 50% of the requirements in your project how far away are you from completion? Many people in the world today still think that work that is started (but not completed) is progress in a software project. That is wrong. Code (implemented requirements) is only a liability. It turns into an asset only when a user can create value with it! “Working software is the primary measure of progress” - From the Agile Manifesto
66 Following this principle from the Agile Manifesto requires us to write requirements in a way that allows you to do two very important things: 1. Requirements need to be written in a way that allows you to measure progress early and often during the project. 2. Requirements need to be written in a way that provides you with the necessary flexibility to make decisions on what part of each requirement will be implemented later, when you better understand the system, and the business needs. Let’s look at what happened in the example we started studying above:
Figure 7 - Data from a project using Rational Unified Process, a linear process model. This represents the project bug-curve at the time of release.
In the chart above you can see that development stopped about 1/3 of the way through the project. If you had asked the developers they would have said that at that point the project was almost done. After all, they already had implemented all the requirements they were asked to implement. In reality they were not even close to 50% completion. Here’s why: when you implement all of the requirements you have only completed a small portion of the work that needs to be completed for the functionality (or capabilities) of the system to be useful to the end user. When a developer says “I’m done” what they mean is: “I’ve coded in what I think is the meaning of the requirement you gave me.” After this work is done, you need to verify two things: 1. First, you need to verify that the developer has the same understanding as someone else – typically a tester – who looks at the software from the customer point of view.
67 2.
Second, we need to ask the end customer if what is implemented really solves the problem that it was intended to solve. Even in the best-managed projects the first of these verifications is often done too late, but rarely anyone cares about the second type of verification until it is truly too late to recover without major impact on project schedule, project cost or both. The consequences of the failure to execute these two verification steps are: • You don’t have actionable information that allows you to effectively measure progress. Remember this: you are not done, when you think you are done, but only when the customer says you are done. • When you finally find out that the project is late, you don’t know what can be dropped from the scope of the project (you may even have all requirements implemented like the example above). And even if you know what needs to be removed, you can’t remove it because all requirements are implemented and they depend on each other. The required functionality is implemented;; it just does not solve the problems they were supposed to solve.
With my #NoEstimates approach, I try to avoid these problems by using the following progress criteria which is based on work by many people in the Agile software development community: • Always implementing independent Stories (more on that below). Stories are requirements
68 (written in a specific format) that explain what is the problem the user of the software needs to solve. • Following progress every day, not by milestone completion. In Figure 6 we see a project that is “feature complete” – one of the key milestones in most software projects still today – but has nothing that can be delivered. Here’s the key take away: progress in software is measured by running (it can be demonstrated live), tested (high quality and user-accepted) software, i.e. Running-Tested-Stories. RTS, Running-Tested-Stories is the only metric that reliably describes the progress in a software project36. You can implement progress follow-up by delivering completely each piece of functionality (I call them Stories) in a way that fulfills the two criteria listed above. Here’s what the original chart above would have looked like if the project had been measured by the number of Running- Tested-Stories delivered every day:
Figure 8 – RTS (Running-Tested-Stories) burn down for the project in Figure 2
36 Others in the agile community have used a similar metric. I have found the first reference to Running Tested Features (similar to RTS) from Ron Jeffries’ blog in 2004: http://ronjeffries.com/xprog/articles/jatrtsmetric/ And the first reference to Running Tested Stories from a presentation by Simon Baker in May 2006: (PDF) http://computertrainingcenters.com/wp-content/uploads/2012/09/IntroductionToScrum.pdf
69 Even if the Stories take longer to implement than one day, they should follow some #NoEstimates slicing principles: • There should be no ‘huge’ Stories (e.g. in Scrum: bigger than half a sprint counts as ‘too big’ and should be split.) • Several independent Stories should fit into a Sprint or a period of 2 weeks if not using 2-week Sprints or Scrum. Six to twelve Stories delivered in a 2-week period is a good rule of thumb. • The statistical distribution of small-medium-big Stories should remain constant through an extended period of time - i.e., not having all the big items at the beginning of the project (like one story about “setting up infrastructure”) and then all the small ones at the end. However, even if we follow progress the right way, we still need to prepare for surprises. Of course certain things will take more than we expected (remember Hofstadter’s Law?). So, following progress with #NoEstimates is not enough. We also need to have actionable information.
Actionable Information Actionable information is information that allows you to make decisions that positively affect the success of the project. It is information that is typically expressed in a way that offers a conclusion. For example: Because we only have 3 Stories implemented (Running-Tested- Stories or RTS’s), but we should have 6 Stories implemented at this point, we must reduce the scope of this release if we want to deliver on time. RTS (Running Tested Stories) is the metric in #NoEstimates that allows you to act on the progress and manage the project to meet a particular release date. It is the equivalent to ‘Working Software’ in the Agile Manifesto, and hence it is the main measure of progress, the only one that really counts.
70
In the case above we see a typical project delivery rate (in a burn-down chart). By looking at the chart above one can easily see that the project presents some risks of missing the deadline, but is not in a critical situation. If your project follows a similar burn down trend, you know that you need to reduce the scope. Reducing scope can only be done if the work left in the backlog is independent from each other and from the functionality already delivered. The opposite of independent Stories in software is the concept of layered requirements. Layered requirements are requirements that build on each other (different layers of the architecture, for example) in order to deliver the necessary functionality.
What are Independent Stories? In the Agile World, User Stories were widely adopted very early on. But few understand the immense power of that tool. Stories should have a set of properties commonly called as INVEST37: • I: independent Stories are Stories that can be implemented separately without depending on other Stories. You create independent Stories by slicing the project into vertical requirements (Stories) that can be verified individually. • N: negotiable Stories are Stories that define a very clear capability for the system, but do not 37 The INVEST mnemonic is credited to Bill Wake and his article INVEST in Good Stories, and SMART Tasks
71 dictate an implementation strategy, or very specific functional requirements. This property allows the development team to select an implementation strategy that best suits the project when the time comes to implement that Story, and allows the customer to be engaged in defining the detailed functionality later on based on the running demo of the software. • V: valuable Stories are Stories that have a concrete value to the customer or user of the product being created. The opposite would be a story that helps the developer but not the customer. • E: Essential, meaning that every story is absolutely required for the product to be viable. To be Essential, a story must not only be valuable, but it’s removal must make the product unusable or unsellable. Earlier INVEST definitions included ‘Estimatable’ in the sense that there would be some understanding and specific definition of the story that allowed us to cast an estimate if we wanted to. #NoEstimates focuses on value instead. The goal is to do only what is essential to the project’s success. • S: small Stories are Stories that are well understood by the team and can be implemented in a short time frame. With the #NoEstimates approach I advocate that Stories should be between 0,5 and 1 man-days of effort. Establish that as your target, and slowly move towards that size. Your visibility to progress and quality will slowly increase as the size of the Stories decreases. To determine if a story is small enough I ask: “Tom, can you get this story done by tomorrow?” There’s a world of difference in this question, when compared to “Tom, when could you have this story done?” The first question is intuitive (some call in Flashtimate), and not a result of a detailed analysis of each of the component tasks for that Story. Another difference is that we don’t ask this from all Stories in the backlog, but only the Stories that we will start working on immediately. • T: testable Stories are verifiable. They include, for example, a set of criteria that define when the story is done. These criteria are called Acceptance Criteria and expressed from the point of view of the end-user or customer. INVEST Stories give the project team information and the tools necessary to actively manage the scope of the project because: • Each Story can be dropped from the project without affecting the overall project delivery. • Each Story is small enough and all Stories are typically pretty homogeneous in size, which means that you can focus on their value, instead of their cost when making a decision. Value is an important input for decisions (actions), and can be easily assessed by discussing the use/benefit of a particular Story directly with the customers/users. • By making Stories small you also get faster feedback on the progress of the project. The long term rate of delivered RTS’s should converge to 1 RTS per team member per day. When the number of delivered RTS’s is zero for one team more than 1 or 2 days you know you have to act. How does this help Carmen? Let’s take a look. “I need to find a way to measure the real progress of this project. All these requirements that are in progress really give me no information about what is actually ready to go, or what is just started. Where could I find ideas on how to measure progress?” It is dark outside, all her colleagues have left for the day, but Carmen is stuck. She’s been scratching her head to come up with a verifiable progress metrics for her project. There are only a few days left to the progress report meeting with the customer. A lot is at stake.
72 “Hi Carmen! What are you doing here so late?” It was Herman. “But why is Herman here at this time?” Carmen asked herself. “Err… Herman, why are you here? Did you come back to do some work?” “No way! I value my private time!” He smiled, “I came back to pick up that #NoEstimates book that Jerome asked about last week. I have another friend who wants to read the book and we were just downstairs having a few beers, so I decided to pick up the book immediately. When somebody asks, I want to give them the book right away, so they don’t have time to lose interest!” He winked. “Wait, #NoEstimates? What is that all about?” Carmen asked. “You don’t know? Oh my god! You are working on Big Fish, you absolutely must read the book. Do you have a kindle?” “Yes…” “Right, go to Amazon and buy the book immediately. Check chapter 4 today, before you go home. It is an easy read – the author created a very good story that helps follow the concepts in a fast-paced manner. Read chapter 4 and let’s talk more tomorrow. Have to run now.” Herman left to meet his friend. Carmen was interested and checked the book, bought it and started reading Chapter 4. “Running Tested Stories…” She repeated while reading the book, “can I apply this to my project? It seems like a good way to follow progress, and I can see the similarities to the Earned Value Management ideas I’ve used in the past. But where should I start?” Many projects have only a list of requirements as the definition of scope. If you want to use RTS’s as a way to measure progress you must define the capabilities of the system in the form of INVEST Stories. Remember that each Story must follow the INVEST properties! Once you have a list of RTS’s for your project, you can then plot the progress of the project by completing each INVEST Stories in order of priority. How did Carmen do it? Let’s watch. “I have to count the RTS’s we’ve delivered so far… How can I do it? I know! I’ll list the requirements that are expressed as functionality into a list of INVEST Stories. Then I’ll group each of the other requirements under the relevant Story. If some are left, I can create more Stories for each of them. Let’s get to work.” Many, many hours later… “Great! I have my first list of INVEST Stories! “The project feels so much clear now.” Carmen felt she had just climbed Mount Everest on a clear day. And what she saw was an amazing landscape. She could see her project clearly for the very first time! “Now to plot the progress,” she thought. Carmen started to analyze each Story to classify them into “done” and “not done”. After some more hours of detailed analysis and searches through her inbox she came up with this:
73
“Flat line…” She could not believe her eyes. “So much work has been done in this project, so much has been invested and no RTS progress… We’ve written many, many pages of requirements documents, test specifications, design document. We’ve spent countless hours in meetings making decisions that will affect the project. But the RTS count tells us that we have no progress. Nothing to show for all that effort!” Carmen did not say what was in her mind out loud, but her body language said it all: the shoulders dropped, her eyes looked gloomy and she sighed. She was the image of frustration. “What can I do now? Why haven’t we delivered any RTS?” It was too late to answer those questions. She only had time to dash home, take a quick shower and come back to the office in time for the weekly progress review with the project team. Later that day… Carmen goes through the progress using the Work-Breakdown-Structure and the Earned Value Management38 presentation she had prepared. The audience was mute. Very few questions were asked. After all the information was “neutral”, there were no big visible disasters in the project. A few questions were open, but nothing that the project team was not familiar with. But then… “However,” Carmen continued, “after reviewing and redoing the project plan for many hours during most of last night, I found that the progress reports we are using are completely inadequate to show us the real progress of the project from our customer’s point of view.” She waited to see the reaction of the audience. Nothing. Just silence and puzzled looks. 38 More on Earned Value Managment: https://en.wikipedia.org/wiki/Earned_value_management
74 “What do you mean? “ Finally asked her boss. “Well,” started Carmen, “the fact is that our requirements are indeed being implemented. We do see progress from an EVM point of view, but…” “But what?” Insisted her boss. “But, the truth is…” Carmen hesitated. “The truth is that we have nothing actually running that we could show the customer in the progress meeting next week. We have many requirements implemented, but if we look at the project from the point of view of the end-user we have nothing, really nothing, we can show!” “How is that possible?” The whole team asked in unison. Carmen continued. “Remember when we reviewed the requirements document back when we were creating the bid? Herman asked us, how we knew we were done with each requirement. And we answered that we would know when we would put them all together for the first system testing rounds, right?” “Yes, but I’m not getting your point,” commented a team member, “that is how we’ve always done it. And it worked!” “Correct, it worked before.” Continued Carmen. “But for this project we are being asked to report progress with running software every month. That is new. We’ve never had to do that before because most of our projects were small and we went from start to end without having to demonstrate progress.” Carmen stopped for a moment, and then decided to show them the RTS progress graph she created. The flat line was about to come out of the closet. She was nervous… “Here’s how our progress from a user perspective looks like.” Carmen showed them the same graph she had prepared during the early hours of the morning. Albert couldn’t be silent anymore: “How is that possible? I’ve implemented at least 10 of the requirements, and I’m only one of the 20 developers in the team!” “You are right Albert,” Carmen reassured him, “but the requirements you’ve implemented are all in the database and service layers. In fact most of the requirements we’ve implemented are in those areas. The fact is that we don’t have one single end-to-end capability implemented.” “If we look at the capabilities we need to deliver,” Carmen listed the INVEST Stories on the screen, “we can see that we have started working on five of the 64 capabilities we need to implement, but we have not finished any of them. Albert, tell me, how many of your requirements have been tested by Janet and her testing team?” “None, they are still writing the test specification,” replied Albert. “Exactly! We have done a lot of work, and we’ve started many things. But the truth is that we have finished nothing from our end-users point of view.” By plotting the progress of the project in RTS’s Carmen is giving her team: • Clear and verifiable progress information. • Actionable information. “Carmen,” started her boss, “what do you suggest we do now?” “That’s what I want to discuss with you and the team. I have an idea, but you all must be on board or it will not work.” Carmen explains her ideas to the team, and at the end they all committed to working as she proposed. “You have the go ahead, Carmen. But I want to see some progress by next week already or we will have nothing to show the customer!” Finished her boss.
75 How do you recover from a situation like this? How can the use of #NoEstimates help get a project on track? That’s the topic for the next chapter.
76
CHAPTER 5
THE FAST TRACK TO NOESTIMATES
“Y
ou’ve reached Herman, how may I help you?” “Herman, hi! It’s Carmen.” “Hi Carmen. What’s up? Are you at the office?”
“Yes, I meant to ask you if we could … Er… have a chat…” “Sure, when?”
“Right now?” “Wow. Must be something important.” “Yes, it is…” Carmen said, sounding unusually serious. “OK, I’ll come right over.” Carmen had just left the meeting with her boss. The stakes were very high. She had committed to show progress in the project during the meeting next week. How can she define progress in a way that is actionable? How can she ensure progress in a project that was almost two months in, and had a flat line of Running-Tested-Stories (RTS)?
77
“Herman, I have a serious problem that I need your help with.” Herman stepped back and asked: “Erm, OK. What problem?” “I presented the RTS line for the Big Fish project to my boss. The line was flat. We have already spent almost two months on this project and have nothing to show for it” “You… you did what?” Herman looked shocked. “Yes, I finally read up on that #NoEstimates ideas that you have been talking about. I must confess I thought that was just airy-fairy stuff, but I did it. I applied it to my project. I broke down the requirements into INVEST Stories. I plotted the progress by Running Tested Stories (RTS) and the line is flat! What should I do now?” Carmen looked accusingly. “Well, why didn’t you ask me before doing that? I could have told you from the start of the project that your RTS line would be flat at least for the first few months. That’s how waterfall projects normally behave. A lot of work on developing separate horizontal layers of the software that, hopefully, at the end come together in actual running software.” Herman tried to explain. “I know, I know. You told me that same story many times. But now it is a real project…” Carmen stopped. “I’m sorry Herman, I did not mean to say that. I’m just stressed out. My boss allowed me to use your #NoEstimates approach, but now I need to show progress in 1 week!” “OK, let’s start from the beginning, Carmen. Describe the situation to me.” Carmen explained the project situation, just like she had done minutes before to her team. Herman looked concentrated, asked a few questions and then stated:
78 “Looks like you need to start cutting scope out, or at least delay work to the second delivery later this year.” Herman looked convinced. “How can you say that? I mean, we just worked on this project for a few months, the whole project may take a lot longer. It’s just…” Carmen hesitated. “Just what?” Asked Herman. “You need to be honest with me! I can’t help you if you don’t tell me what is at stake.” Carmen needed Herman’s help. Herman had been managing projects for at least as long as she had. And he had applied #NoEstimates in all of his projects. Sure, all his projects were relatively small because no one would trust him to manage a large project on account of the unorthodox #NoEstimates approach he used. But the stakes were high and Carmen’s mentor, her boss, was not a viable alternative to ask for help right now. Not after she made the strong statement about progress earlier that day. Carmen decided to tell him everything. Once she had told Herman everything… “Wow, that’s heavy stuff!” Said Herman and sighed. “Anyway, I know you need my help, so let’s get to work.” “But, you have your project ongoing, don’t you need to check your calendar?” Asked Carmen, not believing her luck. “My projects are easy, the teams have a clear way to check progress and they can make scope decisions without me. I’ve built a system for them that they can easily use. The truth is that most of my projects run very well on auto-pilot.” Said Herman with a wink. “This project however… Let’s just say that it will be a challenge to get it on track, but I believe we can do it.” Herman picked up a piece of paper and started asking questions. Herman wants to help Carmen, but before he can do that, he needs to understand what is at stake. Both in terms of project delivery as well as short-term customer relationships. Here are the questions he will ask Carmen: 1. What are your intermediary deliveries going to be used for? 2. When does the project need to go live with the first release? 3. What does the customer expect to accomplish with that first release? 4. How many, and which, Running Tested Stories (RTS) do you need to deliver until that first release? 5. How many RTSs have you successfully delivered during the last 2 months (the length of the project until then)? With these questions Herman is trying to establish the following: 1. What is the most important value to be delivered by the project from the customer’s perspective? This may include a significant cost-saving functionality;; a new Feature that will make the product win awards, or something that is otherwise significant for the customer. 2. What is the amount of work that needs to be completed in number of Stories to be delivered? Note that without the INVEST properties for each Story we could not use the number of Stories to assess the delivery rate or assess future progress. If each Story is only complete when an arbitrary number of other Stories are delivered, then all those Stories need to be delivered before we see progress. 3. When should the next delivery of the project happen? Delivery means something that will go into use by the customer. You may have many project deliveries during the whole length of the project, but those will be internal or testing deliveries. With the answers to questions 2 and 3 we can build a progress “yardstick”. For example, if you have 10 weeks to the next delivery and you have 20 Stories that should go into that delivery, you know you need to deliver an average of 2 Stories per week to make that delivery. If you
79 deliver less, you should then evaluate the scope and make the necessary reduction. If you deliver more, you are on target and may be able to deliver more functionality at the end of the 10 weeks. However, the first question about the purpose of each release is the most important. By understanding the goal of your customer you will be able to “steer” the delivery by evaluating, prioritizing and ultimately removing Stories from that delivery. Without an answer to the first question, the most important tool for the #NoEstimates practitioner (scope management) will not be available.
“Wow, we have way too many things to deliver for the first delivery! No way I can show this graph to the customer when we have the progress review next week. He’ll think we haven’t done anything!” Carmen had just realized the extent of the project delay. There were too many Stories to deliver, even for the first release! Especially when she considered that she had zero RTSs delivered so far because of the layering of requirements and implementation. “But the first action that you need to take seems clear Carmen,” said Herman, and waited for her reaction. “Is it? I can’t see what to do, I feel overwhelmed,” replied Carmen. “That’s OK. It’s normal to feel overwhelmed. After all, you just discovered that your project is in jeopardy. But now you know that you don’t have visibility to the rate of RTS delivery,” tried to lead Herman.
80 “Precisely! I don’t know what our progress rate is because we haven’t yet delivered a single RTS, we’ve worked in many requirements, we’ve worked for months and have nothing to show for it.” Carmen was frustrated. “Don’t despair Carmen. This is not good news, but it is actionable information.” “Actionable in what sense? I don’t get your point.” Carmen sounded angry. “You know that your first action should be to find what is your project’s rate of progress,” – Herman said, “until then you are flying blind, so to speak.” “Right, but how do I do that?” “We need to get your Stories to be small enough, the current Stories are too large to give you any insight into progress. We have to make those Stories smaller. What Stories are already in progress?” “These here at the top of the list, I’ve highlighted them,” said Carmen, while pointing to the list of Stories she had created the previous night. “Right, let’s make sure those are small enough. We’ll worry about the rest later” “And how do I do that?” “Simple. Take this first one: As an enrollment nurse, I want to add the health record of my patient to the database, so that the doctor can later read the answers to the questions we ask when the patient arrives to the hospital.” “How would you break that down?” Asked Carmen curiously. “I mean it can’t be smaller than that, right? That’s a pretty simple Story, and it will probably take multiples weeks to get it implemented because we have the UI team involved, then we have to run some tests with the nurses, and the doctors. Then we have to run a live test, whereby a business analyst will actually be at the hospital to play the role of the enrollment nurse and test that the system actually works, etc.” “Wow, calm down, you’ve covered many things already that we can use to split this Story. Let’s take them one by one. Do you really need the UI team involved before you start designing a UI for this functionality?” Asked Herman.
Slicing User Stories to Assess Progress and Manage Scope During the conversation that follows Herman will help Carmen slice the User Story she just read into smaller, runnable, testable Stories. The most important attribute of those Stories is that they be small. How small? That depends on your need to assess progress. If you need to assess progress every day in a project that lasts a few weeks, for example, then your Stories should be completed at the rate of several per week. As an example, you could aim to have about 1-day time boxed Stories, so that every day you can see that some Stories are delivered (or not!), and everyday you can assess progress. If your project is several months long, then assessing progress every week may be enough and your Stories may be time boxed to a few days (say 2-3 days). Here’s a story of how my friend Ángel Medinilla used some of these concepts to save a failing project:
81 I have a personal experience with an 18-month project. There were 30 people in that project in three different teams. When we looked at the data we saw that there were between 1 and 3 Stories delivered by every team in each 2-week period. Even though there was some variation from week to week, a consistent average of 5 to 6 Stories were finished every two weeks by the three teams. As we compared that to our backlog (which contained about 300 Stories) we realized that there was an obvious risk of not delivering 90 to 125 Stories over the next 35 sprints (2 week periods). So we decided to focus on the most important 200 or so Stories as soon as possible. After prioritizing the 200 most important Stories we just ourselves: “does this Story feel like it could fit into a 2-week sprint?” If the answer was yes, we took it in, if not, then we broken it down further. This was what some will call “blink estimation”, and it worked for us in that project. Not much time was wasted in those conversations;; the goal was to get started doing the work to assess if we were indeed able to deliver that Story in 2 weeks. Nine months into the project, a working version with roughly 120 Stories was available. The company decided to go live and the project was stopped while the company re- planned and focused on a more important project with Features that made more sense than the ones that were identified and committed a year ago. There are a lot of lessons to be learned from this story! Ángel is right, this short story has many lessons to be learned. One such lesson is that it is only when we start working on a Story that we actually know how long it will take to deliver. Another lesson is that breaking down Stories helps us assess progress at the project level faster, and make the necessary (and inevitable) scope decisions. Not all Stories are critical for any project. Discovering which are, and delivering on those is where the value really is. Finally, having a consistent rate of progress is more important than estimating a project. This consistent rate of progress will help us steer the project in a very concrete way: reduce work or re-prioritize work based on actual progress data, instead of a guess at a plan that will invariably change. This consistent rate of progress will be a key tool for Carmen as well. In her project, Carmen had to deliver visible progress information in 1 week therefore she did not have the luxury of waiting several days to complete one Story. Her goal was to deliver several Stories that week so that she could show progress as well as assess the time it takes to deliver multiple Stories, which would in turn help her forecast future progress. Slicing Stories to be small enough is a critical skill upon which successful software projects build. There are many techniques that you can use to achieve a decomposition into INVEST Stories that are small enough for your needs. In this example we will take the Story at the top of Carmen’s backlog to explain some of the techniques.
82
1. Slice along functional dependencies In the Story above Carmen mentions a dependency on user interface design. This is a classical example of functional dependency where one team (the developers/testers) is dependent on the work of another team (User Interface specialists) before they can complete the work. We can slice the Story so that we create a clear division between those two types of work or functional expertise. If we were to use this technique the resulting Stories would be a. First, the original Story now without a dependency on the UI: As an enrollment nurse, I want to add the health record of my patient (using the draft user interface), so that the doctor can later read the answers to the questions we ask when the patient arrives to the hospital b. Then, the second Story with the dependency on the UI: As an enrollment nurse, I want to have the User Interface optimized for information input when I add the health record for my patient, so that I can concentrate on asking questions and documenting the answers. Note how the first Story can be completed without involving the User Interface specialists, and therefore be quickly completed;; while the second Story focuses on the role of the User Interface design for that particular user (optimize for information input)39. The second Story could focus on reducing the “movement” needed to introduce information by, for example, designing an interface that guides the nurse through the enrollment process in a way that does not require the use of a mouse. 2. Slice to separate quick from time-intensive functionality Another possible division of the original Story is to separate the quick implementation aspects from the time-intensive ones, in order to be able to complete part of the work by separating what 39 Editor’s note: It is worth noting that the ability to separate these stories hinges on skills like: Design Patterns;; Automated Unit Testing;; Software design;; and others. These skills are usually not part of the skill set HR personnel look for when recruiting programmers. They are never part of the skill sets specified when consultancies and clients make business deals. The ability to slice stories hinge on a lot of other skills. This may cause problems if no one is aware of the need for those skills.
83 can be done quickly from what requires a longer implementation cycle. In this case we could assume that the database – which is used by the existing legacy application – will require much more work to be completed, so we may decide to separate the input (data entered by the enrollment nurse) from the database persistence strategy (entering that data to an existing database that interacts with other applications beyond our control). The new Stories could look like this: a. As an enrollment nurse, I want to create the health record of my patient (using a temporary data storage), so that the doctor can later read the answers to the questions we ask when the patient arrives to the hospital. b. As a doctor I want the data that is entered by nurses when receiving a patient at the hospital to be available in the same application that I use for prescriptions, so that I can easily review patient information during the consultation. In this division of the Story we see that the data entered by nurses is kept in a different storage solution (maybe a temporary database), and then we add another Story that changes the storage strategy so that the data is finally stored in the final database. This strategy for slicing may be useful if the operational implementation of database changes is a common bottleneck for the organization. This approach may add work to the project, however, it is also an effective risk mitigation strategy. When you follow this strategy, you may decide at some point to go live with the temporary solution (the temporary storage in this example), and later change the implementation, or pursue other high value Features instead. Not being able, or willing to use this strategy may lead your project into a death march: where you are committed to implement the permanent solution, but can’t deliver anything until such solution is ready. Add some dependencies to other functions (like the “storage team” in the organization and you have in place the ingredients for a death march. 3. Slice along user/role separation Not all acceptance criteria need to be included in one Story. A strategy for slicing may be to explicitly exclude some of the user-specific acceptance criteria into a Story to be implemented later so that we can quickly show progress and receive feedback. The remaining Stories can be added to the backlog and prioritized accordingly. One example is the live test that Carmen referred to in her explanation, as well as the changes we expect to come from that live test. Implementing this slicing heuristics could give us the following Stories a. As a nurse lead user (a user that tests the product for the nurses), I want to add the health record of my patient, so that the doctor can later read the answers to the questions we ask when the patient arrives to the hospital. b. As a enrollment nurse (the actual nurse at the hospital), I want to have an intuitive and quick input method for the information I collect from the patients, so that it is comfortable to enter information even in time-critical patient situations. In the example above we’ve introduced a few concepts (nurse lead users and time-critical patient situations) in order to separate out the aspects that affect the applicability of acceptance criteria. By separating out the performance and user interface optimization into a different Story, we are able to deliver some work without performing the live test, one of the original acceptance criteria. Another possible approach would be to separate the mandatory form (without which data could not be entered) from the final form design implementation. You can start by tackling the basic database operations, and later on invest more time (if you have time) in improving the user interaction design for the form. While the final design may significantly improve the functional value of the application, you may still go to market with the initial implementation, and later add
84 the necessary changes. This approach has the advantage that you will have feedback from the users and will therefore understand better what needs to be improved with the new design. On the other hand, if you run out of time, you can still go live with the original implementation, significantly reducing the risk of not being able to deliver the product to the market.
Other Slicing Heuristics There are many possible slicing heuristics that you can use to take a large User Story and slice it into manageable, and most importantly, progress uncovering parts. As an example, you can slice following your user journey steps (login, search, select, modify, accept, etcetera);; you could use different scenarios, roles, or personas;; you could slice according to input/output data;; you could divide according to complexity, interfaces, current level of knowledge, test case. And the list goes on. Even when a Story looks like it can not be divided further, there is always a way to bring it down to smaller, independent pieces that can be developed and tested separately, giving you a better idea of progress than the amount of hours you’ve put into a Story versus the “estimated” effort to complete it. If you estimated 40 hours and you’ve put in 4 hours, can you really say that you are 10% done? On the other hand, if you divide the Feature in ten separate slices and you complete two of them, that’s a far more tangible progress indicator. “Working software is the primary measure of progress.” Agile Manifesto The most important aspects of slicing are: • Each slice is independent (the I in INVEST). In other words, each Story can be delivered independently from other Stories, and accepted on its own. • Even if each Story may not be “sellable”, it must be testable and final, i.e. the team can make sure that a particular User Story has been successfully completed according to a Definition of Done. This Definition of Done is a litmus test that will allow you to classify tiny parts of the whole project as completed, before the whole project is done. The focus on completing thin slices of functionality every day (or as often as makes sense for your project) is what allows you to collect the progress information you need to assess progress in your project, and therefore show progress towards the final goal. Early in each project, your top priority is not to ship something meaningful to your customer, but to obtain information on capacity, throughput, and backlog size. If you are able to slice your Stories so that you can deliver 1 or 2 Stories per day, that will dramatically increase your ability to both track, and steer your project! But even if you are not able to reach this state, being able to deliver multiple Stories per team for every iteration (in many cases iterations are about 2 weeks long) is also a good start to reduce your estimation needs and have more tangible progress information.
85
For more heuristics on how to slice Stories and some examples, look at the resources at the end of the book and the links to blogs and sites that explain how other people are able to slice large pieces of work into thin slices of functionality. Now, let’s get back to our story. “But Herman, now that I have these 10 small Stories instead of the one we started with I still have a problem: I don’t know how much time all the rest of the work will take! This was only one Story!” Carmen was not convinced. “Absolutely correct! In fact you will not know how long the whole project will take until you have either the whole backlog of INVEST Stories sliced up (a bad idea) or until you have enough historical information that you can infer the cycle time for every backlog item, independently of size,” Herman explained. “Oh, do you mean that this slicing of one Story is just a way to have visible progress for this one Story, but not for the whole project?” “Yes!” Herman answered. “But I need to know the progress at the project level, not just for this Story.” Carmen was still not convinced. “I understand Carmen. But before you can assess progress for the whole project you need to first understand what is the throughput of your project. In other words you need to know how many of those INVEST Stories you created last night actually get delivered in a week.”
86
“OK, let me see if I got this. I will work with the teams to implement these thin slices of my INVEST Story; by the end of the week we’ll have an idea of how many slices of an INVEST Story we can deliver.” “Correct!” Confirmed Herman. “And then I’ll just guess how many thin slices each of the other INVEST Stories has? Isn’t that estimating?” Carmen asked. “Not really, but that is something we need to cover next,” continued Herman. “Right now the most important step for us is to get your project to show some progress. The data we get when we show progress will help us to predict or forecast future progress, but we will need more of those INVEST Stories to be delivered before we can be sure we know the actual progress rate.” “But doesn’t that mean that – even if we deliver a few of the slices we just created – we will not know when we will deliver the Features we need for the first release?” Carmen was puzzled. “The idea with #NoEstimates is that you should focus on value, and use the available data to forecast future progress. But the first step is to focus on value to be delivered. Once you are clear on the value you need to deliver you should then worry about forecasting future progress. The first question is: what is the most important piece of work we need to deliver now? You just answered that. Let’s focus on that first and talk again tomorrow,” Herman stated. “I have to run, meet me for breakfast tomorrow morning, we’ll look at the rest then.” Carmen was not happy, but she trusted Herman and was happy to have been able to slice the INVEST Story – which seemed huge – into smaller items that she was confident the team could deliver in a shorter time. Her next step was to get the teams to start on the thin slices of functionality she and Herman had just defined.
87
Determining Progress from Historical Data Carmen asked some very important questions: how to assess progress when we actually break down an INVEST Story into smaller, thinner slices? After all they are not the same size as the original INVEST Stories and those slices may not even be “sellable”, i.e. ready to go into production. The lack of historical progress information is a very common obstacle when applying the ideas behind #NoEstimates. We don’t always have enough historical information that we could use to model the future progress of a particular project. The reasons are varied: we may not be working with the same technology;; we may not be working with the same team;; we may not have a stable team;; we may never have used small increments;; we may have only used waterfall in the past, etc. This is why it is important to start collecting historical information now. Don’t wait for tomorrow, start collecting information about your project’s progress and use that to forecast progress as soon as possible? How soon? As the proverb goes, “the best possible moment to plant a tree was twenty years ago;; the second best moment is now” In my research I’ve normally used the progress data from 3 to 5 iterations (or weeks if you are using Kanban/flow based software development) in order to define the initial progress rate. Many expect that you need many more data points before you can make a useful prediction, but that is not the case. Three to 5 iterations are typically enough.40 In one project I took the information from the first 3 weeks (how many RTSs were delivered to a production-like environment, also known as the project velocity or throughput) and merely extrapolated that to the rest of the project. The average velocity multiplied by the number of sprints we had available in that project gave us an indication of the total amount of RTSs that we could deliver during the full length of the project. Below you can see a graph detailing the number of Stories delivered in every one of the 21 iterations for that project.
40 Thank you to Troy Maggennis for highlighting how important it is to recognize that a small number of data points or samples is enough for us to be able to make useful predictions regarding future progress. For more on the problem of inferring a discrete uniform distribution through sampling see the German Tank Problem entry in Wikipedia, which explains that the use of sampling and statistics can improve on human estimates: https://en.wikipedia.org/wiki/German_tank_problem
88
Figure 9 - Run chart of Stories delivered by one team in a long (21 iterations) project. Notice how useless it would have been to set a target of 10 User Stories for this team...
In this project the average velocity during the first three weeks was enough to predict very accurately how many RTSs the team would deliver over 21 weeks. In your project that may not be the case, so you should constantly update your forecast based on the latest information you have. The graph below shows a shorter project where the first three iterations (not weeks in this case) could not be used to reliably predict the number of RTSs that project would deliver. However, as the project progresses we see that the velocity stabilizes. By updating our forecast based on the latest data available, we progressively become more accurate in our forecasting.
89
Multiple Levels of Granularity In Carmen’s project we have multiple levels of granularity. Carmen was able to divide the project requirements into somewhat large INVEST Stories;; which we call Features because they cannot be delivered in a 2-week or Sprint timebox. Together with Herman, Carmen was able to further divide each Feature into smaller INVEST Stories;; which we will call Stories or User Stories. User Stories are constrained to be delivered in a period of 2-weeks or a Sprint in Scrum. In my practice I advise that Features be given a mandatory, maximum calendar duration of around two months depending on project size and calendar duration. The smaller Stories should also be given a mandatory maximum calendar duration: I like half-day to one-day because it helps teams find and solve execution bottlenecks on a daily basis. But your mileage may vary. In any case, a User Story should not be allowed to grow bigger than about half the length on your iterations (a common iteration size is two weeks). By establishing these different levels of abstraction for requirements you will be able to gather progress information at different levels. You will be able to ask and answer the questions: • How many User Stories can a team deliver on an average week? (The User Story velocity). • How many Features can our project deliver on an average week? (The Feature velocity). Both these metrics will help you forecast the progress for your project. While the User Story velocity metric will help you assess when a certain Feature might be ready;; the Feature velocity will help you assess when the project might be ready.
How Do I Mandate the Size of a Feature or a User Story? “Work always expands to fit the available time”, states Parkison’s Law. Parkinson’s Law is not the only example, we have many other quotes and phenomena that basically describe the same thing: when it comes to knowledge work, it will always take at least as much time as you’ve allocated it to take. In statistical terms, if you plotted the duration of all tasks in a project it would create a histogram similar to the one below.
90
What this means is that, even if you estimate, you are very likely to get it wrong and chances are you will get it wrong by under-estimating the work that needs to be done.41 Because we are more likely to underestimate the duration of a task, the delays in the project continue to accumulate even if some tasks are finished quicker than estimated. How to avoid this phenomenon? Wrong question. We should instead focus on defining work based on how much time we think it should take. For example, if a project were likely to generate a maximum income of $100,000 it would be a bad idea to spend more than that to implement it, independently of what your estimates say. When it comes to following progress for a project this concept is applied by hard-limiting (time boxing) the duration of certain parts of the work. If all Features take one month to deliver (by definition or time box) you know that in a year you will deliver around twelve Features (assuming you work in one Feature at a time). The project may deliver a few less Features, or a few more Features, but close to twelve. However, if instead you try to estimate the Features to take 1 month you will be a victim of Parkison’s law, which dictates that each Feature will most likely take at least 1 month to deliver. Let’s take an example. When delivering an IT ticketing system (to handle requests coming in from the users of the services IT provides) we may decide to list a number of Features and then estimate their size. Alternatively, we may decide to list Features and not worry about their size. As long as all Features are increments of value for your customers, what matters is that you start immediately delivering that value. As the teams develop the Features, the Features are sliced into smaller Stories, with each Story being in itself an increment of value. 41 One significant reason for this large spread for task estimation is that we tend to estimate the actual work it takes to complete the task, but are unable to predict the time that task spends waiting to be picked up. In Chapter 1 we cite Troy Maggennis email where this phenomenon is further explained.
91 When we get closer to the end of the mandated one-month Feature calendar duration, our focus will turn to making the Feature under development “sellable” (i.e. ready to be used by end- users), even if not all the functionality could be delivered. The functionality that did not fit the one-month mandated calendar duration for the Feature is said not to “make the cut”. This functionality may still be valuable or not. If the remaining functionality is considered to be valuable it is then grouped into one or more new Features (also with the same mandated calendar time duration), and added back to the list of Features to be developed. If, on the other hand, the remaining functionality is not considered critical, then it should be dropped from the list of work to be completed, or at least placed with low priority on that list. As we add the remaining functionality back to the backlog we will see the remaining work grow. This phenomenon is very normal and to be expected in software projects. In fact the work to be done in a software project will increase unless the project team makes a decision to actively remove work from the backlog. This constant addition of work to the backlog of a project is one of the causes for schedule overruns and even has a pet name in the software industry: “scope creep”. Of course, that name does not reflect the reality of software development. Adding work to the backlog is not “scope creep”, it is just a natural outcome of our constantly changing and improving understanding of the problems we need to solve with the software we are creating. Instead of “scope creep”, we should really use the term “value discovered”. Mandating the maximum calendar duration for an item is also used for User Stories. In my practice I advise teams to have 1-day User Stories. The reason is simple. If you were wrong about the time it takes to develop your User Story you will know it already tomorrow! And can therefore act to either remove the obstacles or reduce the scope of that User Story. Following this maximum allowed calendar duration for Features and User Stories requires practice in slicing larger pieces of work into small increments of value. Don’t be discouraged if at first you don’t succeed. Rather than increase the mandated size of a Story, practice slicing your User Stories more often, ask for help from a more experienced colleague or ask Google. Someone out there has already cracked that nut and can help you do it. See the resources at the end of the book for ideas on how to improve your skills in Story slicing.
Why Should I Mandate the Size of a User Story or Feature? There are several reasons for mandating small enough calendar duration for User Stories and Features. The most important one in our #NoEstimates context is that it will give you the progress information you need to be able to forecast future progress and deliveries. See below the Feature velocity graphs of two different teams, one that mandated the size of Features to 1- month and the other that estimated the size of Features instead as they were defined. You can see that the first graph provides regular progress information and a reliable metric for you to use in forecasting. While the second graph shows how Parkinson’s law impacts the relative unpredictability of progress.
92
Figure 10 - Plotting the velocity over time for two teams. Above: throughput for a team that explicitly limits the calendar duration of their Stories. Below: the velocity for a team that does not limit the calendar duration of their Stories.
There is no magic here. The reason limiting work to a fixed time works is simple: it forces you to increase the frequency at which you collect feedback, and evaluate progress. The moment you realize that a Feature or a User Story cannot be fully delivered within the allotted time is the moment you get to decide whether to accept that additional work or to discard it. That is a powerful moment in your effort to contain the project scope and focus on the most valuable work. Why wouldn’t you use it?
Extrapolating from User Story to Overall Project Progress “Herman, we are close to the end of the week and I wanted to review the progress with you before presenting it to my boss. Can you come over”, Carmen asked Herman.
93 “Sure, let’s review what you have.” Carmen and Herman were looking at a spreadsheet. The sheet showed the number of User Stories that were completed per day as well as the number of User Stories left to complete for the Feature under active development.
Figure 11 - Accounting for the Stories delivered within one Feature during an iteration. Notice that the Feature increases in number of Stories as time goes by, this is a very common scenario. Work is discovered as previous work is completed.
“Great! This is very valuable information!” Said Herman excited. “Great? Are you serious? We were not able to finish the Feature we started with this week. There are still 4 User Stories left even though we completed 9 User Stories out of a Feature that was thought to have 10 User Stories!” Carmen said expressing frustration. “Calm down Carmen. You are right, but you are not seeing what the data is telling you.” Continued Herman trying to change the tone of the conversation. “Look, the team was able to complete 9 User Stories this week, that’s a rate of about 2 User Stories per day. That gives you an indication of what is the capacity of the team at the moment. All other things being equal you can trust that the team will continue to deliver around 2 User Stories per day. Some days it may be zero, and other days it may be three or four, but this is valuable information.”
94 “But I don’t know how much work is left. How many User Stories does each of the Features to be developed have? I don’t know.” Carmen was not impressed. “That is correct, but let’s review our goals for this week. We wanted to show progress. Here you have it! You have software you can demonstrate to the customer and you have a pretty good understanding of how much software you can deliver on a regular week. We have to expect that this User Story velocity will change. If the team, the technology or any other key factor in your project changes your velocity will change. That’s normal. But you have a ball-park figure that helps you forecast progress.” Herman continued, convinced of the value of the data collected. “But Herman, I need to show progress at the project level. All I have now is progress at the Feature level.” Carmen pointed out. “Correct. You can only show how long this one Feature took and is likely to take. However that information is valuable for the project as well. As of today you can assume that every Feature in the backlog will take between one and two weeks to deliver.” “No I can’t!” Carmen interrupted. “We’ve worked only on one Feature, which is not even completed.” “Sure, but you can speculate based on that observation. Right? I mean when you look at the backlog, do you think this was the lowest effort Feature you have in the backlog?” Herman asked. “No, this is by far not the smallest Feature.” “Is it the highest effort Feature you have in the backlog?” Continued Herman. “No, this is quite large, but not the largest.” “There you go! Now you can speculate that this Feature is somewhere in the middle, which gives you a good range for all the other Features. Let’s assume, for the sake of argument, that this Feature is about average in effort. Now you define an interval for the other Features. Let’s say Features will take anywhere between one week and three weeks to deliver. Take those numbers and multiply them by the number of Features you have in the backlog, what do you get?” Herman waited for Carmen’s answer. “Well, making those assumptions I could say that the Features we have left will take anywhere between one year to deliver to four years – which is unacceptable!” “Wait!” Herman interrupted, “you are going too fast. Even in the case of one year being too much you have not yet applied the most important tool you have as a Project Manager.” “What’s that?” Carmen was puzzled. “Scope Management!” Herman waited for her reaction
95
“Are you joking? How can Scope Management help me when even the lowest end of the interval is too much?” Carmen was not impressed. “Good point. But you are talking about Feature progress information. Don’t forget that each Feature itself can have its scope managed, so that even if you can’t remove some of the Features in the backlog you can manage what each Feature will include in order to meet your target schedule,” Herman continued. “Oh, I see! What you are saying is that I should forecast progress based on the data at different levels of granularity. At User Story level so that I can manage the scope for a Feature and at the Feature level for the project…” – Carmen explained. “Yes! Now you are getting the hang of it.” Herman continued, “the idea is that you have to collect the information you need to make significant project decisions, and as you know, scope management in a project is one of the few things the project team really has power over; especially if the team can forecast progress during the early days of the project. After all, the customers are never happy to drop Features or even Story-level functionality at the end of the project, but I’m sure they will consider your suggestions if you bring them early enough in the project.” “Yes, of course. Now I understand what you mean by ‘showing progress’. You actually meant that we have to show enough to help us forecast future progress against today’s backlog so that we can see if we are over the schedule at all times!” Carmen looked happy. Herman continued, “yes! And now you can bring actionable information to your boss when you review the progress of this week! The first question you should ask yourself now is how many Features you
96 would need to cut out of the backlog to be reasonably sure, according to your forecast, that you can deliver the first release on time.” “Great! Thank you Herman, now I need to go prepare the presentation.” Carmen left the room with decisive speed. Here some of the key takeaways from Carmen’s story so far: 1. Use multiple levels of granularity to establish flexible requirements. 2. Use historical data to assess progress and forecast future delivery. 3. Cost is a multiplier of time (mostly);; the only real variable the project team can control actively is value (in the form of scope).
1-2-3: Step by Step Towards #NoEstimates As with any important change in the way you work, bear in mind that moving directly from a traditional estimation-based-plan environment to full #NoEstimates approach will be risky most of the time, and perhaps not advisable. This is the second reason we considered the idea of giving you a step-by-step guide. So please, keep in mind that the list below includes some specific steps you can follow in order to explore how many estimates you really need in order to plan and manage your projects. 1. Move to Story Points. Even if this is just another way of estimating, getting rid of ‘hours’ and ‘days’ has too many benefits to ignore them. We already discussed previously in this book the problems of using time-based metrics, which are an indication of cost, to measure project progress. Even if it’s just another proxy metric for productivity, Story Point-based estimation gives a better understanding of how things like risk, complexity, expected dependencies for each Story, etc. Given that a large amount of time it takes to deliver one Story is spent waiting, Story Point estimation is more likely to help you assess the true impact of one Story in your project. 2. Stop estimating tasks. One of the saddest thing we witness in planning meetings is a team casting an estimate for a Story, dividing this Story into tasks and then casting estimates for each task, adding them all and seeing if the number matches the original estimate for the whole Story. Instead of that, just don’t create sub-Story tasks or, if these are valuable for team synchronization – knowing who needs to be doing what – just stop estimating them. For progress reporting, just ask the team about the Story progress – did we progress well yesterday? Can we complete the Story today? 3. Limit the calendar duration of Features and Stories. For Stories, specifically you should aim for one, maybe two days of calendar duration to finish each Story. Even if this is not easy when you try for the first time, this approach will give you concrete benefits. For example: any Story started at the beginning of an iteration that was not finished by the end of the iteration is showing an organizational impediment that you should investigate further. 4. If you are already using Story Points, remove some ‘planning poker’ card options. Start by asking team members to rate everything either as a 1, a 3 or an 8. This means that anything bigger than a 1 is a 3 – this avoids the “is it a 2 or a 3 point Story?” discussions – and anything bigger than a 3 is an 8. Anything bigger than an 8 should be sliced. Slowly decrease the options. For example, use only 1 and 3, and soon you will be able to ask a simple question: “can we get this Story done by tomorrow if we start working on it today?”
97 5. Build histograms. Keep track of your average duration for Stories and Features. Simply record the day the team starts to work on each Story or Feature and the day that Feature or Story is complete. This information can later be used for progress forecasting. 6. Use the average cycle times for Stories of different size to start producing Story-based forecasts. Count how many Stories go into every sprint and make a histogram-based forecast of how long will it take. Use it also to forecast small projects (one to three months) that can be sliced into small-medium-big Stories. If you can prove these numbers to be at least as reliable as the estimations you gave, you’ll have the case for #NoEstimates right in front of you! 7. Finally, work with Stories as if they all had the same duration. Simply count Stories and project progress based on how many Stories the project was able to deliver in the past: average Stories delivered per iteration or per week. Try each of these steps in your own project. Some steps will be easier, but when you find a step that is hard to implement ask “why?” In some cases the requirements will be the impediment – maybe they are still horizontal requirements? In other cases the hard part is to learn to slice the Stories. In fact, slicing Stories is probably the most effective tool to manage scope, and very few projects are using this approach effectively today. I call this the “lost art of Agile Software Development”. But the next question is: even if you can slice the Features and Stories into smaller work items, that you can deliver regularly into a production-like environment, how can you use that information in a project negotiation? Carmen’s next challenge is just that: how to use the actionable information she collected to negotiate the project delivery with the customer. Let’s see how she does that in the next chapter.
98
CHAPTER 6
THE FIRST STEP TO DELIVER A PROJECT ON TIME IS TO RECOGNIZE THAT WE ARE LATE
“C
armen, I’m impressed with what you were able to do during this week. Your presentation of the project’s progress was very clear, and is just what we need to make good decisions.” Carmen’s boss smiled.
“Thank you! I think I’m starting to get the hang of these #NoEstimates ideas, that Herman has been talking about, and I really think it will help…” “What?!?!” Interrupted her boss. “That’s not acceptable! You can’t be talking about that to the client! They will think we are not following the process and may sue us!” Her boss was not amused.
“But, that’s the truth. It is thanks to Herman’s ideas that I was able to finally get a grip on the real progress of the project. Without his help and his support we would still be in the same situation as we were last week. Why can’t we say this to the customer?” Carmen was not happy with the need to hide #NoEstimates from the customer. “Carmen, I’m sure you mean well. And I’m sure that whatever ideas Herman has told you they have only helped you realize that you needed to work harder. This #NoEstimates is simply not credible! Why do you think I transferred Herman out of my team? We can’t run the risk of him talking to a customer about his ideas, we’d lose all credibility we have in the market!”
99
“I see…” Carmen’s mind was racing, she was at the same time disappointed and angry with her boss for not listening and dismissing the ideas that she had been learning about. Maybe this disappointment was due to her own incredulity before she went through the process of losing faith, and then regaining it again by looking at the actual data that she had been able to collect in the last week. “Look, you’ve done a great job this last week.” Her boss continued, “don’t spoil it by scaring the customer with immature and irresponsible ideas. I’ve been in this industry for many years and have seen many successful projects. I know estimation is a key practice in any project. All the indicators of project failure point to bad management, not the estimation process as the root cause for failure. Keep your game together and work hard, I have faith in you.” At that moment, Carmen would realize later, a bit of her died. She stopped respecting the knowledge she knew her boss had. She had found a different way to look at project management, and specifically at assessing progress over time. And she was not about to throw that away just to please her boss. She knew now that Herman was right, and she was about to prove her boss wrong. But before that she would need to improve her diplomatic skills to counter her boss’ unwillingness to deviate from the old process. Client meeting day had arrived. It was show time! The meeting started with Carmen giving her overview of progress as she had prepared the day before. She did not mention #NoEstimates even once, but gave a clear indication that the project would very likely be late. Carmen showed a graph illustrating progress with a burn down chart that only mentioned “Work to be done” and “Months”, as had been agreed with her boss the graph did not mention Features or User Stories.
100
Figure 12 - Carmen's projection for Big Fish project. The optimistic and pessimistic projections. “The most optimistic expectation right now is that the project would, with the current scope, be finished in 16 months or around 12 months from now.” Carmen explained, “as you can see in this forecasted line of progress.” “Carmen,” the client interrupted, “what is that other line that ends 4 years from now? What is that referring to?” “Great question, and well spotted. That other line is the worst-case scenario. Given what we know now about the progress in the project, it could take up to 4 years to deliver the functionality that we have in the plans today,” Carmen added. “Joseph,” said the client, turning Carmen’s boss, “I believe we had an agreement on the live date for the project, didn’t we?” “Yes, we did Mr. McNeal. And I assure you we still have that agreement. What Carmen is showing is important information. As we are at this early stage in the project it is important to have a discussion about what is possible, and that is what we are trying to do here.” Carmen’s boss tried to help Carmen save face. “Indeed, Sir.” Carmen concurred, “there are certain measures we can take to try to increase the probability of delivering within the original date, but we will have to do some work to analyze and decide which requirements we will either remove or delay” “I don’t like the idea of removing requirements as this is pretty much the minimum set of requirements that we need in order to have a successful launch. Especially since the elections are shortly after this system is scheduled to go live. I’ll have Travis contact you about the work he has done. But for now I want to have a closer look at progress. Please send us updates every week,” finished Mr. McNeal.
101 “But, Mr. McNeal. There is so much work to do, preparing reports for your review every week will hinder our ability to manage the project at the best of our ability,” Carmen’s boss added. “OK, let’s make it every two weeks then. By the way, I liked the software demo you did today, let’s have one of those every month.” “Certainly, Mr. McNeal!” Carmen’s boss added with a forced smile.
How to Recover from a Late Project? Carmen was happy the client had taken the bad news without much anger, but she now had a challenge. How to recover from the delay in the project? In the best case the project would be done 12 months from that meeting, which is 2 months late. However, the most likely scenario is somewhere between 12 months and 4 years. This situation is by no means uncommon42. Many projects face this situation late in the planned schedule. What Carmen was able to do with the help of #NoEstimates was to create the conditions to have the scope discussion with the customer quite early in the project. One of the key ideas with #NoEstimates is to focus the conversation on the value of the work to be done. By forecasting and showing progress (or the lack thereof) very early on, Carmen is bringing the scope discussion to the first few days of the project. This is the time when customers are willing 42 Research into the ”on time” delivery of software projects shows that a large % of projects are delivered after the agreed delivery date. For more data see Chapter 1 of this book.
102 to compromise, and when the technology is still flexible enough to be able to manage the scope effectively (very few dependencies are created, unlike at the end of a project where removing some functionality may be harder than adding it in the first place). The key for Carmen now is to find out how to implement an effective scope management strategy. Carmen knew she had to start reducing the scope of the project if she was going to deliver that project on time. Now was time for action. She felt confident that she would be able to reduce the scope of the project after talking to Travis the Business Analyst, so she rang him up and set a meeting for the next day. The next day, the meeting started with the bad news. “Travis, I need to reduce the project scope massively. We have a very low chance of getting this project done with the current backlog size.” Carmen stated. “OK, I can see that.” Travis concurred while looking at the progress burndown that Carmen had shown him just a moment ago. If I understand this graph correctly we need to remove at least the equivalent of 2 months of work given the best estimate, right?” “Actually Travis, this is not an estimate. It is a forecast,” Carmen corrected. “What’s the difference? If it gives me a delivery date it is an estimate.” “There is a big difference which we can’t go into right now,” Carmen stopped short of mentioning #NoEstimates. “But for now I can say that this is a forecast based on actual data, not estimations made by the team.” “Oh, you mean this is like that Earned Value Management graph but upside down?” Asked Travis referring to the fact that the progress lines were pointing downwards. “No, this is not the Earned Value curve. It is concrete, validated progress data, but never mind. The important thing is that the data we have tells us that we will need to remove between 50% to 80% of the existing set of functionality.” Travis looked at Carmen and said: “Are you trying to get me fired?” “Look, Travis. I know this is a lot, but if you really want to have this project live 10 months from now we need to scale down the expectations.” “Carmen, I may be able to negotiate the scope down a bit. But never 50% let alone 80%.” “You do realize that we are fighting a losing war trying to get all of this scope delivered, right?” Carmen interrupted. “Sure, but that is your problem. You’ve committed to this bid, now you need to figure out how to pull it off. From the list you have there I may be able to remove 5-10 Features, if that is what you call those, but not more!” Travis continued. “OK, please work with your management team to remove as many as possible and get back to me later this week. I’ll see what I can do on my side.” “OK, will do. Talk soon,” – said Travis as he exited the room. Carmen lost the optimism she had found in the meeting with Mr. McNeal the day before. The full implications of the project being late were just now hitting her. She felt as if she could do nothing to improve the situation. It was time to get back to Herman. Maybe he had some ideas.
103 As she walked to Herman’s office, Carmen remembered the conversation with her boss about #NoEstimates and decided to meet Herman outside the office. The last thing she wanted now was for her boss to think that she was still using #NoEstimates methods and tools. Carmen picked up her phone and dialed Herman’s cellphone. “Herman, hi! Carmen here. Can we meet outside the office today for a discussion on #NoEstimates?” “Sure Carmen! I’m going to a #NoEstimates meetup later today. Would you like to join?” “Sounds like a plan,” Carmen replied, “when and where?” “Downtown, at the Ritz at 7:30pm. Let’s meet just before the meetup, there’s one person I want you to meet.” “Oh, great. See you then Herman.” Later that day, at the Ritz… “Carmen, over here!” Herman shouted. “Hi! I was looking for you.” Carmen was happy to be out of the office, and to be able to again talk freely about what was worrying her. “Carmen, I want you to meet Julia Matthews.” Herman introduced the speaker for the event. “Julia has a long experience in project management and is one of the very few experienced #NoEstimates practitioners. I briefed her on your project and she be may be able to help you.” After the introductions, the conversation started with a quick overview of the project and the conversation that Carmen had earlier that day with Travis, the Business Analyst. “So, I understand that I need to reduce the scope of the project to be able to meet the committed release dated. But I don’t see how I can do it when the business analyst himself tells me that he may be able to reduce only 5 to 10 Features from the backlog.” Carmen reported. “Carmen,” Julia started. “First of all, let me tell you that you have come a long way. By having transformed the requirements into RTS’s you have created visibility into your progress that is uncommon in most software projects today. Congratulations for your work, you have the key tools you need to manage your project successfully. That list of Features and User Stories gives you a concrete list of valuable items that your customer wants, and you have a concrete way to measure progress against that list. Many projects are still measuring progress against a plan. You’ve started measuring progress against concrete, expected value.” “Thank you, Mrs. Matthews.” “You can call me Julia, Carmen.” “Thank you Julia. But I need to be able to reduce the scope of the project, and now I’m puzzled. Travis can’t see how to achieve the necessary reduction in scope.” “That is very normal, even predictable,” Julia interrupted. “People are used to think about project scope as a list of dependent items, requirements. Usually even a layered architecture is used, and the requirements scattered in those layers. It is very hard to imagine a project where all the requirements would be independent from each other when you are used to this layered approach, where requirements build on each other, and are therefore dependent on each other. It is therefore hard to understand that when you have a list of Independent items, like User Stories and Features as you defined already, reducing scope is not only possible, but can be achieved in several ways. For example: you have the possibility of reducing Features as you asked Travis to help you with. But you also have the possibility of
104 reducing the scope for each Feature separately. I call that Flexible Requirements Management43. I use the prefix “Flexible” because it is not about managing one list of functionality, but rather a matrix. Let me draw this for you to try and make it clear.”
Flexible Requirements Management for Maximum Scope Visibility We often think of the scope for a project as an inflexible – or at best slightly negotiable – list of requirements or functionality. However, projects have a tendency to grow in scope precisely because that list is very flexible. The scope creep phenomenon is only one example of that flexibility. Requirements are added to the list because, when looking at the details, we find: • Cases we didn’t think about. • New possible situations in which the existing requirement could be used. • Performance aspects we had not considered. • Requirements that have a direct impact on how other requirements can be implemented, and therefore expand the scope for those other requirements. The list goes on. As we know more about the project, the users, the technology, etc., we will find information that we could not have considered when the project started. That information will need to be reflected in the work to be done, the requirements list, in the form of additions to that list. What I propose is a similar approach to the management of Features and User Stories, but with the opposite goal. I propose that, as we know more about the project, a Feature or a User Story, we question the need for that work, and if possible remove that work. When we understand more about the project or the problem we are trying to solve we can question if certain Features are needed. For example, when implementing an IT ticketing system we may have a Feature that calls for the users to log-in and manage their list of open tickets so that they can review what IT has done for them. Alternatively we can have the list of the last 10 tickets in each email that we send to the users of the system, therefore removing the need to have the user-facing web-site. By removing the web-site page for the “open tickets” Feature we will no longer have to implement other Features, such as user creation, user authentication, password renewal, etc. Here’s a way to visualize the project in its different dimensions:
Flexible Requirements Management is inspired by a technique that Jeff Patton popularized, called Story Mapping. Story Mapping is used at the start of a project to envision the product as a whole and decide what should be released in each of the product releases. Flexible Requirements Management is the application of the story map concept to the day-to-day scope management of a project. For more on Story Mapping: http://jpattonassociates.com/the-new- backlog/ 43
105
Carmen needs to start considering all the possible dimensions of scope before she is able to realize that, even fixed scope projects, can have a lot of flexibility in the list of requirements, if that list is expressed as a two dimensional matrix of Features and User Stories. “As you describe the scope of your project in the form of a matrix, instead of a list you are able to see possible options for reducing scope much more clearly than if you only consider the list of Features.” Julia continued. “Oh, I see. You mean that instead of reducing scope by removing Features, I can also reduce scope by reducing the User Stories associated with each Feature.” “Correct.” Julia responded. “OK, but I don’t have that list of User Stories, so I can’t do that at the moment. And it would take a great deal of work to go and list all the User Stories for each Feature,” Carmen was still not convinced. “Don’t worry about the User Stories for now. Your first step should be to look at the list of Features and find Features that you can remove from the project. Once you’ve done that you review the list again to check if, by having removed those Features, there are some Features that are no longer needed. For example, if you remove a Feature that uses a particular database, you may not need to support that database anymore, which would probably remove related work in other Features or even some Features related to administrating that database.” “Oh, I see. You mean that I should first try to list and remove the Features that require a large amount of work or possibly impact indirectly other Features if they are implemented.” “Correct,” responded Julia. “OK, I get that. But, even if I do remove several Features the fact is that I would need to reduce 50% to 80% of the Features. The client is certainly not going to agree to that,” Carmen worried.
106 “When we start discussing scope reduction we never have an easy conversation ahead of us. However, because you started very early, the client will be able to make decisions that may have a significant impact on the list of Features. You have to continue that discussion and find the right Features to remove. It will not be easy, but the alternative is certain failure. And no one, not even the client, wants that.” Julia assured Carmen. “You’ve taken the hardest step in any project. You’ve started the conversation with your customer. Now it is time to continue that conversation.” “OK, I’ll have to give it a try. But even if I remove some Features from the list, I will not have enough to complete the project on time,” Carmen expressed her concern. “That is a possibility, but before you get to that point give the Features a good scrubbing. You may be surprised with what you find. And when you find that Features alone will not be able to impact enough your project then it is time to take the scope scrubbing to the detailed User Story level,” Julia commented. “Apologies. I need to interrupt you. Julia, the session is about to start,” said Herman as he signaled Julia to enter the room. “Julia, can I contact you later?” “Sure, it would be a pleasure to help you Carmen. Good luck and talk soon.” Julia headed towards the room where the evening’s presentation was about to start. Carmen was still not comfortable with the situation, but at least she knew what to do next. She would have a discussion with Travis the next day and use what she had just learned to remove, not only the Features Travis had been able to remove, but also Features that may have been there to support the Features that could be removed. Carmen was sure that it would not be enough, but she had to give it a try. She might be surprised, as Julia pointed out. The next day at the office Herman tried to meet Carmen several times but was unable to find her. She was not in her room, did not go to lunch to the usual place. It was as if she had disappeared. “Carmen, what’s up? I’ve been the whole day trying to find you to discuss what you heard from Julia yesterday. Are you busy?” Herman asked, surprised to find her in the corridor. “I am busy, but I’d also like to review with you what I learned yesterday, but we can’t do it here in the office. Let’s meet later. I’ll explain why we can’t discuss here.” Carmen added while looking to see that her boss was not around. “I’ll meet Travis from the Big Fish client today. How about meeting near their office at 5pm?” “OK, meet you there. But tell me, why is this secrecy about us meeting necessary?” Carmen felt ashamed as she confessed “Well, my boss told me about his history with you, and how he thinks that the #NoEstimates ideas are crazy and that I should not mention #NoEstimates to the customer.” “Ah! Ah! Well, he is right about one thing: you should not mention it to your customer. It is our responsibility as professional and competent Project Managers to deliver the projects on time and under budget. #NoEstimates is our secret weapon to achieve that goal. They will be happy when you provide transparency they’ve never seen, and the project on time and under-budget. Don’t worry about the label. Just be transparent and accountable to your client. I have a feeling your boss won’t mind you surpassing your client’s expectations!” Herman winked, and turned away. “He is right!” Carmen realized. “I will focus on delivering this project on time and providing more transparency and accountability to the client, and I even know how to do that now!” Carmen drove up to Travis’ office to discuss the project.
107 “Travis, hi! Thank you for meeting me on such short notice. As you know we have our next progress review with Mr. McNeal in 2 weeks. I need to show an updated progress report based on what we discuss today,” Carmen started. “Sure. I know that. I did some work since we spoke yesterday. Here’s a list of the 5 Features we can remove from the scope of the project. I tried, and tried to get a commitment to more Features, but that was not possible. This is the best I could do since yesterday. We may be able to remove 1 or 2 more over the next weeks, but for now this is the best we can do.” Travis announced while passing a paper to Carmen with the list. “Thank you Travis. I can work with this. I’ll have to review the implications of removing these Features on the remaining list of Features. Can I come back to you later with questions about these?” “Sure, let me know if I can help you in any way. But as I said, these are the Features we can remove now.” “Thank you. Talk later,” said Carmen as she exited the room. She felt a bit more confidence in the process since she had that conversation with Julia, but she was not yet fully comfortable with the situation. She knew those Features would not be enough to bring the project end-date back to the original 12-month time frame. And now she was responsible for the delivery, as her boss had clearly reminded her. The stakes were high. She needed to act. The meeting with Herman later that day started with a charged atmosphere. “I just can’t see how I will be able to pull it off, Herman.” “Don’t worry about the project release for now. Let’s work with what we have right now. We have a concrete scope reduction of 5 Features. Where does that leave us in terms of release date?” Herman tried to cheer Carmen and focus her on the information she already had at her disposal. “Let’s review your release forecast, do you have that?” “Yes, here it is,” Carmen pulled out the graph. “The previous forecast as well as the one I created earlier today, that already accounts for the Features we’ve just removed.”
108
Figure 13 - Current forecast (overlaid on the original forecast), already taking into account the Features removed by Travis
“Great. Do you see any Features in the backlog that would be unnecessary now that you’ve removed those other five Features?” Asked Herman. “Hmmm, hard to say at this point. I supposed I could bring this back to our team and collect a few more ideas on what Features we could remove.” Carmen was unsure that this was the right course of action, but she wanted to sound more positive. “Then do that. You may find some Features that can be removed now that were not possible to remove before. Then there’s the next level, we have to analyze the next level.” Herman added cryptically. “What do you mean by next level?” “What I mean is: at first you can manage the scope by removing Features. Once you are done with removing Features there’s still a lot of scope that can be removed when you look at the stories under those Features. There are many ways in which a Feature can be delivered. The stories under a Feature represent one way to do it, but you can find other ways by thinking about the functionality from your ideal customer44 perspective,” Herman explained. “What do you mean by ideal customer? Is that a new concept?” Carmen asked, puzzled. “No, it is not a new concept, but it links back to the vision of your product. A product exists to serve several types of customers, but it always has a specific customer type without which the product would not even exist. That is your ideal customer. When you think about the product from your ideal customer’s perspective, you will have a clearer focus and will be able to decide what is indeed needed, and what 44 In this context ideal customer is a term used to designate the target customer of the product or service being developed. This should be as specific as possible, and not generic terms like consumer or business owner. Examples: a consumer that has purchased from our shop before;; a small family restaurant owner.
109 could be removed because the ideal customer can use the product without that particular functionality.” Herman looked at Carmen waiting for confirmation that she had understood. “OK, let me see if I understood this right. What you are saying is that in a particular Feature there are stories that include functionality that the ideal customer needs, and other functionality that the ideal customer either does not need or can live without, right?” “Right,” Herman smiled, “this is what we call flexible requirements management. We have different levels of abstraction at which we can manage the scope of the project. Typically projects tend to balloon in scope, because we discover functionality at lower levels of abstraction that we consider ‘important’, and just add to the backlog. However, we can use the same approach to remove items from the backlog. Think of it like negative scope creep.” “I see… That’s a good insight. But won’t that require a lot of work?” “Yes, and constantly. But when your other option is to miss the delivery date, I’m sure you can see why it is worth it,” Herman commented. Carmen sighed and looked at Herman. “That means one more long night for me…” Carmen said. They parted and Carmen went to work on the backlog to find the stories that could be removed from the ideal customer’s point of view.
Creating Options by Slicing Features Each Feature (or story) in a product backlog contains many undiscovered options. By taking Features as they are without slicing them into thin slices of functionality we implicitly commit to an implementation strategy. However, when we slice Features we create options that allow us to pro-actively manage the scope of a project. Let’s return to the IT Support Ticketing System project we discussed before. A Feature like the one below will not allow us to manage the scope actively. • As an employee, I want to be able to submit issues to IT, so that I can fix a particular problem that prevents me from working. The Feature above is what I would call a “binary” Feature. Either the employee is able to submit an issue to IT or not. This simple Feature can have large implications in terms of the amount of work required to implement it. Specifically the chosen “input” solution (how the issue tickets are submitted) can make the difference between a simple and very complex and long-winded implementation. Taking the Feature above and breaking it down into several smaller Features or stories will allow us to make decisions regarding the implementation order, or delaying certain parts of the implementation. Let’s look at an example: • As an employee I want to be able to submit an IT issue to the IT department so that I can have a fix for a problem that prevents me from working • As an IT helpdesk employee, I want to have a queue of issues to handle, so that I know what items I should be working on at any given time.
110 By slicing the original Feature in this particular way we unpacked the functionality under the term “submit issues” in the original Feature into two different Features: send submission (replaces simple submit above) and Queue of issues (replaces the receiving end of the submission process). We’ve potentially reduced the scope of the initial Feature (for example no need to have a system to enter IT tickets, just use email as the submission tool), and we’ve given ourselves the option to implement a solution based on standard tools. The two Features we created allow for a solution based on email and a spreadsheet program with shared editing. For example, we could use Google Docs to manage this queue and get started today! These two stories could still be implemented with a full-fledged IT issue tracking system, but that is an option and not a mandatory outcome of the initial Feature. Slicing Features into separate functional parts helps us actively manage the scope by creating different implementation options 45that are often implicit and non-negotiable when we have larger Features in the backlog.
How to Communicate Progress? Carmen had worked hard all night, but the picture had not changed. Carmen was able to remove one more Feature, and split another 12 Features in search of ways to reduce the scope. Carmen began: “Herman, thanks for taking my call this early. I was up all night. I was able to find one more Feature to remove, and split another 12 Features, but now my list of Features - even with the five I removed this week - is up to 93. It is as if this exercise created even more work instead of reducing it.” “This is part of the process,” said Herman trying to reassure Carmen. “When you split the Features it is natural that the number of Features grows. But that does not mean that you increased the amount of work. It only means that you’ve found work in the list of Features that was already there, but you were not aware of before. This exercise has helped you better understand the backlog. That’s why it feels overwhelming.” “Sure, I understand that, but I need to start removing Features and I don’t see where to start. There’s just too many Features for me to review and classify.” Carmen doubted the process. “You’ve only completed the first part of the work. The next step is to review the new Features with your team. They’ll have ideas on how to further slice those Features and suggestions as to how many of those you could avoid with different implementation strategies,” Herman continued. “I know this is asking a lot, Herman. But can you help me out with hosting a meeting to do just that? I’m tired and don’t feel confident enough to help the team see through these Features.” “Sure Carmen, let’s meet at the office.” “Hmmm, it is better if we meet in the meeting room floor to avoid indiscrete looks. I’ll take the team there. Talk soon!” – Carmen hung up and felt a bit better after having obtained Herman’s cooperation. She was not yet completely sure that his ideas would work. But now she was committed to trying his ideas in practice. She felt the alternative of going back to her old approach to project management was no longer an option. For more on options thinking, and the work that inspired this approach I recommend the work by Chris Matts and Olav Maassen and their book: Commitment http://commitment-thebook.com/
45
111 It is only when we start to actively manage the options we have (slicing the work into INVEST stories) that we truly gain control of the work we must complete. Finding the next most important story to develop is the core of my #NoEstimates approach. Slicing the stories and prioritizing them regularly is the process. But there is more to that. How do we communicate the progress to the customer, especially in critical projects? How can we help customers make decisions regarding which work to keep and which work to delay or drop? That’s the next step for Carmen. The pressure is increasing and the stakes are high.
112
CHAPTER 7
GAIN THE CUSTOMERS TRUST WITH ROLLING WAVE FORECASTING
C
armen was re-arranging her papers repeatedly as she waited for the team to come to the meeting room. She had prepared the room for the workshop with flipcharts on the wall, the list of Features on one side and the slices of those Features underneath. She wanted to know if her effort to slice the Features was understood and accepted by the team. When everybody was in, she started the meeting.
“Thank you all for coming at such short notice. As you know we have a very challenging project ahead of us. I’ve been focusing on how we could keep this project on track both from the scope and time perspective, but also so that we don’t have to work over-time for the next 9 and a half months. No one would like that, least of all me.” She felt her team’s attention and a huge responsibility at the same time. “I reviewed the backlog in the last few days, and as you know, concluded that we can’t possibly make the release date in 9 and a half months with the current amount of work. We have two options, increase our throughput of Features per iteration, or we can remove content from the backlog.” “Increase the throughput? Are you serious Carmen? I’ve been working over-time for a week to get some progress visible to the customer in our next progress report. I can’t possibly work any harder,” Albert was not amused. “I understand Albert, and I thank you for your efforts. Without your and everybody else’s extra contribution we probably would be in big trouble right now. I understand that. That’s why I wanted to focus this meeting on creating options for us. I would like to review the backlog with you and list possible Features we could drop based on what was dropped already, and slice the remaining Features to see if we can find functionality that we don’t need to deliver for the first release. I’m not asking for miracles here. I know what can be done. Now I’d like to focus on what we can avoid doing, in order to meet our deadline.” After the introduction, several groups were formed. One of the groups reviewed the Feature slices that Carmen had created the night before, and the other groups focused on trying to unpack the remaining Features into slices that could be prioritized for later or dropped altogether. It was an intense workshop. The atmosphere was charged. People asked themselves if there was a practical, and realistic solution to the conundrum they were in. “Thank you all for your help with this process,” said Carmen as she prepared to close the workshop. “We have learned a lot about the project in this workshop and, not surprisingly, we were able to remove some work that was ‘hiding’ inside the big monolithic Features that we had in the backlog. Although we are no better than we were a week ago (we now have 73 Features in the backlog, compared to 64 a week ago) the fact is that we have a good idea of what we can remove further from the backlog and may have impacted our throughput by reducing the scope of the current Feature set. This last comment needs to be validated in the following weeks, but now I have a good idea of what I can suggest to the client can be removed further. Thank you all.”
113 Carmen was happy with the outcome of the workshop, but she knew there was a long and hard road ahead to convince the client about what could still be removed and to show concrete, and constant progress. The first progress review was only one week away. Now it was time to let the team focus on the work they had at hand and prepare the meeting with the client.
The Never-Ending Pool of Ideas What Carmen and her team just went through is very common in software projects. Once we start looking into the details of a set of requirements (Features or user stories) we always find details we had not thought about. This is normal, and expected in every software project, especially in those where planning starts at the top and only slowly trickles down to the team level. In software and hardware (aka embedded software) projects it is also natural that we discover certain quirks in how the hardware works only when the software system has grown enough to uncover those unexpected behaviors. That phenomenon leads to more work needing to be done on the software side for the simple reason that hardware is much harder to change. Scope creep is the natural state of software projects, it feels like the pool of ideas grows with every day that passes, and the work to be done grows with it. That is why when we apply #NoEstimates we focus on managing the scope from day zero. In order to successfully manage scope from day one, we need to have a tool that shows progress visually every day, or at least every week. We can’t wait for a specific milestone later in the project to find out how much work we need to either remove or delay. In software projects, the work to be done grows every day, and our ability to see that growth also needs to be ensured every day. A common approach to creating that visibility is to use the technique Carmen used: slice your Features and user stories so that you can review progress on a daily or at least weekly basis. In practice this means that every week several stories should be completed to allow you to assess progress. And every few weeks (every month or so) several Features should be completed. You should involve the whole development team in the slicing of Features because they will have insights into the components of the work that can be made independent, and how to validate each slice separately. Validating each slice from the value and quality perspective is essential for us to assess progress. Work waiting to be validated from value and quality perspective is for software development what inventory is for manufacturing: a liability. You will have to pay dearly for that work later on, unless you validate that work immediately. How do you visualize progress when you don’t even know all the possible dependencies that will emerge later on? That’s a question that is addressed by the progress reporting solution described here.
Reporting Progress with NoEstimates The meeting with the client, Mr. McNeal, was about to start. Expectations were high. The day before Carmen and her boss had a heated debate about how to present the progress of the team so far. Carmen’s boss was of the opinion that they should report progress based on the initial count of Features, before the “scope creep” that Carmen had uncovered. Carmen was adamant; she wanted to show the situation as she saw it. The tension was high.
114 Carmen was prepared. She started: “Mr. McNeal, unfortunately, and although we had good progress since our last meeting two weeks ago, we can’t say that we are closer to the original estimate now than we were then.” “Can you explain what you mean Carmen?” Mr. McNeal did not sound as angry as Carmen had expected after her conversation with her boss. “Sure. In the last progress review we reported that we had started, but not finalized the highest priority Feature.” “Remind me again Carmen, what is a Feature. Is that what you call requirements these days?” Mr. McNeal interrupted. “No sir. A Feature is something you can show to the users of the system and they understand it from the point of view of their use of the system. Unlike a requirement, a Feature is a self-contained, testable piece of functionality that can be delivered independently from the other Features in our list,” Carmen explained. “Oh, I see. That means I could actually deliver some Features to production before we have all the Features completed?” “Yes, sir. That is the idea. To be able to deliver each Feature independently to production and validate that it fulfills the needs for use. Once the Feature is tested and the users give feedback, we consider the Feature validated,” Carmen continued. “But wait, you could deliver this feature to production within 3 months, couldn't you?” – asked Mr. McNeal with a sudden interest. Carmen was surprised by that comment and thought: “Does this mean that Mr. McNeal is interested in delivering early? He never expressed so much interest in the content of the project during our previous meetings”. “Correct!” Confirmed Carmen, trying hard not to give a hint of her surprise. “You are saying that you could – if I asked you – deliver to production before the final release date, right?” “Correct. However, I must also say that it requires some readiness on your side to be able to do that. We can test that the functionality works as expected, but your team will need to confirm that it is the necessary functionality or deliver back to us the list of changes for that Feature.” Carmen was unsure if she was speaking too fast. She was excited about the idea of incremental deliveries. Would Mr. McNeal buy that idea? “Sure, sure. Of course they can do that. Show me the list of Features please. I want to check something.” “Here you go, sir.” Carmen said as she handed over the list of Features that had been created after her workshop with the team. Mr. McNeal started to look attentively through the list. He seemed to be reading each Feature. Once in a while he stopped and asked a few questions about one Feature and said “OK, that’s not the one”. Everybody was puzzled. First it was a surprise that Mr. McNeal, who usually did not interact much with the development team was paying so much attention to a simple list of Features. Second, nobody expected that he would read the whole list of Features in a progress meeting. Everybody expected him to be tough and demanding, and requiring over-time to be paid by the vendor to meet a deadline that had been agreed in the bidding stages of the project. The next ten minutes felt like an eternity. But finally Mr. McNeal raised his eyes from the list, looked at Carmen and asked: “When is this Feature going to be delivered?”
115 Carmen looked at the Feature that Mr. McNeal was pointing to and said: “I can’t be sure Mr. McNeal. With the current rate of progress it is unlikely that we will have that Feature ready in the next two weeks, but I can get back to you with an estimation later today or tomorrow if you like.” “I would really like to know when this Feature will be ready, so please hurry up your estimation meetings and let me know by the end of today when you will be able to deliver that Feature.” Mr. McNeal was back to his demanding self. “We will try.” Carmen’s boss interjected with a smile. “Try as you may, I want to have an answer today. Now, if you will excuse me I have to run. Carmen, great work on the use of Features, this is the first time I see any project using this approach, and I must say I like it. Now please let me know when that Feature will be delivered.” Mr. McNeal thanked all in the room and left. It was as if a huge pressure cooker had just been opened. The room suddenly felt serene and calm again. The fear was gone, and Carmen knew what to do next. A few hours later in a restaurant nearby, Herman and Carmen were debating heatedly about how to solve the problem of answering Mr. McNeal’s question: when will this particular Feature be delivered? “But Herman, we really need to estimate every Feature in the backlog. Mr. McNeal wants to know when this Feature will be delivered, but next week he will ask about another Feature. If I don’t have a Gantt46 chart with the Features and assignments I will not know when the Feature is ready,” Carmen insisted. “Carmen, let’s look at the data you have. You have been able to deliver 2 Features to your validation environment in 3 weeks. This Feature that Mr. McNeal wants is currently the tenth Feature from the top, this isn’t that hard. If you complete between 0,6 and 1 Feature per week on average, it will take 10 to 16 weeks to deliver that Feature. It is that simple. Trust the data.” Herman tried to convince Carmen. “Sure, but that is a rate. Not a specific work sequence. I can’t be sure that this Feature is number 10 in the list if the earlier Features can grow or shrink between now and when we start that Feature.” “Correct, but you will have a good indication of the delivery window. You will also know when the window for delivery changes, and you can react to that! Be it with reprioritization or removing content from Features that are earlier in the list,” Herman continued. “But what if we make a commitment to Mr. McNeal and we are late? He seems to be very interested in that functionality. Maybe we should move it up on the list?” Carmen was unsure “Whether you need to move it up the list or not you will know as soon as you report the rolling wave forecast with the window for that Feature.” Herman commented. “Rolling what? What did you say?” Carmen asked. “I said that Mr. McNeal will let you know if you need to reprioritize your list of Features once you tell him when the Feature is forecasted to be ready.” “No, what did you say about rolling wave forecast?” Carmen insisted. “I said that when you present the rolling wave forecast to Mr. McNeal he will let you know if he is happy with the delivery window for that Feature.” “What do you mean by delivery window?” “OK, I’ll backtrack bit. First, you should have a rolling wave forecast for your project. Say you have windows of two weeks (because that is your iteration length) and total project duration of 12 months. You 46 http://en.wikipedia.org/wiki/Gantt_chart A commonly used graphical representation of work and dependencies between different work packages in a project.
116 should show your project as a sliding window over the 12-month timeline. Like if you were projecting two weeks in detail and have a rough indication of the rest of the work that is possible in 12 months.” “But the project is not 12 months now. It was only at the start, we only have 9,5 months now.” Carmen was confused. “Sure, you can also have a total timeline of 9,5 months, but if you do, you will not show clearly what does not fit anymore in the project. Let me draw you an example.” - Herman picked up a piece of paper and started drawing.
“See this window here?” Herman asked pointing to the grey rectangle in the drawing he was creating. “This is the work that is likely to be delivered in the next two weeks, the rest is shown in priority order. And the work that goes beyond the planned release date for the project is then highlighted in red, to show that it is likely it will not be completed within that time frame.” “OK, I got it. So I show a window of two weeks to list the Features that are likely to be delivered in the next two weeks. But the Feature Mr. McNeal was interested in will not be ready in two weeks. How do I show that to him? Should I have multiple two week windows on the graph?” Carmen asked. “You could, but you could also have bigger windows. For example, you could have a two week window in green to show that it has a higher certainty, then a 1 month window in yellow, to show less certainty and finally a grey 3 month window. That way you give Mr. McNeal an indication of what Features will be delivered in different timeframes.” Herman paused, and then continued. “Of course, this is just me speculating. Maybe Mr. McNeal is interested in different time windows of 3 and 6 months. You should ask.” “OK, I got it. I have to go now and send that email to Mr. McNeal. Thank you again Herman for your help. I was about to call an overnight meeting with the team to build a Gantt chart with tasks, dependencies and resource balancing. But what you say makes sense and is completely in line with the way we are reporting progress right now. I have to try that. I will let you know how Mr. McNeal reacts. Wish me luck!” Carmen said as she was leaving. “Let me know what he says!” – Herman said while waving goodbye.
117 The rolling wave forecast that Carmen will prepare will give her client: • Clear and verifiable progress information. • Actionable information. The same information that helps a project team make decisions, will also help the customer prioritize and decide on the scope of the project. The rolling wave forecast further helps you see what is possible to deliver in multiple time frames. Given that each Feature will have a different cost-of-delay47, this information is critical to decide which Features to keep in the backlog and which to delay or remove.
Rolling Wave Forecasting Allows You to Adapt Your Plans, Constantly Carmen needed to present a possible date of delivery to Mr. McNeal, and she was planning to obtain that date, the same way she had always done it. Through a detailed plan (Gantt chart) where she could review assumptions, planning details such as dependencies, risks, etc. But was that what Mr. McNeal wanted? By creating a detailed plan, Carmen was about to commit the work of the team for the next few weeks. Once that commitment was made (and the implicit promise to Mr. McNeal), the team would no longer have the option to adapt to new information. All the assumptions, sequence of work, dependency handling, risks and errors would be locked in. She would have removed all flexibility from her project. In the past, Carmen would have added buffers;; created contingency plans and worked hard at managing expectations. But all that is unnecessary when we, instead of giving a commitment, give a forecast. At the heart of the rolling wave forecast is the acceptance of uncertainty. This, in turn, allows us to keep our options open. To be flexible and able to respond to change – just like the Agile Manifesto says. In a rolling wave forecast we create scenarios about the future. We speculate about how the events will unfold and reflect those analyses on a forecast that shows a range of possible outcomes. In this particular case, Carmen will assume that the throughput of the project will be within a range and therefore will give not one number, but an interval in time in which the Feature that Mr. McNeal wants is likely to be delivered. From this information Mr. McNeal can then: • Accept the forecast and follow-up the delivery by getting an updated forecast. • Refuse the forecast and ask for changes in prioritization of work so that the Feature he wants can be delivered earlier. Independently of what decision Mr. McNeal will make, the cost to produce the forecast is very low, and the information it provides will be enough for him to make a decision. Following the 47 http://en.wikipedia.org/wiki/Cost_of_delay Note that cost of delay is a rough measure of how much value is lost by delaying the delivery of some functionality. Each type of work will have a different cost of delay curve. For example a software program needed for the Football World Cup will have a very steep cost of delay curve around the day that software needs to go into use because the Football World Cup will start at the right time, even if the software is not ready. Other type of software will have a different cost of delay curve.
118 decision, Carmen will be able to adapt the plan by re-arranging the order of implementation of the Features (they are independent) to meet the need or expectation from the client. If Mr. McNeal decides that a certain Feature should be delivered earlier than the forecast suggests, adapting the plan to that decision is a simple process of moving the Feature up in the priority order. The team is then notified and work continues. Contrast this with a Gantt chart. A detailed, and linear planning tool like a Gantt chart requires you to update the order of work for a detailed plan, and that typically involves sequencing, detailing, designing the work and then assigning it. Your goal should be to make changes to the plans easier. Why? The simpler the planning process, the faster and more easily your projects will be able to accommodate the inevitable changes. A key Feature of choosing a low overhead, yet accurate, forecasting mechanism for your project is that you can update the plan at all times. In the case of the Big Fish project, and thanks to the measure of throughput that Carmen uses to forecast the project, she can update the project progress information (rolling wave forecast) every week, because every week she has new information that she can add to the report. In turn, this provides actionable information for the project leadership to make concrete decisions about what Features or stories to move higher or lower in the priority order. This forecasting mechanism allows the project team to know when they are likely to deliver a certain Feature and therefore also coordinate work with external project contributors. This is necessary when the project team depends on external teams. For example: the project team may need to coordinate their work with a marketing team that implements the marketing campaign, or a field testing team that works with final users to collect feedback for a large rollout, etc. Finally, the rolling wave forecast also provides us with a varying scale of precision whereby the forecast is relatively more precise in the short term, and loses precision as we look into the future. Giving a measure of certainty that is different for different time scales. This is achieved by picturing the forecast for different values of the progress metric. Carmen uses her throughput range to give a widening range of outcomes over time as seen below.
119
Presenting The Rolling Wave Forecast to a Client Carmen was nervous to read Mr. McNeal’s answer to her email. She had delivered the forecast she had created with Herman based on the throughput of the team. She remembered the trembling fingers with which she wrote “10 to 16 weeks from now”. The day started with a short conversation with her boss. Carmen was surprised by how silent and absent he had seemed, but now her mind was on her e-mail client. She opened the program, typed her password and waited anxiously until the emails were downloaded. Usually this happened in a few seconds, but today she felt the process took ages. She tried to guess Mr. McNeal's answer. Will he be furious? Angry? Get her fired? Carmen opened the email message of Mr. McNeal. It read: “Subject: RE: forecast for project Big Fish Dear Carmen, Thank you for the information you sent me yesterday. It was most useful. Thanks to your detailed forecast and report on the possible outcomes for the next few weeks in the project I have been able to reprioritize the Feature we discussed yesterday. Please call my secretary and arrange a meeting for today. I’d like to discuss the project’s next steps with you. Regards.”
120 Carmen was at first happy. After all there was no anger in the email. However, the last phrase made her very anxious. Why was Mr. McNeal asking for a meeting now? What was going on? She called Mr. McNeal’s secretary and scheduled a meeting for later that day. As she entered Mr. McNeal’s office she felt her legs shake. She had a gut feeling that this was an important meeting. She sat down in the meeting room and waited for Mr. McNeal as she was instructed. She waited for a few minutes, which felt like an eternity. She tried drinking a glass of water, but her hand would not accept the order the brain had sent. Carmen decided that she was too nervous to drink water and sat on her hands to keep them from shaking. A few minutes later, Mr. McNeal entered the room. But he was not alone. “Hi Carmen, thank you for coming here on such short notice.” Mr. McNeal said. “Hello, sir. I understand. What is the matter…” Carmen stopped as she saw the person entering the room behind Mr. McNeal was her boss. He seemed serious. “Hello sir, I did not expect to see you here,” Carmen said while looking at her boss. “I wanted to have both of you here for this meeting,“ Mr. McNeal explained. “The reason is simple. I’ve made the decision that from now on the Big Fish project will be handled internally in my department.” Fear struck Carmen. Her fear of being fired was coming true. She thought: “My god! They are kicking us out of the project. Will my boss fire me now? Oh no...” “I want to keep a close watch on this project,” Mr. McNeal continued, “it is a very important project for me and for the Prime Minister. We can’t accept anything less than an on-time, high quality release. As you know this system is scheduled to go live just before the election. Any failure to deliver this project can cost us the election and we would not want that.” “I guess our company is out of the project, then.” Carmen was sure that this was the golden handshake moment. “I want to guarantee that this project is a success and that is why I’ve asked your company and Joseph here to move you and your team to our premises here, in our building. Effective Monday you will work here and report directly to me.” Mr. McNeal announced. “I’m very impressed with the clarity and transparency in this project, and I’m aware that you, Carmen, created that. You have been able to deliver more visibility and clarity regarding this project in 2 months than any of our other projects ever delivered. I’m impressed and I want you to help me bring that same kind of transparency to other projects here. Joseph has graciously agreed to let you and your team work directly with us here at our offices until further notice.” After a pause, Carmen said: “I don’t know what to say sir. I’m glad that you are happy with the progress the team has shown, but the visibility was created thanks to a colleague of ours that has been helping me and without whom I would not have been able to create this level of transparency.” “Bring him with you as well! We start on Monday! This is the most important project you will ever work on. I want the best people in charge.” “But Mr. McNeal,” Carmen’s boss tried to interrupt. “No buts Joseph, bring that fellow with Carmen and the team.” Mr. McNeal was not taking no for an answer. “Very well,” Carmen’s boss acquiesced. “We will bring Herman in as well.” Carmen was smiling inside. Her hands did not shake anymore and she felt confident.
121 “And Carmen,” Mr. McNeal continued. “Next week we have a presentation about this project to the council of ministers. Let’s get ready for that. You are in the big leagues now.”
THE END
122
ACKNOWLEDGEMENTS A project like this is never easy, and could not succeed without help and support from many people. So here is my heart-felt thank you to all, including those I have unintentionally left out in this acknowledgement. You made this project possible! To my family, who was so patient with me through the process of writing this book. A special thanks to my partners at Oikosofy who’ve helped and supported me through the difficult process that is writing a book, especially a controversial one as this. Luis Gonçalves, aka the web-master, who helped me create the web-site and product pages for this book and all the additional material that is available with the book. Sven Schnee, who helped the #NoEstimates movement progress with his blog post on the topic. Veronika Gonçalves, who helped me get the first book page up and running and was patient with me when I could not answer her questions because I was immersed in the writing of this book. Fernando our investor who made Oikosofy possible! Woody Zuill, a dear friend whom I met in Skype first, and then later in several conferences. We organized workshops together and brought attention on twitter to a very important topic in our industry. Ángel Medinilla, the amazing illustrator for this book and the person who helped me get started with the book. Neil Killick, Henri Karhatsu, Chris Chapman, Sven Ditz, Diego Cenzano, Clinton Keith, Markus Hammarberg, a big, big thank you for being available and willing to contribute to this project with incredibly insightful video interviews that bring the whole idea of #NoEstimates to life from so many points of views. Tomas Rybing and Evan Leibourn, a very special thank you for the insightful essays that are now part of this project and will help countless people take these ideas into practices. All Beta Readers that invested their time and attention in making this project much better with their questions, insights and comments. This book would be much worse without your contribution. To the twitter friends I made during these years where #NoEstimates went from a crazy idea, to a wide-spread cry of dissatisfaction with the status quo in the software industry. You make me believe we can improve our industry!
123
124
ABOUT THE AUTHOR
Vasco wants to transform product development organizations into product business organizations. He does that by focusing the work of the product development teams on the end- to-end life-cycle of their products. From Concept to Cash and Back! Currently a Managing Partner at Oikosofy, Product Manager, Scrum Master, Project Manager, Director, Agile Coach are only some of the roles that I've taken in software development organizations. Having worked in the software industry since 1997, and Agile practitioner since 2004. I Vasco was one of the leaders and catalysts of Agile methods and Agile culture adoption at Avira, Nokia and F-Secure and other companies where he consults teams and management. Vasco is also the host of one of the most popular Scrum podcasts at: http://scrum-master- toolbox.com/ Follow that podcast for interviews with Scrum Masters from all over the world. You can read more at: http://softwaredevelopmenttoday.com/ You can join Vasco on twitter: @duarte_vasco
125
More of What Others are Saying about NoEstimates, The Book "This is a must read book to software managers. It is call to responsability to managers to not estimate but give actual data to clients. Following the #noestimates principle will make the life of people around software industry happier." – Enric Jaen "The debate surrounding the need, or not, to provide detailed estimates to clients is one that courts contention, argument and confusion. Undoubtedly these emotions will continue to prevail, but Vasco Duarte clearly and concisely reveals the virtues of an alternative approach to estimation." – Andy Deighton. Scrum Master “You may not be able to implement all aspects of the #NoEstimates approach but you will be able to take away insights that improve your current estimation approach, reduce waste and provide more valuable information to your stakeholders.” – Paul Seaman, Principal QA, SS&C Technologies “Many businesses perform estimations as a matter of routine. But this can be a time consuming activity, and doesn't always have a good return on investment. So it is wise to also consider the alternatives. This is the book to present that for you.” – Kevin O'Shaughnessy, senior web developer, and blogger at zombiecodekill.com “#NoEstimates is not just about estimates. It is an important step in the paradigm shift from a plan-driven to an empirical approach to software development.” – Georg Raeder, Lean Facilitator, EVRY, Norway. “#NoEstimates has been an interesting, if not divisive topic on Twitter. The “NoEstimates” movement aims to explore questions around the usefulness and applicability of estimation in software, in particular in an Agile context. #NoEstimates tries to challenge unexamined assumptions around a widely used practice in the software development business.” – Oluf Nissen, Scrum Master, HP “This book makes you wonder why you are still believing that an estimate is a fact instead of what really is: an opinion.” – Ernesto Cárdenas Cangahuala, DevOps & Cloud Consultan “Vasco's NoEstimates book makes a clear, thoughtful case for planning and delivery based on a sane and realistic view of software development instead of the traditional wishful thinking based methods.” – Derek Graham, Principal Developer “To question something that most people in our industry see as a necessity takes courage. The ideas presented in this book will hopefully give you the inspiration and courage to change our industry for the better. Nothing less.” – Jess Bring-Larsen, Senior Systems Engineer, Systematic “Stop wasting time in long discussions about how many days it’s going to take and start generating value for stakeholders using #NoEstimates, have your team love the method and your customers enjoying the delivery. Read this book full of great illustrations.” – Christian Delez, Agile project leader & cloud architect. “#NoEstimates explores some major deficiencies of estimates and a simple but effective alternative approach for managing expectations and building trust is introduced, taking into account the complex nature of software development. If you're struggling to accurately estimate your projects and keep your promises to customer, this book is for you!” – Yavor Nikolov, Software Developer & Agillist from Sofia, Bulgaria
126 “I wanted to rethink how we estimated projects at work, and #NoEstimates provided a well thought out alternative to death-by-hours that we did. You owe it to yourself to check it out.” – Carl Anderson, Application Developer, USA “I had the pleasure to be one of the beta readers for Vasco's new book on NoEstimates. I had decided I would read it with an open mind and anxiously awaited to read the first chapter. I have to confess I was hooked. This stuff was real, I could relate to the story about Carmen and the book hit so many dysfunctions I have experienced in the past. My understanding and my stand on #NoEstimates has changed; I am starting to get it. This book will be on top of my recommenced reading list going forward.” – Mikko Sorvari, Sr. Agile Consultant, USA “Excellent read, well articulated and clear. For the first time I can see how we might move closer to achieving #noestimates at a digital agency. This book places value and quality at the heart of everything.” – Matt Thornhill, Senior Digital PM “#NoEstimates book is precious reading for all those professionals interested in delivering real value to their customers rather than trying to predict the inevitable 'unknown unknows' in every software project. Put in other words, #NoEstimates is all about getting things done.” – Alessandro Ronchi, Owner at Webgriffe “#NoEstimates is a must have book for anyone interested in improving their delivery of value to customers using Agile practices. With a focus on priority, predictability and collaboration it fits any agile approach.” – Jon Eversett, Scrum Master / Agile Coach at Landmark Information Group “#NoEstimates began as a simple hashtag on twitter. It has generated hundreds of passionate discussions. The #NoEstimates book is a major contribution to the debate: the Pros and Cons will get a very clear overview of #NoEstimates in action.” – Nicolas Umiastowski, Agile Coach and Consultant, France