21 Scaling Up to Large and Complex Development
The goal of this chapter is to demonstrate the need to evolve the development method as the endeavor situation increases in complexity, and the strategies that can be used to accomplish this. Specifically, after completing this chapter, the reader will be shown
- the sources of complexity in a software endeavor;
- the bottlenecks that might appear in the endeavor if the management dependencies among subsystems and teams are not reduced;
- how scaling was addressed in the past (when technology was the bottleneck) compared to today (when human interaction is the bottleneck);
- the extended view of practice architecture, including the team layer;
- the important role of team alignment toward a common vision, supported by clear responsibilities and division of work; and
- the important role of synchronization for team leads, to align their deadlines and priorities.
When we talk here about “large-scale development,” we mean scaling to development that involves 30 people or more. The number 30 is not a magic number. Some consider 50 or more to indicate large-scale, some 100 or even more.
In large-scale development, the team members are often distributed across geographical locations. They may be in the same building, but we frequently encounter large development teams being spread across different cities and even different time zones. These teams will likely have multiple requirement sources coming from different customers at any point in time. They may also be serving different opportunities from different stakeholder groups. Stakeholder groups might be related or independent of one another. Moreover, each team might have different skill sets and competency levels.
One of this book’s authors has applied Essence practices to a large development endeavor with several hundred people. The trick is to reduce and manage dependencies among subsystems and teams. If this is not addressed, bottlenecks appear quickly and collaboration becomes difficult.
After studying this chapter, you should be able to
- explain possible elements of endeavor complexity;
- explain the difference between the practices at the team layer and the program layer;
- give an example of a practice architecture involving the team-layer practices;
- describe the team perspective on Scrum as a composition of smaller team practices as applied to product ownership, team backlog, team sprint, and team retrospectives;
- list additional steps needed when kick-starting large-scale development (comparing to small-scale development);
- list roles that are employed in a large-scale development endeavor, together with their descriptions; and
- explain the Scrum of Scrums.