Yesterday, I imagined a dialogue between a customer consulting with an engineer/architect as it might be applied to constructing a building. Only I reversed the order of history, and wondered how it would be different if the science and art of building construction was as new as software engineering. Yesterday, we listened to the conversation between the customer and a traditional developer (of buildings). Today, we’ll listen to the conversation between a different customer and an agile developer.
The Agile Process applied to People Containers
Customer: “I’m getting married in three months, and I need you to put together a container where I can protect my wife and myself from the wolves and mountain lions. But first, I’ll have to get money from my dad, so I need to know how much this will cost.”
Agile Developer: “Well, we know that upfront designs are usually estimated poorly. I know about this one developer that was asked to build a people container, and he made a big upfront design—the old-school way—and when they finally delivered the container, that customer was really upset to find out that he’d bought a big hanging birdcage to put his family in! It was a total disaster. The customer had to get it lowered from the tree, and cover it with wood panels, put in vents, and so on. The original estimate was $10,000, and he wound up paying three times that, and not only that, but the project took twice as long as the original estimate of three months. So, the way I work is this: We’ll pick a period of time, let’s say about two weeks, and each period we’ll commit to completing something which is in line with your needs. Each period, you’ll get a clearer idea of what we’re building, and you can refine it until it’s exactly what you need.”
Customer: “What? Why can’t I just tell you what I want, and then you can go away and make it? You don’t really need me to help make it, right?”
Agile Developer: “Wrong. I totally need you to help make it. In fact, I will predict that if I do it that way you just suggested, you’ll get something that isn’t quite right, and then you’ll have to spend more money than you planned to fix it. Look, I’m not saying you need to do any of the actual construction. But every day, we’ll get together for a very, very short meeting so you can see how we’re doing and meeting our goals. Every two weeks, we’ll actually have a finished product. Now, naturally, the first couple of times we do this, the finished product won’t really be useful, the way the final product will, but it will definitely be a step in the right direction, because you’ll be there to help us understand what it is you really want.”
Customer: “That sounds great and all, except for one thing. I don’t know what I want yet. I just know what I want it to do.”
Agile Developer: “Perfect! That’s all we need from you. You tell us all the things you need it to do. Then we’ll prioritize, and make sure it takes care of the most important things first. When you think it’s finally doing everything you asked, then it’s done.”
Customer: “So it could go on for a really long time?”
Agile Developer: “That’s up to you.”
Customer: “But I said I need it before I get married in three months! How do I know it will be done before then?”
Agile Developer: “Because you are really the force driving what we do in each two-week cycle. You know your priorities better than we do, so you can make sure that each two-week’s goals will get us closer to your final goal, and since you know your schedule better than us, too, you can decide which goals to keep and which ones you can do without.”
Customer: “Yeah, that makes some sense. Only, how much is this going to cost?”
Agile Developer: “Again, that’s something you control. You should know how much value you need to get from this container."
Customer: “You mean, like how much this is worth to me? Well, see the problem is that it’s worth everything to me. It’s for my wife. But like I said, I’ll need to get the money from my dad. He’s an old-fashioned guy, and has spent his whole life in caves or up in trees. He thinks people containers are just really expensive problems waiting to happen, but we’re running out of room in the cave, so he’s agreed to let me do this. But he says I have to keep the cost down. All my friends tell me that agile developers are great at that.”
Agile Developer: “I see. So, then we have to stick with how much money you think you can get from your dad.”
Customer: “Uh… yeah, only I’m not sure how well he’ll take me saying ‘Dad, I need money, only I don’t know exactly what I’m going to get when it’s done.’ “
Agile Developer: “Well, look, you have a fixed deadline, right? And our average rate is about $1,000 per week. You want to finish just a little early, rather than late. So we can plan for ten weeks, five cycles of building. That’s $10,000.”
Customer: “That helps a little. But I still don’t know what I’ll get, other than that I’ll know what it will do, right? My dad is going to want to know I’m getting something more than a couple of those wooden boxes like they use for burying people.”
Agile Developer: “I can see you’re a little apprehensive about this. But rest assured, even by the first or second cycle, you’ll have a much clearer picture of what you’re getting than you could have right now, even if we tried our best to figure it out now.”
Epilogue
Near the beginning of this conversation, I suggested an ending to the story with the customer and the traditional developer. It wasn’t very flattering to the traditional developer, but the truth is that most traditional software projects are delivered over budget and late. See almost any of Steve McConnell’s works if you would like to see abundant research supporting that claim.
But what was the outcome of the agile developer? Bear in mind, both of these stories are totally fabricated from my imagination, but I believe I can predict a likely outcome.
Before beginning the project, the customer was asked to list his priorities for success. He came up with this list:
- Big enough for him and his wife
- Protection from predators like wolves and mountain lions.
- Insulation from the elements (rain, cold, sunburn, wind)
- Comfortable enough for sleep
- Could be expanded for kids
Iteration 1: The team decided that the “big enough” requirement was largely an architectural requirement, and not something they could actually build and deliver on its own. However, they could certainly start to deliver something that offered protection from predators. They agreed, after discussing the possibilities amongst themselves and the customer, that an obstacle like a very high wall or very deep ditch could not be built in time and would be prohibitively expensive. The suggestion was raised to create an alarm system instead which could wake the customer (if he was sleeping) with enough time to take action. The customer reluctantly agreed, since he couldn’t really afford what he wanted.
The team committed to a “continuously constructed” tactic. Rather than having large chunks of work in an “under construction” state, they planned to have an actual container by the end of the first iteration, and to keep it inhabitable every day. By the end of the first two weeks, the team had built a meter long section of bells hanging from trip wires, and had placed a large flat rock on the ground about 50 meters from the bells. The customer was able to stand on the rock and hear the bells, and judged that he could probably keep his sleep light enough to be awakened by the bells and take action. The customer was both a little perplexed and pleased when the team celebrated their success at creating an inhabitable container. It didn’t look much like a container to him.
The cost for this iteration was $3,000, 50% more than what was originally estimated, but that was because $1,000 went to securing the large area of land (10,000 square meters, or about 2.5 acres) where the container would be built. The team assured the customer that they were making great progress and that, in all likelihood, they would finish under budget and ahead of schedule.
Iteration 2: Part of the team continued working on the alarm wires and bells. They needed to build over 300 meters of wires to create a circle that was at least 50 meters from the center. They determined they were completing 10 meters a day, so they focused on working the part of the circle deemed most likely to encounter predators, and set the goal for this iteration at 100 meters (they were not working weekends!).
Meanwhile, the rest of the team focused on the container. Clearly, the rock would not work to insulate the customer from any elements, but it would work well to anchor the actual container. The team and the customer discussed ways to insulate a person from the elements. The rain was seen as the hardest and most important problem to solve. Several members of the team had experience working on water container projects, designed to catch and keep rainwater for later use. They knew the best way to create a large water container was to dig a large hold in the ground and line it with something waterproof. The best waterproof material created so far was concrete. Unfortunately, it would be too expensive and difficult to apply for this project. But the team felt that the same principle could be applied here. The plan was to create a large upside-down bowl, and cover it with a waterproof liner.
So the team, sticking with their “continuously constructed” plan, began building the frame of a large, upside-down bowl. The goal for this iteration was to have the general frame of the bowl complete. At the end of the two weeks, they had created a circle three meters wide of stripped saplings on the ground lashed together with rope, and three arcs of saplings tied onto the circle and joining at the top. The customer could now begin to see something that seemed a little like a people container, and was pleased.
The cost for this iteration was $2,500, or 25% more than what was originally estimated. $500 went to purchasing stripped saplings, because the team did not have time to cut and strip them themselves. So far, the customer was delighted that he chose an agile developer.
Iteration 3: The wires and bells team had built 100 meters of the alarm system. With a little over 200 meters to go, they predicted they would speed up their progress with experience and could complete it by the end of the next iteration, but only committed to completing 100 meters this iteration.
The container team set a goal of completing the upright arcs of saplings around the circle. They were still trying to decide which waterproof material to use. They’d considered tanned animal hides, large tree leaves, and woven corn husks. They settled on tree leaves as the most practical given the time and expense allotted. However, the largest tree leaves available were only a little over 1/4 meter large. The team realized that meant the arcs around the circle would have to be spaced about 1/4 meter apart. With nearly 10 meters around the edge of the circle, that came to 40 half arcs, or 20 full arcs.
Three full arcs had already been built, so seventeen more needed building. It was taking the team a full day to build each arc, and they still needed to start fastening the leaves to the arcs. So they cleverly decided to start attach each new arc within 1/4 meter of an existing arc. That would allow another member of the team to start attaching leaves to a pair of adjacent arcs sooner than if they had waited until all the arcs were in place. They committed to building nine arcs for this iteration, leaving the remaining eight for the next iteration.
Unfortunately, there were not enough people on the team to work simultaneously on the wires and bells, the arcs, and the leaves. And they still hadn’t tried to tackle the requirement for comfortable sleep. They couldn’t push out the schedule, so they decided to hire more people to fasten on the leaves. The new team was brought on board and shown what to do.
The cost for this iteration was $3,000. The unplanned $1,000 was used to bring in the additional workers to keep the project on schedule. Nevertheless, the customer was getting very excited. He could see the outline of his new container being formed. He could hear the alarm bells periodically tested. He started telling people what a great move it was to use the agile developer. He had to spend some time convincing his dad that it would be worth more than the $10,000 he’d originally agreed to, but because he could actually show some good results every two weeks, his dad agreed to another $5,000. After all, every day, he’d been able to walk inside this new container and imagine living in it in safety and comfort with his bride.
Iteration 4: The wires and bells team completed 105 meters during the last iteration, and felt they could continue to accelerate their pace for this iteration. So they set a goal of 110 meters, which would bring them to completion.
The container team had completed twelve arcs so far, and had planned to complete the remaining eight this iteration. However, as they began, the customer noticed a new requirement that he hadn’t noticed before. He needed a way to easily get into or out of the container. The agile developer took this problem in stride. It was exactly to address this sort of thing that agile development had been created. Everyone had known that the customer would probably get clearer about his requirements as he was able to more clearly see the solution every day.
So the team brainstormed, and came up with a few solutions. One was just to cut some arcs a little short of where they would come down to the circle, but nobody was sure they could properly fasten a beam that would hold them in place since they wouldn’t be fastened to the circle at the bottom. Another was to bend the arcs at one section so that they left an opening wide enough to walk through. A third suggestion was to dig a tunnel under the circle through which the customer could crawl into and out of the container; it was discarded as soon as someone pointed out that it would fill with water at the first rain. The best and cheapest option seemed to be leaving a gap around the outside by bending the arcs away from the opening.
A few big problems came up during this iteration. First, during one of their daily meetings, the team realized that the leaf-fastening team was going to have a problem. The arcs were parabolic, and fastened to a circle that was three meters wide. While this had created a serendipitous outcome of yielding a stable structure, it meant that the top of the structure was about four meters off the ground. The leaf-fasteners had been working from the base of the structure, and working up as high as they could get—about two meters. They would need to find a way to reach the higher parts of the arc.
Second, the wire and bells team were having another issue. Birds kept landing on the wires or the posts holding up the wires and ringing the bells. They’d been continuous testing the bells to make sure they kept working, but hadn’t foreseen the need to test against false alarms.
Third, just as the arc-fastening team was fastening the fourth of the last eight arcs, some things happened unexpectedly and suddenly. At the top of the structure, the arcs had been merely laid across each other at the center where they all crossed. They were too far off the ground to lash them together. Now, with sixteen saplings laying on top of each other, a few slipped sideways a little. With all the tension present in the bent saplings, and with the pulling apart of some of the arcs to make space for the opening, what had been a flat circle on the ground suddenly became a wobbly oval. Furthermore, the gap for the opening was folded in, and what had been planned to be a meter-wide opening was now about one-half meter wide.
The cost for this iteration was $2,000. Although no new unplanned costs came into play, the customer was a little alarmed to see that he wasn’t as close as he thought he was to the outcome he’d planned. It wasn’t making him feel much better that the agile developer seemed not at all upset by the setbacks. The agile developer reminded the customer that all projects encounter setbacks; what made agile better than traditional methods is that the customer and the agile team could more easily adapt and respond to these setbacks appropriately.
Iteration 5: With only a month to go before his wedding, the customer was getting nervous. The alarms bells were going off all the time, even when they shouldn’t, while the wires and bells team tried to figure out how to solve the false alarm problem. The top half of the container was still uncovered, and the only plausible way to cover it would be to roll the whole container onto its side, which presented an additional risk of bending the container even more than it was. And the container would probably never sit completely flat on the ground.
Iteration 6: The wires and bells team continually tried to make the case that they’d met their requirement, and that the new requirement to avoid false alarms would need new planning, more money, and probably a newer technology.
The leaf-fastening team came up with a clever way to fasten the leaves from the inside of the container by constructing a crude scaffold. They managed to complete their task, but everyone on the team noticed that the leaves were beginning to dry and would become brittle before long. While they would still keep out the sun, rain, and wind while brittle, they would clearly not last more than a few months. They said nothing, deciding to let the next team deal with the customer when he noticed that he would have a requirement for durability in the waterproofing.
The arc-building team, which was still the core team, worked long and hard (including weekends) to fasten lashings across the arcs inside the container. Eventually, the pulled the container back into more-or-less the shape it had been. The opening was covered with a tanned animal hide.
The customer was out of time. He realized had decided to postpone the requirement of a comfortable place to sleep. The lashings across the insides of the container made it difficult to walk around in, let alone lay down comfortably. When he presented the container to his bride, she was pleased, but not very impressed.
Iteration 8: The customer stopped the project. Although he could have stopped the project at iteration 6 and called it successful at meeting the schedule, he really was not happy with what he would have had to live with. He’d spent nearly $20,000 so far, and although it was technically true that the container fulfilled the requirements he’d set early in the project, he realized that he was still a long ways from getting what he’d dreamed of getting two months ago.
The agile developer maintained that the project had been successfully executed, and implored the customer not to give up too quickly. After all, they were still much further ahead than that other customer who’d hired the traditional developer and got a bird cage. They’d spent less, they’d done it in less time, and they were much closer to completing the solution that the customer really wanted.
The container did what it was supposed to. It protected them from predators by ringing bells when wolves or mountain lions brushed against the wires surrounding the container. It kept out the sun, the rain, the wind, and the cold. And it was possible to find a spot to lie down and get a comfortable night’s sleep on some animal furs and hay.
The customer was familiar with the basic problems. The leaves were starting to crack, and had to be replaced frequently. The alarm bells were routinely ignored; the customer and his new wife would take turns keeping watch at night instead. And the container was crisscrossed with lashings that had to be avoided and retightened periodically. Plus, it wobbled and rattled loudly when the wind blew even a little bit.
But it also had revealed many more problems that the customer would have to resolve some other day. For one thing, it was extremely dark inside, especially when the opening was covered. Fortunately, they thought of how flammable the leaves and saplings were before they tried to bring a fire inside to illuminate it. Even if they could have safely made a fire inside, there would be no place for the smoke to go.
After all this, the customer wished he’d known from the beginning that the container project really would cost him the $50,000 and six months that his brother had paid for his container. Even though he wouldn’t have been able to afford the $50,000, he would have felt better going to sleep in the cheap wooden body-burying boxes that would allow him to save his money for what he really wanted.