Part I. Extending Our View beyond Projects

“Computer science is no more about computers than astronomy is about telescopes.”

—E. W. Dijkstra

What Is Software Development?

Some have compared software development to engineering or to building construction. Developers take requirements and build products that customers can use. The problem with this comparison is that, unlike those other disciplines, software development almost never starts with clearly defined requirements and rarely specifies clear approaches for construction. What is needed and how to get there often is often more a process of discovery than a clearly defined, up-front plan.

We often think of software as the end goal. But it is not. Software is a means to an end—a way of getting value to a customer. In software products, the software enables the customer to do things (for example, accounting software enables a company to keep its books in order). In IT organizations, the software supports the services and products of the company. Seen this way, software development can be thought of as the process of discovering what is needed, determining how to build that, and then building it. The advantage of Agile over the Waterfall model is that it enables these three to be done in an evolutionary fashion, incorporating what is learned along the way.

Among other things, this process of discovery helps to mitigate the risks that plague software projects: market risk, the risk that the product specification does not meet the market requirement; and technical risk, the risk that the implementation does not meet the product specification. Don Reinertsen says, “In general, most product failures are caused by market risk. This is not because marketing people are less competent than designers, but rather because market risk is a much tougher problem than technical risk.” (Reinertsen 1997)

The Software Development Team and Flow

When introducing Agile to an enterprise, it is common to start by introducing Agile to individual teams. Early on, this makes sense; however, a broader view is soon needed. For Agile to become useful to the entire organization, you must consider the entire value stream:1 from customers to management to product enhancement to development teams to customer deployment.

1. For now, think of a value stream as the chain of actions that flows from customer input/requirements to product deployment and use.

As shown in Figure PI.1, the flow starts with customers. In commercial product development, these are external customers; in IT shops, these are internal customers who will use the product for business purposes. Ideas originate with recognition of customer needs. They are discussed by management, product managers, product owners, and other stakeholders, such as marketing. These people are represented in the long, horizontal cloud just under the Customers cloud. Together, they determine what products will be built, enhanced, or otherwise supported. They launch projects (shown in the lower-left cloud) that provide a budget for this development work. Development teams (on the lower-right side) work directly on the products to be built or enhanced or as support (component) services that these teams use. When development is completed, product deployment is coordinated by support and management (who initiated the product work in the first place).

Figure PI.1. The value stream of software development

image

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset