Software development is a complex endeavor. Of course, this news isn’t very surprising because the universe is full of complexity. Most complexities we don’t know about, and others we are content to leave unexamined. Some—like the complex process by which pressure turns coal into diamonds—take care of themselves. Others—for example, commuting to work every day—can tolerate some imprecision. However, it is impossible to ignore complexity in software development. Its results are ephemeral, consisting merely of signals that control machines. The software development process is entirely intellectual, and all of its intermediate products are marginal representations of the thoughts involved. The materials that we use to create the end product are extremely volatile: user requirements for a program the users have yet to see, the interoperation of other programs’ signals with the program in question, and the interaction of the most complex organisms on the planet—people.
This book addresses the extraordinarily difficult process of creating software. In this chapter, I’ll summarize a process for increasing the probability of successfully developing software. This process, Scrum, is devised specifically to wrest usable products from complex problems. It has been used successfully on thousands of projects in hundreds of organizations over the last 10 years. It is based in industrial process control theory, which employs mechanisms such as self-organization and emergence.
This book is about the ScrumMaster, the Scrum project manager who heads the Scrum project. The ScrumMaster provides leadership, guidance, and coaching. The ScrumMaster is responsible for teaching others how to use the Scrum process to deal with every new complexity encountered during a project. Because of the nature of software development, there is no shortage of complexities, and there is no way to resolve them without hard work, intelligence, and courage.
This chapter describes how empirical processes are used to control complex processes and how Scrum employs these empirical processes to control software development projects. When I say that Scrum helps control a software development project, I don’t mean that it ensures that the project will go exactly as expected, yielding results identical to those that were predicted. Rather, I mean that Scrum controls the process of software development to guide work toward the most valuable outcome possible.