Professional Documents
Culture Documents
A collection of thoughts on Scrum and Agile processes from Ken Schwaber during 2003 and 2004.
Workload Management ...................................................................................................2 Managing Work ..............................................................................................................5 Managing the Process......................................................................................................7 Scaling Agile Processes Part 1......................................................................................9 Scaling Agile Processes Part II ...................................................................................11 Scaling Agile Processes Part III..................................................................................13 Scaling Agile Processes Part IV..................................................................................15 Scaling Agile Processes Part V...................................................................................17 Software Development A Science or an Art................................................................19 Capability Maturity Model (CMM) and Scrum..............................................................21 Estimates vs Actual .......................................................................................................24 Forming Cross Functional Teams ..................................................................................27 Cross-Functional Teams and Waterfall ..........................................................................29 Silver Bullets................................................................................................................. 31 Realizing Project Benefits Early ....................................................................................33 Spinmeisters and Professionals......................................................................................35 Only Eat When Hungry .................................................................................................37 Yowzah!!! .....................................................................................................................38 For Customers Only ......................................................................................................39 Nothings For Free ........................................................................................................41 Bidding Work................................................................................................................43 Disenfranchised.............................................................................................................45 New Year Predictions....................................................................................................47
Workload Management
Agile processes introduce the concept of workload management to systems development. Workload management involves controlling development of functionality and release dates in order to optimize the value to the organization of the system being developed. This is different from work management, in which the specific tasks involved in building a system are directed. Agile processes make workload management possible through iterative, incremental development. Development occurs in a series of short iterations, usually between two and four weeks in duration. An increment of functionality is ready by the end of every iteration. The term ready here means potentially shippable or able to be implemented. Ready means complete, including user documentation, and having been tested fully. Traditional development methodologies fully analyze and design a system before coding it. Testing usually follows the coding. It is not until the very end of the project that the system can be implemented. The opportunities for managing this workload to optimize value are limited and are usually not even considerable. However, agile processes make it possible to perform analysis, design, testing, coding and documentation in every iteration. This provides management with many opportunities to do the following: 1. arrange the sequence in which functionality is iteratively developed so that the most valuable functionality is built first; 2. continue to rearrange the sequence of functionality development as the project progresses and business priorities change; and, 3. group increments of functionality into more frequent releases, allowing the business to realize early and frequent benefits. Consider a system that will bring the organization $1,000,000 dollars in benefits in the first two years after its implementation. Using traditional methods, the system would take one year to develop, and its development would cost $400,000,000. Agile processes let us develop and implement the systems functionality selectively and incrementally by doing the following: 1. listing the functionality of the system, with more attention to the highest value and priority functionality; 2. dividing the functionality list into two releases, the first estimated to be ready six month after development begins; 3. using iterative, incremental development to complete the first release within six months for $200,000; 4. allowing benefits worth $800,000 to begin accruing after just six months, with the functionality that will deliver the remaining value scheduled to be developed during the second iteration; and,
5. permitting the second implementation to be deferred if it is not deemed cost effective and the benefits of the first implementation are deemed sufficientfor example, if the development cost of $200k for the less valuable functionality would generate only $200k in benefits. Workload management such as is described in this example is made possible by agile processes. In this case, the customer had an opportunity to realize $200k in benefits six months earlier than would otherwise have been possible. The customer also had the opportunity to choose not to spend an additional $200k for break-even functionality. The time and effort that would have gone into the second iteration could instead be allocated to other higher priority projects. The benefits of multiple releases are somewhat offset by implementation costs. Strategic and competitive systems are able to gain marketplace advantage through such incremental strategies. Imagine that your competition uses traditional development approaches to prepare a single new release or business capability, but your organization uses agile processes to produce early and repeated competitive advantages. If this is the case, then your organization is able to capture the advantage more effectively and thoroughly. An additional benefit of workload management is inventory reduction. As in manufacturing, unfinished raw goods software inventory is an undesirable cost. It may need to be reworked if it has defects. It may never even be used if production costs are too high or demand for the software evaporates. Yet traditional development methodologies amass huge inventories of analysis, design, and coding artifacts even as business changes render them obsolete. The agile approach minimizes the extent to which an organization accumulates such artifacts. Only those artifacts that are necessary to build each iterations increment of functionalitythe highest priority functionalityare built. This role of workload management is a key new role afforded by agile processes. This role is referred to as the Customer in Extreme Programming and as the Product Owner in Scrum. These roles have responsibilities that enable the realization of the benefits of workload management. The Product Owner executes this role through active management of an inventory called Product Backlog. The Customer executes this role through active management of an inventory of Stories. Lets look more closely at Product Backlog. Product Backlog is a simple list of requirements for the system. Each item on the list is a single line in length. Functional requirements, such as the ability to calculate available credit, are listed along with nonfunctional requirements, such as the capacity to handle up to 100,000 simultaneous transactions with sub-second response time. Product Backlog is often maintained in spreadsheet format so that it can be easily manipulated and interpreted.
The Product Backlog is a prioritized list. Items at the top of the list are those that will deliver the most business value. Business priorities can change over the course of the project, and consequently the order of the list can change as well. Dependent functionality, or functionality that is required to support highest priority backlog, is of an even higher priority. Each backlog item is a one-line description of the requirement. An estimate of how it will take developers to turn the functionality into an increment of potentially shippable product is included in each backlog item. The Product Owner doesnt have to specify all the details of every entry in the Product Backlog. The Product Owner extracts requirements from the systems plan, focusing on the highest priority Product Backlog first. At first, the Product Owner needs to list only as much Product Backlog as is needed to drive the first probable release. The lower priority functionality can be itemized and delivered only when it is deemed to be the highest priority available functionality. Even then, its development may be deferred if it costs more than it is worth. Workload management is one of the three key management roles is agile processes. The other two, process management and development iteration management, will be discussed in upcoming reports.
Managing Work
I previously discussed how agile processes facilitate workload management by allowing for frequent, iterative delivery of shippable functionality and enabling customers and product managers to prioritize direct development of top value functionality, iteration by iteration. Who manages the work during each iteration? The agile answer is: the development team! The workload manager indicates what functionality most need to be developed. The development team identifies and organizes the tasks and work necessary to the results of the iteration into a potentially shippable product increment. Collaborating with the workload managers, the development team determines how much priority functionality it believes it can cover in the next iteration. Agile work management is a radical shift from traditional Project Management Institute priorities. These practices call for a project manager to predict and plan all of the work as well as to assign it to individuals, track its completion, and make any necessary adjustments along the way. Agile work management instead follows modern lean manufacturing practices and engineered process controls used in complex development environments. Agile teams have these characteristics: 1. They are cross-functional, containing all of the technical and business domain expertise to take full responsibility for moving from requirements forward to working product functionality. 2. They are limited in size in order to maximize the speed, content, accuracy, and bandwidth of communications. Team size is approximately seven to ten people. When there are multiple teams, the teams get together to synchronize their work on a daily basis. 3. They are authorized to organize themselves, to divide and assign work amongst themselves. 4. They are enabled to let specific tasks require to create an increment of functionality emerge as the iteration progresses; they are expected to be able to make perfection predictions. For the duration of the iteration, the team has the authority to manage itself. Its main goal is to do the best that it can. Applying the technology to the requirements, the team analyzes, designs, codes, and tests. At the end of the iteration, the team demonstrates what it has accomplished. The team uses workstations to show the workload manager the functionality it has created. Only real working functionality counts to the customer; interim artifacts such as models do not count.
Sometimes the team does less than it has predicted it would be able to. Sometimes the team implements the selected requirements even more deeply than it had expected it could. Regardless, the team does the best that it can. For one iteration, the team alone wrestles functionality from complex, sometimes unstable technology and from oftenchanging business requirements. To many, it may seem risky and even foolhardy to trust the team to plan and execute its own work. However, this type of agile development has been successfully used in literally thousands of projects. Two types of productivity occur. First, the project manager doesnt have to try to tell the team what to do, and then keep the plan up to date as changes are required. Second, the team works more effectively without having to rely on external authority for any changes. The U.S. Marine Corp. uses an approach similar to agile processes for battle situations. In Corps Business (Corps Business, David H. Freedman, HarperCollins Publishers, 2000) General Charles C. Krulak , the Thirty-first Commandant of the USMC, describes the new three block war that the corps faces today Marines may confront the entire gamut of tactical challenges within the narrow confines of three continuous blocks. To prepare the marines, the actual fighters, for this situation, the USMC both trains everyone extensively in all potential skills and situations that can be conceived, and then advises the marines on the context, mission, goals, and risks of every situation before they are sent in. But, from then on, the marines are on their own, making their own decisions. Their officers provide as much tactical information as possible, but the ultimate decisions come from the soldiers. As General Krulak says, on the complex. asymmetrical battlefields of the twenty-first century, effective decentralized control and execution will be essential to mission success. This same type of decentralized control and execution by agile teams is required to successfully cope with the complex changing requirements and complex unstable technology required for todays successful systems. These teams manage themselves based on their skills and understanding of the technical and business domains. Weve described two newly designed roles: workload management and work management.
A sports coach is responsible for fielding the best team possible for every game. The team members are the best that the coach can field, they are in the best condition possible, they are trained to work together as a unit and individually, and they understand the rules of the game. The Scrum Master has the same responsibilities: 1. Everyone on the project understands the process, practices and rules; 2. Everyone involved in the project, but not actually working on the project, understands how the process and rules apply to them. This usually means training the users, customers, and senior management; 3. Each team member is the best possible person available and has been trained in their functional domain as much as possible; and, 4. The product owner represents the users and customers and has the authority to prioritize the workload. Copyright ADM 2004 All Rights Reserved Page 7of 49 12/26/2004
Prior to the project, the Scrum Master is responsible for assessing the field of play. Is the development environment established? Are all of the engineering practices, standards, and conventions in place? Are the quality, testing, and production environments ready? If not, the Scrum Master ensures that work is staged and prioritized into the product backlog. As the project gets underway, the Scrum Master is responsible for closely watching the development teams. Formally, Scrum affords this opportunity every day at the daily status meeting, and at the beginning and end of each iteration. At the daily status meeting, Scrums rules ask each team member to report if anything is impeding their progress. The Scrum Master is responsible for noting these impediments and doing anything possible to remove them. For example, of needed component software is being held up due to delays in purchasing, the Scrum Master is responsible for facilitating the purchasing process. Informally, the Scrum Master is responsible for being aware of the teams condition, morale, equipment, and everything related to its productivity. For instance, if construction outside the building is disturbing the working environment and making thought impossible, the Scrum Masters job is to fix the problem, however possible. I remember watching Jimmy Williams, a recent coach for the Boston Red Sox, get ejected from the game. His team was dispirited. So Jimmy picked fight when the umpire made a questionable call. After he was ejected, the team was so embarrassed at their spirit compared to Jimmys that they came back and won the game. The Scrum Master is also responsible for measuring project progress. If an iteration is falling behind, the Scrum Master works with the team and product owner to adjust the workload to still meet the goal of the iteration. If functionality isnt being built fast enough to meet a release date, the Scrum Master is responsible for working with the Product Owner and management to adjust goals, functionality, dates, or costs. The Scrum Master inspects the project on an ongoing basis and reports any variances from expectations, then working with everyone involved to make the best possible adjustments. The Scrum Master also produces regular reports that measure expectations to reality, and describes the adjustments that were selected, why they were selected, and how they were implemented. The Scrum Master is the go to person on the project, responsible for everything but with authority over nothing. But, who said that management was easy?
This type of radical productivity can lead one to extrapolate that a project normally staffed by 500 people could be done with a team of 40 using agile processes. However, as Martin Fowler observed at a recent workshop2, scaling agile projects is the last thing you should do. This doesnt mean that you cant scale an agile project. It means that you should first do everything you can not to scale one. Because, in scaling the agile project, you start to diminish the effectiveness of the very practices that produce such radical productivity. At this workshop, the question was posed as how do you scale agile projects? This question arises from normal management logic of: If we have a project that we estimate at 1,000 function points in size and we want it done in 10 months and our staff average productivity is 2 function points per month, we will need to assign 50 people to the project to get it done in time.
.James Coplien. Borland Software Craftsmanship: A New Look at Process, Quality, and Productivity. Proceedings of the 5th Annual Borland International Conference, Orlando, 1994. 2 Canadian Workshop on Scaling XP/Agile Processes, Banff, Alberta, Canada, February, 2003.
We flipped the question to read, how do you take any large project and reduce it to a small, agile project? In light of the productivity numbers quoted by Jim Coplien, above, and similar productivity experienced repeatedly within the agile community, this seems like a more cost-effective and prudent course of action. For instance, lets use a modest agile productivity multiplier of a factor of 10. Recalculating the example project parameters, the agile answer is: If we have a project that we estimate at 1,000 function points in size and we want it done in 10 months and our staff average productivity is 20 function points per month, we will need to assign 5 people to the project to get it done in time. Of course, agility cant just be declared. A lot of work has to be directed by management to produce an agile project. Management is going to have to be very proactive, getting experts, getting everyone together, providing the best tools, using agile engineering and management practices, and changing development approaches. But the payback seems very attractive. ThoughtWorks is a software development company headquartered in Chicago that specializes in agile software development, using excellent professionals that are well trained and well equipped. ThoughtWorks charges a premium for undertaking projects, but the type of productivity indicated above might mean that any reasonable premium is a bargain. I have managed projects of a very large scale using agile processes. In these cases, reducing the number of people through productivity improvements wasnt an option. I used the Scrum agile process to manage these projects, taking advantage of the coordinating mechanisms and outstanding visibility into project progress and problems provided by Scrum. The worst such project was a Y2K project at a healthcare software provider. Previous attempts to plan, coordinate, and manage this project using traditional project management techniques had failed. Scaling is often thought of in terms of number of people involved in a project, since that often imposes the greatest complexity. The Y2K project had over eight hundred people involved. The project was also very complex in a number of other dimensions usually not found together in a single project. These scaling dimensions include the number of organizations involved (350+), the application (delivery of health care), the criticality (mission critical), the distribution (multiple departments, multiple organizations throughout North America), the type of software (interpretive mainframe, client-server, and web), the type of software work involved (new development, enhancement, maintenance, and bug fixing), the size of the software (over 2500 function points), and the length of the project (over two years).
3. Colocatings team in open spaces to maximize the access within the team. If I want to ask a fellow team member something and I get up from my office, go down the hall, look in his or her office, and find that they arent there, I have both wasted time and lost the thread and depth of my thinking. More than just time was wasted. 4. Colocating teams in open spaces so team members can see each other, see how each other is doing and feeling, and hear when a conversation is occurring in which they want to participate. Privacy is easily obtained by putting on headphones from Bose. 5. Keep iterations to thirty days of less. Longer iterations require communications persistence through such artificial techniques as documentation or modeling tools. If the time between learning a requirement to finishing tested code is kept to under thirty days, the problem and its solution can usually be kept in the mind. 6. Keep the team size as close to seven as possible. Seven minds seem able to attain and maintain a shared mental model of a system and its representation in design and code without artificial aides such as documentation. Misunderstanding and recording time is minimized. 7. Use a shared code library and rigorous coding standards so everyone on the team can readily read and understand the system. If modeling documentation is minimized, the code literally is the design. The code must be easy to read and unambiguous. Variable naming is just one example of these standards. 8. Use agile engineering practices so the team always knows the status of development. Test first development ensures that the code reflects the design and that the code is tested as soon as possible. Source code management, continuous integration, and automated testing suites find errors as quickly as possible. Refactoring keeps the design simple, elegant, and easy to debug. Not writing arcane, heroic algorithms keeps code easy to understand. All of these practices combined mean that when I think I have a working system, it really is a working system that is sustainable and maintainable. This is called an increment of potentially shippable (implementable) product functionality. 9. Hold short daily status meetings. Face to face, team members communicate status and problems with each other. At full bandwidth, the team synchronizes itself daily. These and other agile practices lead to breakthrough productivity. Every scaling practice will reduce the productivity of these teams in support of other goals. Our job will be to understand how to implement these scaling practices as intelligently as possible, so we dont throw out the baby with the bath water.
this were the perfect work environment, what else would it have? More specifically, what could help the team be more productive, both as a group of individuals and as a cohesive team? One of my customers has five development sites throughout the United States. This is a reasonable time-zone difference and number of sites to synchronize through Scrum. However, they also have a development site in Finland and another in India. They are investigating opening still another development site in Bejing, China. Each site can readily have their daily status meeting to synchronize their activities within a team. The Scrum agile process uses a mechanism known as a co-coordinating status meeting that synchronizes the work between multiple teams. It is held immediately after the team daily status meetings, is attended by one member of each team, and co-ordinates the work of the teams. At these higher-level coordinating meetings, the team representatives answer the same three questions indicated above. For larger organizations, multiple levels of this coordination can be used, with progressively higher levels meeting less frequently than one day. The time zone differences make planning a daily synchronizing meeting extraordinarily difficult for this organization. Offshore development violates almost every other agile practice that provides the high productivity and quality. This isnt unique to agile, but is a problem for any development process. For instance, agile processes utilize incremental development, with each iteration developing a complete slice of product functionality - from requirements through design to coding and testing. Offshore development requires the development of requirements and architecture at the customer site, and the detailed design, testing and coding at the offshore site. Then acceptance testing and the round of bug fixes and change orders takes place. The customer must fully define all of the requirements upfront, building an inventory that may go obsolete as business requirements change. While the offshore developers design and code the application, it the functionality also may go obsolete and be unneeded. Another tenet of agile processes that offshore development violates is the ability for the customer to steer the project iteration by iteration, based on inspection of each iterations working functionality. The customer ensures that the top priority functionality is developed first, and may not even have lower priority functionality developed. Without this frequent collaboration between development teams and customers, much that the customer doesnt require may be build regardless, and that which is built may not deliver the top business value. Still another violation of agile productivity practices is that absence of full bandwidth communication between all team members, ensuring that nuances that are difficult to capture in documentation are captured. The moment communication occurs through documentation and models, the change for error occurs. The larger or more complex the project, the greater the chance.
The larger, seventeen-person team spotted this problem itself and divided itself into four sub teams. These sub teams worked on parts of the functionality that were as orthogonal as possible; normally parsing requirements this way is a ScrumMaster and Product Owner responsibility, but the team proved itself equal to the task. Because a perfect orthogonal solution, with perfect cohesion and no coupling, was impossible, the team on its own devised a solution to keep their work synchronized while minimizing collisions. Each team had its own status meeting, called a Daily Scrum in the Scrum process, where the team spends fifteen minutes daily synchronizing work among team members. The team then held a Daily Scrum of Scrums. Representatives of each team met daily after the individual team Daily Scrums to synchronize work between them. They self organized into self-coordination. The teams presented this approach to its management and me; not for our approval since they were using Scrum and were fully authorized to devise their own solutions - but for our information. I was amazed at their creativity. Not only had the team devised a workable solution, but also it was the same solution formally documented in the Scrum methodology for scaling development projects from the small to the large. Except, the team had never seen the Scrum methodology. Working on its own, the team had reached the same optimized solution within three days.
One of the largest Open Source sites, SourceForge (www.sourceforge.net) has over 64 thousand active projects. Each project has its project administrator that ensures the integrity of the project work to the project vision, ensures the internal product integrity, and forms and guides teams. This role is similar to that of the ScrumMaster. Staff for each project is selected by the project administrator from his or her pool of usual suspects, those professionals who have previously successfully worked on projects with them. Additional project resources are selected from online Open Source job posting boards. On these boards, interested individuals can express a desire to join a project and the project team can select qualified applicants. As teams form and move forward, the project administrator serves as both the Scrum Product Owner and ScrumMaster. The Product Owner is responsible for setting the project vision and prioritizing the work to deliver it. The ScrumMaster is responsible for administering the process for developing the software. The team makes progress based on individual commitments from team members who often hold full time jobs in addition to their Open Source project. We wondered if the concept of the Sprint Planning meeting and the Sprint Review meeting wouldnt help organize these projects into regular iterations that incrementally deliver functionality. The Sprint Planning meeting would allow people to commit for the next iteration based on availability and skills. The Sprint Review meeting would help the team figure out its real progress and optimize its commitments and composition. As a result of these musings in Milan, the Certified ScrumMasters are developing a new approach to offshore development; call Virtual Scrum. This approach will implement many of the ideas expressed above, fusing Open Source and Scrum into an Agile approach to offshore development. The offshore development can either be rapid and focused, using full time teams, or the development can be asynchronous with part time teams from all around the world.
Some good books that I can recommend on this subject are "American Ground", describing the deconstructing of the World Trade Center disaster, where everything emerged through daily meetings directed by two people with no authority and no detailed plan. And, "The Emergence of Everything", where Harold Morowitz points out that despite popular perceptions - deterministic science has only proven useful when roughly applied. For instance, Newton's laws are used to describe and predict interplanetary movement. Yet they are applicable for only two bodies. The complexity of what really is occurring invalidates these laws when they try to predict the interoperability of three or more bodies. The idea of observing something and reducing it to a set of laws, principles, and practices has been wildly successful in gaining coarse control over our environment. However, using these same laws to predict how finely grained objects interact as they built up have been horribly unsuccessful. It turns out, as complexity science has observed, that very minute variations in the initial conditions often lead to wildly unpredictable perturbations when scaled into the large. I believe that software development is a wonderful subject - both to do and to study. I believe that we need to understand it better to do it better. I have moved Scrum forward because I find it to be a sustainable, scalable framework for software development. But I do not understand how it works. I don't understand emergence, I just understand the beauty of it and how it unleashes creativity. I don't know how models translate from the mind to the software, and I don't know how we make up for the fuzzy boundaries and undefined or weakly defined aspects of models. But I know with inspection, adaptation, and diligence, that we can build software. In "Corps Business", the approach the US Marines take to complexity is discussed. They believe that the world has gotten so complicated and dense that the marines will find every possible battlefield complexity within a three block area - far too complex and dense for top down direction from generals to privates. To address this, the marines train extensively in every possible technique of warfare, in every conceivable circumstance. Before a mission, they meet and discuss the mission - it's objectives, the desired outcome, the risks, the potential variations and complexities. Then they put the troops into the battlefield and count on them to use their training, their common sense, and their knowledge of the situation to do the best they can possible do. The Marine Corps trains leaders, not scientists.
SEI, CMM, and Scrum Mark was familiar with Extreme Programming, another Agile process similar to Scrum but more engineering and less management focused. However, he had only heard about Scrum. Mark taught me about CMM and I taught Mark about Scrum throughout the first day. On my side, I was quite surprised and impressed by CMM. Mark related that it was only a framework describing an organizations maturity for developing software. How an organization satisfied that framework was up to the organization. Assessors were supposed to determine if the manner in which the organization satisfied the framework were adequate. This enlightened me. Since almost every organization prior to 2001 used defined software development processes, it would of course build rigid, prescriptive, and defined methods for fleshing out the framework. These practices would suffer the weaknesses of all defined approaches they would only work for instances that had been foreseen by those defining the practices. Since software development is a very complex process, there would be very few actual projects to which these practices would be applicable. Mark then went over KPAs for the various levels with me. We then assessed how Scrum fulfilled the KPAs for each level. Mark was pleasantly surprised. Even though Scrum took an empirical approach, someone employing its practices would satisfy all of the CMM level 2 KPAs and many of the level 3 KPAs. The KPAs that werent satisfied at level 3 were those that addressed institutionalizing the practices. These KPAs were addressed in 2003 when the Scrum Methodology, the Certified Scrum Program, and Project QuickStart were made available as products. To see how Scrums practices implement one of the KPAs, Ill discuss KPA 2.6 Requirements Management. The definition of this KPA is: The purpose of Requirements Management is to establish a common understanding between the customer and the software project of the customer's requirements that will be addressed by the software project The Scrum mechanism for meeting this KPA is the Product Backlog, an openly visible listing of all functional and non-functional requirements maintained by the customers that is used to drive development, Sprint by Sprint. The emergent nature of the Product Backlog, with focus only on the top priority items, maximizes the probability that investment in detailing requirements is of valuable. Lower priority Product Backlog that may never be implemented is ignored until and unless it rises to the top of the Product Backlog list. This KPA is often interpreted as demanding requirements traceability, the ability to show how requirements are fulfilled in the delivered system. The manner in which Scrum addresses this interpretation is by demonstrating within thirty calendar days how every Product Backlog item that has been worked on during the Sprint operates as business functionality, The proof is through an actual demonstration of the functionality. As the customer accepts the functionality as complete, that completed item reduces the Product Backlog.
This completely empirical approach to requirements traceability fully meets the requirements of the KPA without extensive documentation or overhead to the development process. It also provides complete flexibility to manage and trace changes in requirements anytime throughout the project. Scrum addresses the rest of the KPAs for level 2 and 3 similarly, empirically and with a minimum of documentation and overhead.
Estimates vs Actual
Everyone wants to improve the predictability and certainty of software development. Given the number of failures and missed deadlines, how can anyone possibly run a business or anticipate how to use new functionality without knowing when the system will be done and how much it will cost? Software development is a complex endeavor. The requirements are hard to state explicitly. The technology works, sometimes. And the interactions between the team members are sometimes great and more often less than great. How is it possible to precisely estimate the amount of work and predict a date give than level of hubbub and complexity? The only way that I know is to study and detail all of the factors involved and then come up with the best answer possible. The more time that Im given to study the problem, the more accurate my estimate will be. Unfortunately, there is a cost to the time that I spend studying the problem. Now, on one hand, I could just go ahead and work on the problem and see how long it takes to do the software development. Or, on the other hand, I could study the problem, come up with an estimate, and then work on the problem. Either way, the work of understanding the problem is part of the overall effort on converting the vague requirement into working functionality. The question is whether I have expended this effort on something that is really needed by the business, or whether I have expended this effort on something that may be needed by the business. The Standish Group estimates that over 60% of the functionality delivered by successful systems projects are never used. One only has to look at Microsoft Excel to validate this statistic; how often does one use all of the great functionality available on all of the menu options, versus just using the standard spreadsheet capabilities of any competent spreadsheet software? What this leads one to potentially conclude is that we should focus our estimation efforts only on those requirements that are essential to the usability of the software. The other estimation efforts should be deferred, since they are nice to haves, that may be dispensed with to meet either cost or delivery date requirements. This is good. Now I know only to worry about the accuracy of the estimates for functionality and requirements that is of the highest value. Having realized this, I face another problem. In all of my years of systems development, I have never seen benefits estimated with any degree of precision. As a matter of experience, the estimates of cost are always better than the estimates of benefits, which are often stated as, this is important to this customer, or, weve simply got to have that! Does it make sense to continue to only work on one side of the equation, cost, when the other side of the equation is so ill-formed?.
Agile processes require a different type of management than called for by the heavyweight, prescriptive processes. The project manager doesnt tell people what to do, the project manager facilitates people doing their work. At a recent Scrum implementation weve faced this question squarely. The line managers, functional managers, and staff from the Program Management Office were trained as ScrumMasters, the title for a Scrum project manager. For the first five or so Sprints, these new ScrumMasters facilitated the correct implementation of the Scrum process. The two most important assigments were getting the business stakeholders to drive development for ROI every iteration, and to help the team learn how to self-manage. While the new ScrumMasters were implementing Scrum, a lot of other work went undone. Every day and at the end of every Sprint, wed find new work that had to be done, but wasnt part of the stakeholders project. All Teams were working on projects, doing the tactical work of systems development as driven by the business stakeholders. We setup a new Team to do this non-project work, an Engineering Management Organizations (EMO) Team, consisting of the managers. The project Team leads were trained as ScrumMasters. The EMO was given the following initial responsibilities: Backlog Management; Release planning and management; Risk, assumption and ROI management; Scrum management; ......................Product Planning - architecture, technology, workflow, and user interface; Development Practices; Productivity Management; and, Quality Management. From this, the following backlog of work was constructed and selected for the first EMO Sprint. Fix up, estimate and make overall product backlog visible; Create next release plan and backlog; Create next +! release and estimate; Define risks, assumptions, and ROI for each release; Establish productivity metrics, trends and history report; Improve engineering practices through coding standards, refactoring, code reviews, and daily builds; Improve defect rate through test driven development and test driven design; Improve defect management; and, Define management reporting and initiate.
An important rule for the EMO team was that it research subjects and define future work but couldnt do work. All actual work would be done by the development Teams, as prioritized and funded through the overall product backlog. The stakeholders and EMO had to prioritize where the money would be spent. At the same time, we ensured that no strategic organization was formed that would tell the teams what to do. The wonderful news is that there is truly meaningful work for engineering management once the non-Agile stuff is stripped.
The analyst starts, performing the analysis of the problem. While the analyst is analyzing, the others try to find things to keep busy until it is their turn. One by one, each gets a waterfall turn to apply their expertise. Finally, the technical writer gets to start the documentation, usually with no time left. I help teams become cross functional by asking the analyst how the other team members can help? The analyst is surely the expert, but how can the analyst direct the others. By directing the others to do analysis, the whole process is sped up, everyone is aware of the results of the analysis, and the need for analysis artifacts is minimized. If this shared work occurs throughout the iteration, the progress is more rapid and cross-functional training occurs. Everyone pitches in. The time-box of the iteration helps the team realize the benefits of this approach, since a strictly partitioned functional and waterfall approach usually fails to deliver a completed increment within the time-box.
The team starts the first iteration in waterfall mode and is disappointed at how little it can accomplish. Usually, at the end of the iteration the coding is incomplete and no testing or documentation has been done. The team thinks about this and realizes that it would be more efficient if the analyst were responsible for analysis, but used everyone on the team as his or her legs to get it done. By doing so, the tester is aware of what must be tested early in the iteration as well as helping with the actual analysis. Also, since everyone is doing the work, no documentation is needed since they are already aware of the requirements. And this proceeds from analysis to design, from design to coding, and so forth. The entire team is responsible for the results of the iteration; functional specialists teach everyone how do help with their area of expertise, magnifying the productivity of the team. Consequentially, everyone on the team becomes cross-trained and can fill in for each other. Most project managers are used to telling people what to do. If a problem exists, study it and direct people to fix it. Self-organization is much more difficult. We must wait for it to occur, and it cant be hurried. Sometimes we can help team members have insights through anecdotes, metaphors, or just conversation, but we cant make a team do something as complicated as cross-functional work by directing it to do so. The project manager may help the team get to this point by questioning it, Gee, would you be able to do the analysis faster if everyone on the team helped, with you directing? But the project manager cant tell the team to be cross-functional; the team must realize how to do this and do it themselves.
Silver Bullets
I dont know if other industries fall prey to the silver bullet myth as hard as systems development. The belief that there will be some magical incantation, tool, or facility that will kill the difficulty of software development has haunted our industry as long as Ive been developing software, and I remember the 60s. In some ways the belief in the silver bullet was good; it fueled the growth of whole tool industries remember Computer Aided Software Engineering tools from Index Technology, Knowledgeware, and a host of other companies? Remember models that were supposed to generate code that could be maintained from the model? Remember heavyweight methodologies? A test for the presence of a silver bullet is, does using this somehow make the practice of building software for me and those who work with me substantially easier in a way that I dont fully understand? If the answer to this is yes and this thing costs money and is being sold by a company, inspect it thoroughly before buying and implementing it. Im not against magic or simplification. Our jobs of building quality software are hard enough that I believe that we can be forgiven for looking for ways to simplify them. We can even be forgiven for spending lots of time and money acquiring and trying to use silver bullets. In the process, we usually learn something useful, like how to graphically represent our ideas methodically and rigorously. What we wont be forgiven for are both the degree to which these silver bullets have reduced our ability to produce quality software on time and with required capabilities, and the degree to which theyve made it so that we speak separate languages from our customers. I once even taught a course in data modeling to a group of actuaries at an insurance company so that they could understand their systems. Agile processes are sometimes thought of as silver bullets. All I have to do is implement Scrum throughout my organization and things will be better is becoming a mantra, following closely on the heels of all I have to do is implement XP and things will be better. This statement is usually made by senior IT or software engineering management after one or several projects is miraculously turned around and becomes vividly successful after XP and/or Scrum is applied. The problem is that the success of the few is difficult to replicate in the many. The reason is the shortage of people who know what they are doing.
The idea behind most silver bullets is that almost anyone can successfully build systems, as needed, using the silver bullet. Agile processes come in with a different tenet: software development is difficult work and here is a framework and set of practices within which to engage and manage teams in this difficult work. No attempt is made to say that the work is easy or can be done by junior, indifferent, or incompetent employees. Instead, agile processes simply make the impact of unskilled professionals very apparent very quickly. Skilled professionals generate quality systems using agile processes. Unskilled professionals produce terrible systems using agile processes. What agile processes bring to this game is that the bad work of the unskilled professionals becomes quickly apparent and must be dealt with; it wont go away and wont become invisible. Many methodologies keep unskilled work hidden until the end of the project, and some even keep the results hidden until someone attempts to sustain, maintain, or enhance it. Agile processes show the bad quality every day and at the end of every iteration. Agile processes are hard work. If everything that isnt going well is put in managements face every day and at the end of every iteration, life isnt very pleasant. It isnt that all of these problems werent always present; its just that now they are out in plain sight and pointed out to everyone very frequently. Part of my work helping people implement agile processes is getting them through the despair they initially feel when they see all the problems. I call these problems the good news and the bad news: the good news is that you can now begin methodically fixing these problems; the bad news is that you know that they need to be fixed (and so does everyone else). Agile processes keep the bad news visible until it is fixed. If developers arent testing their code, this is evident at least every iteration, and often every day. If developers arent checking in and building their code frequently, this becomes visible every day. These problems stay visible until engineering practices are implemented to fix them. Management is on the hook to get them fixed as well as to devise strategies to remedy the problems until they are fixed. Agile processes ruin perfectly good management jobs, where managers sit in corner offices reading reports and presuming good progress until the project fails. Agile processes stick the bad news in the face of managers daily; the plausible deniability offered by most silver bullets is totally removed. The good news is that you can build great software predictably with agile processes. The bad news is that it is really hard.
Some systems development processes, such as waterfall, defer the implementation of the system until preplanned milestones. All of the requirements are defined at the start of a project, and the project converts all of these requirements into functionality that is implemented at the end of the project. However, studies have shown that over 50% of all functionality developed using this approach is rarely or never used. This indicates a possibility of reducing costs of a project by 50% of more and still receiving the same benefits. This is an increased return on investment. Agile processes use a prioritized list of requirements to drive each iteration. At the start of the iteration, the customers and the team get together. The customers identify and describe the requirements that are of highest value to them. Highest value can mean that these, if implemented, would have the highest benefit to the business. Or, highest value can mean that these requirements are the riskiest and need to be resolved prior to incurring further project costs. In either case, the customers can stop funding as soon as they evaluate that the return on investment is maximized. This approach was initially described in the Dynamic Systems Development Methodology as receiving 80% of the benefits from 20% of the functionality.
Why do teams act this way? Why does our entire profession act this way? Can we call ourselves a profession if by comparison to the professionals at Massachusetts Eye and Ear we are only spinmeisters? Over the last twenty-five years, weve been subjected to enormous and contradictory forces. On one hand, systems development has become more and more difficult and complex. On the other hand, we rarely have a good idea of whether we will succeed or fail in meeting a time and cost until near the end of the project. Further complicating the situation, we are under pressure to clean up our act and do better. Doing better is often interpreted as knowing what we are doing, being able to predict a firm cost and delivery date. These request or demands are usually accompanied by such phrases as, dont you know what you are doing. We usually dont know what we are doing. Given the complexity of our projects, the uncertainty of the technology, and the changes in the requirements it truly is impossible to estimate the cost and delivery date at the start of a project. But, in the face of demands that we do so, we act as though we can. Hence, such phrases as absolutely certain even though we arent absolutely certain. Into this mix come Agile processes which are complexity tolerant. Customers and teams work together to ascertain what can be done rather than holding each other accountable for the impossible. But, in my experience, the habits of the past are hard to break. We are used to pretending we can be certain in the face of uncertainty, and being open and professional about our uncertainty is hard to do.
Yowzah!!!
I recently helped two divisions in two leading software companies implement Scrum for mission-critical projects. One project had three months left until it was due, and the second project wasnt due until the first quarter of 2005. In both cases, I met with the division vice president first. Each had already experienced Scrum elsewhere in their company and were optimistic that it would help them realize their objectives hitting the date with a competitive product. When I arrived at each software company, I spent time with directors, program managers, and project managers prior to beginning training. In each case, I felt that they were less optimistic about the project than their vice presidents. So, as an experiment, I had all the software managers in each of the companies get together. I asked them to close their eyes; I then asked those who thought the product would be released on time to raise his or her hands. In each case, the vice president was the only person to raise his hand. I relayed the information to everyone. In one case, the vice president ignored the information and plowed on. In the other case, the vice president spent the next two days working with the managers to figure out what could be done to improve the odds. What is it in software planning where the only person who believes the plan is the person who has committed it to management. Why is it that the commitment doesnt come from bottom up, so the vice presidents (in these cases) are speaking based on everyones beliefs and commitments? In both of these cases, the products were mission critical and the dates had been set by management. However, in an Agile process, the degree of functionality to be delivered by that date could have been established by everyone. Equally, everyone could have shared the tough news of the date and collectively tried to figure out how to make it happen, perhaps without ruining their personal lives and the quality of the product. Last I heard, one of the two companies was well on their way to figuring out, collectively, how to meet the date. The other company was in a death march, with managers and developers floating their resumes while the vice president resolutely plowed ahead while figuring out his alibi and excuses.
I ask these people how they would feel if they were treated the same when buying something themselves. Perhaps they enter a restaurant, a very expensive restaurant, or order a steak. The waiter and the chef know that the beef is old and that it comes from a herd where mad-cow disease has been spotted. Yet, they figure that what you dont know wont hurt you , that your actual chance of getting ill is pretty low, and they probably will be elsewhere if you do become ill. All of them tell me that they would be furious! I ask them where they get the nerve for assessing your risks for you and gambling your money in the face of uncertainty. What I hear back is a combination of fear, uncertainty, and bad-habbits. Except for the newest project managers, the software development profession is coming out of a period of twenty years when it was at least difficult and many times impossible to tell you if your project would succeed. You werent being lied to; the project managers juist didnt know. Worse, because of the process used to manage systems development, they didnt have any way to determine if your project would be successful or not until well into the project and your money. They lied to cover up the appalling trust that in the face of your probability of success only a desperate person would fund a project. This has led to a state where many venture capitalists and enterprises are turning to offshore development. These peers of yours have told me a number of times that they are doing this not to reduce their cost of a successful project, but to limit their losses. If the project is going to fail anyway, better to lose $500k than $1,500k. Agile processes provide an opportunity to turn around this unfortunate situation. Month by month all of the information is available for you to maximize your return on investment and to optimize your risk strategies. But, only if they arent hidden from you. Although alow and painful, and in the face of a history of hiding the trust, we are developing project managers that are confident of what they can and cant do with your project. Look for them. Dont look for the person that tells you what you want to hear, even though you know it is impossible, that your project is no problem and that the project manager is absolutely confident. Would you buy a used car from such a person?
We decided that we couldnt ignore the conflict, that leaving the bad feelings unaddressed would create a poisonous atmosphere in what until then had been an easy and collegial atmosphere. Worse yet, we all acknowledged that if many more unresolved conflicts occurred, the team might not be able to work together. So we forged the following rules. 1) We accepted that conflict is a natural event when people work together; 2) When a conflict occurs, no work will continue until the conflict is resolved no sweeping conflict under the carpet; 3).The first thing to do to resolve the conflict is for everyone in the team to describe how they feel (the guys had a hard tie with this at first, mistaking analysis of the situation with feelings); and 4) Everyone would work together on a solution. We hypothesized that if no solution was forthcoming, it was probably because emotion was still clouding our thinking, so we would go through steps 3) and 4) in a loop until the solution was derived and everyone was able to report that they were feeling ok. Im certainly not a conflict resolution specialist, so I recommended to this organizations management that they bring in a specialist to work with each team. The specialist would teach the teams how to resolve conflict in a more effective way, one that could handle more types of conflict than they team and I had dealt with. When I implement Agile processes, I sometimes help the organization develop rules of conduct, or etiquette. Sometimes I do this because ill-will already exists and I dont want it exacerbated. Other times I help build the rules because I feel that the people are truly at a loss on how to get along; sometimes this is because of different cultural perspectives, sometimes it is simply because they have spent so much time working alone that they have forgotten, or never knew, how to work in teams. Some of the rules weve devised are: 1. Never use the work you because the other person may feel on the spot and defensive. 2. Never refer to history (three months ago, you said .!). 3. Be on time for meetings; if you are late, apologize and pay a late penalty. 4. If everyone is talking at once, use a pen to determine who talks. Whoever is holding the pen talk, everyone else listens. 5. Everyones opinion is important and needs to be understood and taken into account. 6. No name calling. 7. So forth, depending on the organization, team, situation, and past experience. In retrospect, Im surprised that I didnt foresee this cost. The team members had previously been kept in relatively conflict-free situations, with their management being responsible for resolving anything that came up. Now, this was up to the teams.
Bidding Work
We are often asked for estimates to build a system. Even though the system is complex, we are prodded, what will it take. And, to our regret, the estimate once out of our mouth becomes a contract. I had an experience recently where another professional showed me another way, and I learned that I was pleased with his approach. The exterior of my house needed painting. I called in three painting contractors, and I thought my experience with them may be of interest to the Agile community. The three contractors all came to my house, apprised it, and provided estimates. The high estimate was $15k, the medium estimate $12k, and the low estimate 7k. All were fixed price estimates good for thirty days. No estimate took more than one hour to prepare, and I walked the house and I answered any questions they had. I was therefore surprised at the fixed-priced bids, since I knew my houses exterior had some unique attributes that none of the contractors had encountered previously. My house is clad with DryVit, a highly insulating foam board contruction technique usually reserved for commercial buildings due to the skill needed to apply it The DryVit is then covered with a proprietary sealing polymer and then given a final color coat of acrylic paint. The paint application has to be carefully applied since it tends to soak in more than other paint. So I was perplexed and somewhat uneasy that these contractors thought they could fix-bid such a complex project; or, maybe they thought it was simple? Twenty days after the last bid was submitted, I was driving home on a limited-access highway. The speed limit was 55 mph. Suddenly, an immaculate, white panel truck passed me on the left, going at least 80 mph. As it disappeared, I was able to make out the name on the side, Noe Montenegro, Professional Painting. I was impressed. Here was a guy in a hurry who nevertheless cared about appearances. When I got home, I looked up his telephone number and asked him to come over the bid on the job. Noe was a young, intelligent man. When he came to the house, he spent time looking at the exterior before even ringing the doorbell. When I came outside, he asked very penetrating questions about the exterior, its construction and composition. I gave him all of the material and information I had, and he left. The next day he stopped by and told me that he had been doing some research. The research had led him to understand the type of acrylic paint required for my house, as well as the difficulties and complexities of applying it. Noe said that, even though he and his crew were great professional painters, they had no experience with this type of exterior and were uncomfortable submitting a fixed price bid. Noe said that if he tried to cover his uncertainty with a high bid, it might be too high. Similarly, if he made incorrect assumptions, he might underbid the work and have to take a loss.
After talking for awhile, we reached an arrangement. I would pay Noe and his crew $65 per hour plus materials for painting the front of the house. Then he would give me a fixed price bid for the rest of the house, based on his new knowledge and experience. I felt comfortable with this because if Noes price was too high or his competence too low, I was free to not use him after the front of the house was done. Also, I would have that increment of work done and could build on it with any other contractor. When complete, the time and material and fixed price remainder of the work cost me $8500, and was for excellent workmanship. Noe even cleaned the windows. I added an additional $1,000 to the check, as I was thoroughly impressed with his work as well as his honest approach to bidding on it. I told him that I was going to use this experience as a story; he just shrugged and said, Thanks.
Disenfranchised
As I help others learn, implement, and use Scrum, I run into a recurring problem. The people I work with are beset by authority that they feel is indifferent, impeding, or hostile to the successful use of Scrum, and the resultant development of successful systems and products. They feel that their management doesnt understand, care about, or support their efforts. Management (sometimes called senior executives) is inflexible and intolerant, continuing to make demands inimical to the successful and proper construction and deliver of systems. Marriage counselors have identified a theme common to people coming to therapy to improve their marriages. Each party is sure that their marriage will succeed if the other person - often called, the truculent rat will only change their behavior and ways. This attitude is the greatest impediment to martial bliss. So, a common these in both dysfunctional marriages and organizations is a problem can only be solved by the other party changing their stripes. Although this certainly simplifies the problem to the person identifying this course of action, it makes them helpless, powerless, and without an effective course of action. By stating that the problem can only be solved by changes in the other party, the person places themselves and their success completely at the mercy of the understanding and whims of the other party. They have lost control of and their ability to affect change and make progress. I discussed this problem at the recent Agile Business Conference in London with several other practitioners They immediately recognized it as a common psychological phenomena. They described it not only as a problem, but as an addiction. Once started, blaming others for lack of progress or success becomes a comfortable way of dealing with difficult situations and problems. The problem has been identified; maybe some effort has been made to communicate it to the other party. Now the person can sit back and wait for the other person to change. Sure, the problem doesnt improve, work is miserable, and the products are unsatisfactory, but we did our best. It is the other parties fault.
Ive pointed out to people caught in this form of thinking that they are dooming themselves to long term failure and impotence. Fortunately, there is a course of action a hard course of action, but a very possible course of action. Change yourself, change the way you behanve!! Take the initiative, figure out what can be change, and start changing. Sometimes this has no affect on the other party, but often changing your actions provides an education and opportunity for the other party. For instance, if we tell our customer that to deliver the additional functionality will require another month and miss the deadline, they often insist on the deadline and the functionality, regardless. Show them a burndown graph, show them that what they ask is as impossible as driving a 18 horsepower car 900 mph. Dont think that cutting quality, of the product and your life,will solve the problem. It will simply addict the customer to unreasonable requests that can only be met by us acting unprofessional. We will be condemned to building low quality product and our customers being unaware of the long term risk and costs of such reduced quality. We can overcome habits with time, but the reward had to be adequate. In this case the reward is quality products that are sustainable and maintainable, customers who trust and respect our advice (even though sometimes they may not like to hear it), restoration of the reputation of our profession, and pleasure and satisfaction in our work. Quite a reward, quite a lot of work. Go for it!
2. Only 1/3 of the companies that develop software will adopt Agile because it is very hard to implement. The degree of organizational change required will prove unacceptable to any organization that doesnt require on software and embedded software as the lifeblood of their companies. If these companies dont adopt software, their competition will take their business. Already, the successful and thorough implementation of Agile has mostly occurred in high technology and financial companies. 3. 2/3 of companies that develop software will outsource their work to companies that use Agile. The degree of change will required by Agile will prove unacceptable to these companies. However, the cost of the current failure rate will also prove unacceptable, and they will outsource their work to organizations that providing the quality of software at the cost enabled by Agile processes. Ive already seen companies that manage their offshore development using Scrum to frequently inspect the progress and to regularly take delivery of increments of functionality. 4. Business models for cooperative work will emerge and become dominant. A question that has plagued Agile since its inception is what about fixed price, fixed date contracts how does Agile handle them. The answer, that Agile handles them exactly as traditionally, with a heavy investment in up-front analysis and design to derive the price and date, works but soon is discarded by organizations using Agile. As trust between customers and developers grows, a new business model of collaboration has emerged, with teams of developers working on a time and materials basis as directed by the customer until customer has enough value. The hands-on control provided to customers by Agile is more than enough to create a trusted relationship similar to Japanese keiretsu relationships. 5. People will become more important than tools and processes. The experts have dominated the software development industry, providing methodologies and tools that were supposed to provide answers and silver bullets to the developers. Unfortunately, our industry is so complex that these methodologies and tools have often stifled as much as they have improved. Agile follows the lean manufacturing mantra, the people who best know how to do something are those doing it. These people will devise open source tools, or adapt commercial tool s to their need rather than being driven by their functionality. 6. People will enjoy and take pride in being software development professionals. This is the raison d'tre for many of us implementing and espousing Agile. We intend to turn restore our profession from one that is accused of lying and cutting corners, people whose manufacturing yield is unacceptable in other industries, into a modern profession that we can all enjoy and into which our children cant wait to enter. Having said this, I guess I have to do what I can to put my effort where my mouth is, all within the understanding and humility that this is an inevitable swing of the pendulum. Ken Schwaber