Business Case of Agility

Success stories and surveys support agile software development. In addition to anecdotal evidence there are little hard figures to guide our decision making. Here cumulative business value charts are used to describe the impact of agile and traditional choices to the bottom line. Focus is on visualizing the economic impact of individual agile practices and assumptions of their costs and profits.

A chart describing the cumulative earnings as a function of time is a basic tool for optimizing the return of investment, ROI. The line is higher all the time if we have multiple deliveries. It is still better if the more profitable increments are deployed the first. This advantage in time-to-market is clear also in the surveys. Double the results in half of the time assumes that earlier deliveries have business value and that the additional cost of more deliveries is small.

  • It is not trivial to find minimum viable products that create value especially when organizations do not improve their businesses continuously but use large projects with non-negotiable late deadlines. Waste of the inventory of the partially done software is not as visible as the waste of tangible inventories.
  • The cost of a delivery has been a show-stopper of agility. Business models were based on sales of new versions of software that were installed manually to each client computer. Each deployment package had to be tested and integrated manually. Without automation the costs can overcome the benefits of early deliveries.

The cost of change must be small if we proceed empirically and feedback directs our product and development process. Customers pay these changes when they create more value than the costs of delaying and implementing the the changes.

  • Extreme programming proposes a set of practices like test driven development, re-factoring and pair programming that change the cost curve, cost of change, such a way.
  • Waste of unnecessary features can be avoided by prioritizing product backlog items based on their business value and changing the order when appropriate.

Risks are an integral part of any design. In software development we do not commonly know what the users actually need and how we use  new technologies that create the results. The cone of uncertainty is high. Reports of more than hundred-fold effort differences are common. Sales, savings and profit estimates are so inaccurate that it is quite common to ignore them altogether.

  •  Whole investment is lost if  we do a wrong thing or fail in the implementation
  • Customers try to protect themselves by fixed price projects. Costs increase because vendors have to buffer their offers especially if penalties are used. Competitive bidding weight visible price or over quality and total cost of ownership. The bidding game sets customers and vendors against each other.
  • Incremental deliveries make risks visible and adaptation is easier.
  • Agile approach is a natural risk management system, but it often fails when appropriate action is not taken. Organization cultures must allow canceling and redirecting projects.
  • Queuing theory and theories of variation can lead to improved practices in handling unpredictable situations.

Traditional mass production uses specialized lowest costs work force, rigid processes and invests in tools. It locally optimizes the cost of the tasks that workers do and is often blind about the required administrative burden.

  • Cost of learning can be significant. It unavoidable when we do something new. Open workspaces, pair programming and shared responsibilities are agile practices that accelerate learning. It would be good if that could break Brook’s law.
  • Cost of teamwork is minimized in a cross-functional team in single location. Wastes of relearning, transfer of work, task switching and delays are minimized. Software development has dis-economics of scale because a lot of communication and coordination work is required.
  • Utilization rate of the specialist become easily low. To avoid that developers take part of multiple simultaneous projects which often leads to coordination chaos.
  • Cost of motivation is difficult to estimate but essential part of working life. Leadership style has an impact on the engagement of team members which may result in more value for the business.
  • Traditional big front end design tries to minimize the cost of rework but real life shows that a large amount of work is needed to correct the bugs, integrate the components and deliver what users actually need.

Traditional and agile approaches have different assumptions of the relative costs of the parts of software development. Agile assumes high risks, high integration and collaboration needs, low predictability and low cost of change.

Example Driven Development

Example driven development is the best name to cover acceptance test driven development, behavior driven development and specification by example approaches. The concepts of acceptance test, testing and a tester have been defined long ago. I have found that changing their meaning is difficult. Even when we talk about test driven development we have to spend a lot of effort to explain that it is not done after programming and not by the separate testers.The same happens if we talk about specifications.

The old school uses user stories as a new way of writing specifications, which could be then send to a separate development team. Collaborative design is not happening as it should. Though I like the idea of programming with natural languages, I think that they are too abstract and too prone to interpretations. Examples are a good way to explain things unambiguously and in a way that both the users and programmers see useful.

Behavior is something that programmers talk about, but for users that might not be as clear as examples. With example driven development I want to emphasize collaborative design where users and developers work together using examples to clarify how users interact with computer programs to achieve business benefits that pay the return on investment.

Traditionally we have specifications, tests and code written to different purposes. They should not just be consistent but the same. In agile tests are specifications and in behavior driven development code is moving closer to the tests. The ultimate goal might be that we have only one description of the program that can be understood by both the users and the compilers. That is one goal of visual programming.

The lack of programmers has been tried to be solved by moving the work to users. This approach has not been very successful because building large programs requires a lot of logical thinking and solutions to huge amounts of details. Software designers are not endangered species but programmers might be if the abstraction level of programming goes up.

Another book list

In this list I have a lean and management focus:

Hope, Jeremy: “Beyond Budgeting: How Managers Can Break Free from the Annual Performance Trap”.

Denning, Stephen: “The Leader’s Guide to Storytelling: Mastering the Art and Discipline of Business Narrative (J-B US non-Franchise Leadership)”.

Denning, Stephen: “Radical Management”.

Reinertsen, Donald G.: “The Principles of Product Development Flow: Second Generation Lean Product Development”.

Reinertsen, Donald G.: “Managing the Design Factory: A Product Developers Tool Kit”.

Goldratt, Eliyahu M.: “Theory of Constraints”.

Ries, Eric: “The Lean Startup: How Constant Innovation Creates Radically Successful Businesses”.

Gojko Adzic: “Specification by Example: How Successful Teams Deliver the Right Software”.

Fowler, Martin:”Domain Specific Languages (Addison-Wesley Signature)”.


Reality over the Plan

Big front-end designs are bad, because they do not match the reality. The devils are really in the details. However, the cost of changes is considered too high and the illusion of predictability makes us close our eyes on reality.

In Scrum we say that we should focus on infrastructure and architecture in the first Sprints. Decisions about our software development environment, tools and architectures are not easily reversible. The situation is much worse in the construction business. If we are building a bridge or a tower of Eiffel we can’t start it again from the beginning if the base is not strong enough.

The case is not that bad in software development. We use software instead of electronic circuits just because it is easier to change software than hardware.We need to have appropriate engineering practices to change Kent Beck’s famous cost curve. Extreme programming contains many practices that are needed to make the code easy to change. In addition to these we need solid architectural principles and rigorous attitude to quality.PowerPoint architectures outlined at the first Sprints are not good enough. We need executable architectures and extensive testing with highest priory business functionality to make sure that the quality attributes, non-functional requirements, are OK, before we continue deeper.We don’t stop to that. We require that the architectures are easy to change. Ease of refactoring and testing can be achieved with known design patterns.

My colleague has written a provocative blog entry about the current situation of agility.Actually, we are promoting our new course: Agile Engineering Practices, which can be used as a part of Certified Scrum Developer curriculum.

Visual software design with themes and epics

My talk in Scum Gathering Amsterdam is now visible. See more about visual software design with themes and epics The place: 10:00 – 11:00am on Tuesday, November 16 in Foyer

Synopsis: We have issues like user stories, themes, epics, UI mockups, business rules and acceptance tests that are used in creating our understanding of what to do and how. We groom product backlogs and have Sprint planning meetings and design tasks in Sprint backlogs. This IdeaCamp session pursues to tell us how to put these all together in real life projects.

The slides and result flip charts are now available at SlideShare. I like especially the idea of drawing users’ value stream with epics shown by one of the groups in the idea camp.

New lean and agile books

I bought some lean&agile  books to read during my summer holiday. The list is not complete because I have already read quite many of them. I got Mike Cohn’s new Scrum book freely from the publisher. Thanks about that.

Craig Larman: “Scaling Lean and Agile Development: Thinking and Organizational Tools for Large-Scale Scrum: Successful Large, Multisite and Offshore Products with Large-scale Scrum (Agile Software Development)”.

Lisa Crispin: “Agile Testing: A Practical Guide for Testers and Agile Teams (Addison-Wesley Signature)”.

Mary Poppendieck: “Leading Lean Software Development: Results are Not the Point (Addison-Wesley Signature)”

Roman Pichler: “Agile Product Management with Scrum: Creating Products That Customers Love (Addison-Wesley Signature)”.

Lyssa Adkins: “Coaching Agile Teams: A Companion for ScrumMasters, Agile Coaches, and Project Managers in Transition (Addison-Wesley Signature Series (Cohn))”.

David J Anderson: “Kanban”.

Jason Fried: “ReWork: Change the Way You Work Forever”.

James Coplien: “Lean Architecture: for Agile Software Development”.

Daniel H. Pink: “Drive: The Surprising Truth About What Motivates Us”.

Chip Heath: “Switch: How to Change Things When Change is Hard”.

Origin of waterfall

A short history of waterfall

As experienced people remember the eve of software development was agile. Waterfall emerged because the prevailing management thinking embraced it. There was a quest for more rigor and predictability and we started to talk about software engineering which would improve our quality and productivity. More planning was an obvious solution when plans were failing.

When the systems grew the developers began to specialize, which was based on the prevailing mass production paradigm. Functional organizations were the norm everywhere. Because it was difficult to find skillful programmers, the tasks were divided so that cheaper and available labor could be used for defining, testing and documenting. Promotions to project managers enabled the traditional corporate ladder hierarchy.

Outsourcing was tried to solve the software crisis by decreasing the unit cost of the huge amount of work that was required for writing each single line of code only to find out that the distribution created another layer of complexity.

Massive process guides tried to catch every possible view of software development to make it predictable and repeatable. 80s was the era of methodologies. After that we got quality initiatives like CMM which created a quagmire of documentation and turf wars between them. It was still very difficult to tell how to create software because we have so many variations of it and its development. You had to write either something that is right and so generic that it does not help or something that must be applied or something which fits only to certain kinds of software development.

CHAOS reports told that the majority of software development project were not successful. Success factors were extracted and we found that the requirements and capability of making decisions are the keys to success. Systems thinking explains the failure of old straightforward initiatives. Specialization, outsourcing and rigorous processes answered well to one visible view of software development but they did not optimize the whole. Big front-end planning did not create better plans because the plans were frozen prematurely without appropriate testing and feedback.

In the 70s computers were less powerful than they are today. The programmer wrote the code to a paper based on which punch cards where created. Then the cards were read, compiled and finally executed. If anything went wrong the programmer had to make corrections and try again. The length of the development cycles might have been several hours if not days. Barry Boehm’s famous paper published in 1981 about software development economics was based on studies of the projects earlier than that. So it is natural that it concluded that the cost of a change is so huge that errors should be prevented at practically any cost. Reviews and careful table testing were the ways to prevent errors.

Waterfall was born due to the management paradigms but it is useful to consider the feasibility of modern iterative development using the technology of the past. Essential practices like continuous integration and automated testing were difficult but not outright impossible in all of the projects. Programming cycle times have not prevented agility after the punch card. The “mythical man-month” of Fred Brooks was written in 1975 but this was unfortunately not enough to change the history of software development.

Unit testing EJB 3

My colleague at Tieturi, Arto Santala, has written a series of three blog entries about unit testing in EJB 3 environment. It is in Finnish but you might get the point through the code examples without our language.As an idea unit testing has been known and used for decades but examples in blogosphere focus on simple situations instead of complex cases of real life. When we do unit and acceptance testing in industrial scale, we need to go deeper considerations about maintainability and performance of the test harness.

Innovation requires skill, motivation and courage

Innovation is not just brainstorming with fancy techniques. Truly new business ideas need well grown skill, deep motivation to struggle through all the forthcoming difficulties and courage to put enough effort to make it successful.

A stereotype of an inventor is a mad man who works to create a perpetual motion machine. He has limited education to base his inventions but decades of hard work is a kind of substitute of that. Chances of success are limited because it is easier to be creative at the spearhead of science. Motivation is a required because innovation is not just heureka moments in brainstorming sessions but persistent work to try different things, ideas and variations.

Many of the ideas we get are indeed doable, but not commercially feasible or the manufacturing process is not feasible.I believe in intrinsic motivators, but money is not totally out of the table, because we need money to fund the materials and inventor’s time for a long journey of trials and errors – inventors use empirical process control. Many useful inventions are out of reach of individuals, because of expensive equipment that is needed. On the other point view, governments typically overspend because too much money is chasing too few ideas. Just think of ITER.

Courage is important because new innovations break our barriers of thoughts. Something that we believed, was found to be not true. Saying that is not easy. It is easier to let it be. So, employees have no reason to innovate. They get their salaries without and hunger overcomes the desire to create something great. People have ideas but they do not go ahead with them, because that will do harm. Remember that the majority of the ideas are not that great when studied more. And if it happens to be a success story, it is not just fair that your employer gets it for free. You might get a 100 € bonus 🙂

Universities are thought to be sources of innovation. Ph.D’s have the theoretical knowledge to synthesize new ideas but current world is very eager to make sure that the big companies get the results. Tight research funding narrows the focus of the researchers. You must complete your Ph.D in four years. To do so, you take part of a large team that is sure of about the results when they start.

BTW. I found an academic study of this topic. Creativity and innovation in the Systems Engineering process [PDF].