Agile & Large Teams

Agile and Large Teams

Scott W Ambler. Dr. Dobb's Journal. San Mateo: Jul 2008. Vol. 33, Iss. 7; pg. 60, 3 pgs
Abstract (Summary)

If you're working with relational database technology, you'll want an agile database administrator (DBA) who is skilled in techniques such as database refactoring, continuous database integration, database regression testing, and agile data modeling. At scale it isn't sufficient to simply focus on project leadership-the technical aspects of project management, such as dependency management, contract management, resource tracking, and vendor management become more critical due to the inherent complexities of large projects.
ยป Jump to indexing (document details)
Full Text
(1917 words)
Copyright CMP Media LLC Jul 2008

[Headnote]
Size is in the eye of the beholder

AGILE SOFTWARE DEVELOPMENT techniques definitely scale. In Dr. Dobb 's 2008 Agile Adoption Survey we saw that organizations are applying agile strategies in a variety of team sizes, including teams of over 200 people. For example, Lotus Sametime 7.5 was developed by an agile team of over 200 people at the peak of the project and within IBM there are other agile projects on the order of 500-600 people. At the Agile 2006 and 2007 conference, there were experience reports from agile teams of several hundred people. I expect the same at this year's conference, to be held August 4-8 (www.agile2008.org). Because one team organization structure does not fit all, this month I share strategies for organizing teams of various sizes.

A few years ago, Larry Constantine presented the best definition of a large project that I've ever run across: A large project is 20 percent bigger than any project you've successfully accomplished in the past. In other words, size is in the eye of the beholder, regardless of what the spammers may claim <smile>. For example, some organizations may consider a 20-person project to be huge whereas others may consider a 200-person project to be merely mid-size. For the sake of this discussion, the border between small and medium-sized project teams will be around 15, and between medium and largesized teams around 50.

Agile in the Small

Most agile teams are less than 10 people and colocated. Although this sounds naive, Jim Highsmith has estimated that close to three quarters of all software development teams, be they agile or not, are less than 10 people in size. In this relatively simple situation, you can adopt a simple team organization structure, as in Figure 1. Agile team members, particularly on small teams, tend to be generalizing specialists (www.agilemodeling.com/essays/generalizingSpecialists.htm) who have one or more specialties such as Java programming or testing, at least a general knowledge of the software process and of the domain that they're working in, and the willingness to collaborate closely with and learn from others.

What you typically read about in the agile literature is how a team of developers, lead by a team coach or "Scrum Master" works closely with a product owner who represents the stakeholder community to build a high-quality working system on an incremental basis. What you don't hear about as often is what I call the "supporting cast"-the technical experts, domain experts, and optional independent tester who help the team to succeed. Sometimes the team needs the help of technical experts, such as build masters to set up their build scripts or a database expert to help tune their database. Similarly, sometimes the product owner will bring in domain experts to work with the team, perhaps a tax expert to explain the nuances of a requirement or the sponsoring executive to explain the vision for the system. Effective agile teams often have an independent test team working in parallel that validates their work throughout the lifecycle (see "Scaling Test Driven Development, www.ddj.com/ architect/205207998). Domain and technical experts are typically brought into the team for a short period of time, perhaps only a few hours or days, to help with a specific task. Independent testers and agile DBAs work with the team on an ongoing basis.

Medium-Sized Agile

As the size of your team grows, starting at 15 and perhaps up to 50, you'll see a team structure similar to Figure 2. You may also start to see some of the coordination groups of Figure 3, particularly if you organize your team into a collection of subteams. As the team size grows, the independent tester(s) move from being optional to mandatory due to the complexities of the domain problem being addressed.

If you're working with relational database technology, you'll want an agile database administrator (DBA) who is skilled in techniques such as database refactoring, continuous database integration, database regression testing, and agile data modeling. Small teams will generally spread this work amongst themselves, but as the team grows it makes sense to have someone in the role to focus on data issues. Agile DBAs work closely with developers, ideally pairing with them, to do database-related work. Greater detail about this role and the requisite skills can be found at the Agile Data site (www.agiledata.org).

Big Honking Agile

When the size of an agile team gets to be around 20 or more, you discover that you need to divide and conquer and take a "team of teams" approach. The typical strategy is to organize your larger team into a collection of smaller teams, and the most effective way to do so is around the architecture of your system. Each subteam should be responsible for one or more subsystems, enabling them to work as a small agile team responsible for delivering working software on a timely basis. This strategy is often referred to as "Conway's Law" after Melvin Conway who introduced it in the late 1960s, and is one of several lean development governance strategies.

Figure 3 depicts the strategy for organizing a large agile team into a collection of smaller ones. The primary difference is the addition of the coordinating body, something that is typically required around the point where a team is made up of 50 or more. The coordinating body is organized into three subteams:

  • The project management team (sometimes called the "program management team") is comprised of the team coaches from the various subteams, and their goal is to coordinate the management aspects of the overall team. At scale it isn't sufficient to simply focus on project leadership-the technical aspects of project management, such as dependency management, contract management, resource tracking, and vendor management become more critical due to the inherent complexities of large projects. This team is likely to have a short coordination meeting each day, referred to as a "scrum of scrums" in the Scrum methodology, where current status is shared and issues are identified.
  • The architecture ownership team is comprised of the architecture owners from the subteams and is responsible for architecture envisioning at the beginning of the project (www.agilemodeling.com/essays/initialArchitect ureModeling.htm) to identify the initial technical direction and provide a basis for organizing the subteams. In the first week or so of the project, their goal is to identify the subsystems and their interfaces, a strategy called "managing to the seams" reducing the coupling between subsystems and thereby reducing the amount of coordination required by subteams. Throughout the project this team will meet on a regular basis to share ideas and resolve technical issues, particularly those surrounding changes to the interfaces of subsystems. They may choose to meet daily (this is particularly common at the beginning of the project) but as the architecture stabilizes, it is common to see them meet once or twice a week.
  • The product ownership team is comprised of the product owners of each subteam and is responsible for coordinating the requirements effort across the subteams. They will need to negotiate requirements with the larger body of stakeholders whom they represent and diwy them out among the subteams appropriately. They'll also need to negotiate the inevitable disputes between subteams as to who should do what and what a requirement actually means. This is a challenging job, and as I described in "Scaling On-Site Customer" (www.ddj.com/architect/ 204801134), the product owners need solid business analysis skills.

The coordinators will collaborate as appropriate-they don't need to wait for their official meetings to communicateputting people together teams to resolve issues as needed. Coordination naturally becomes more complicated when your team is distributed, particularly when subteams are in different time zones.

An interesting observation is that as the size of the team grows, there is very little difference in the day-to-day activities of developers. They are insulated from the complexities of large teams by activities of the coordinators.

Size Matters

If you don't see your traditional job role on the diagrams, there's a good reason-the work is likely being done, but in a different manner. For example, product owners and developers do business analysis, yet the role of business analyst doesn't appear in any of the diagrams. I often work in organizations that have traditional roles such as business analyst, quality assurance analyst, architect, designer, and so on in their organization/process charts. Invariably these organizations are still transitioning to agile and are still in the process of evolving their culture to reflect agile philosophies. It takes time, often several years, to shift to the agile paradigm.

Perhaps the spam is right after all-size does in fact matter because it is one of the determinants of your team organization. The agile community is in the process of rediscovering the divide-and-conquer techniques of yesteryear, applying them in more collaborative and lean ways, but inevitably in a manner that experienced IT professionals will quickly recognize.
[Sidebar]
Common Agile Project Roles
There are several roles common to agile teams. Sometimes a person will take on several roles and sometimes several people may be in the same role. Each role is briefly described and common synonyms indicated for most. Some synonyms are inappropriate within the context of agile projects and some are inaccurate. The common agile project roles are:

  • Agile DBA. This person works closely with developers and technical experts to support data-oriented activities on team.
  • Architecture Owner. This person is responsible for the architecture of the system, or subsystem, that the team is working on. Architecture owners don't develop and then dictate the architecture, but instead they facilitate the identification of the architecture, actively help to implement it, guide the implementation of the (sub)system, and mentor developers in the architecture and in architecture skills. Also known as technical lead and architect (inappropriate due to the collaborative leadership nature of the role).
  • Developer. This person models, writes, tests, and documents the system. Also known as programmer (inaccurate due to the scope of the role).
  • Domain Expert. This person has expertise in one or more aspects of the domain. This includes support staff, business specialists, business executives, auditors, and the "gold owner". Also known as a subject matter expert (SME).
  • Independent Tester. This person performs continuous, investigative testing throughout the lifecycle to find defects that were not discovered by the development team's testing efforts. Also known as tester, investigative tester, and guality assurance (inaccurate due to the scope of the role).
  • Product Owner. This person represents the stakeholder community. They are responsible for prioritizing the requirements and are the primary source of domain information. Also known as customer, stakeholder representative, and end user (inaccurate as end users are only one of many stakeholders).
  • Team Coach. This person is responsible for keeping the team on track, for helping team members deal with problems, and for helping the team to secure necessary resources. Also known as team lead, Scrum master, and project manager (inappropriate as this is primarily a leadership role and agile teams are self-organizing).
  • Technical Expert. This is a person with expertise in one or more technical aspects of the system. This could be a security person, a build expert, a tool smith, a legacy data owner, an operations staff member, or many other technical roles. They are brought on to the team on an as needed basis for a short period of time, sometimes just a few hours or days, to help them address a technical issue. Also known as subject matter expert (SME).

[Author Affiliation]
Scott is Practice Leader Agile Development for IBM Rational.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License