Concept: Collaborate Across Teams
This Principle explains how to foster effective collaboration.
Main Description

Introduction

This principle stresses the importance of fostering optimal project-wide communication. This is achieved through proper team organization and the setting up of effective collaborative environments.

      
Benefits
  • Team productivity
  • Better coupling between business needs and the development and operations of software systems.
Pattern
  1. Motivate people to perform at their best
  2. Create self-managed teams.
  3. Encourage cross-functional collaboration (e.g. analysts, developers, testers)
  4. Provide effective collaborative environments
  5. Manage evolving artifacts and tasks to enhance collaboration and progress and quality insight with integrated environments.
  6. Integrate business, software, and operation teams
Anti-Patterns
  • To nurture heroic developers willing to work extremely long hours, including weekends.
  • Have highly specialized people equipped with powerful tools for doing their jobs, with limited collaboration between different team members, and limited integration between different tools. The assumption is that if just everybody does his or her job, the end result will be good..

Discussion 

Software is produced by talented and motivated people collaborating closely. Many complex systems require the collaboration of a number of stakeholders with varying skills, and the largest projects often span geographical and temporal boundaries, further adding complexity to the development process. This is why people issues and collaboration -- what some have referred to as the "soft" element of software development -- have been a primary focus in the agile development community . Following this principle requires answering many questions, including:

  • How do we motivate people to perform at their best?
  • How do we collaborate within a co-located versus a distributed software team?
  • How do we collaborate across teams responsible for the business, software development, and IT operations?

The first step in effective collaboration is to motivate individuals on the team to perform at their best. The notion of self-managed teams has gained popularity in the agile community (see Concept: Agile Practices and RUP); it is based on making a team commit to what they should deliver and then providing that team with the authority to decide on all the issues directly influencing the result. When people feel that they are truly responsible for the end result, they are much more motivated to do a good job. As the agile manifesto states: "Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done."

The second step is to encourage cross-functional collaboration. As Walker Royce says, "software development is a team sport." An iterative approach increases the need for working closely as a team. We need to break down the walls that often exist between analysts, developers, and testers, and broaden the responsibilities of these roles to ensure effective collaboration in an environment with fast churn. Each member needs to understand the mission and vision of the project.

As teams grow, we need to provide then with effective collaborative environments. These environments facilitate and automate metrics collection and status reporting, and automate build management and bookkeeping around configuration management. This efficiency reduces the need for meetings, which frees up team members to spend more time on more productive and creative activities. These environments should also enable more effective collaboration by simplifying communication, bridging gaps in place and time between various team members. Examples of such environment range from shared project rooms, to networked or Web-based solutions such as Wikis or integrated development environments and configuration and change management environments.

As software becomes more critical to core business processes, the need for effective collaboration between teams increases. In most organizations the teams responsible for running the business, developing the applications, and running the applications have poor communication.

Our ultimate goal under this principle is integrated collaboration across business, software, and operation teams. As software becomes increasingly critical to how we run our business, we need to create close collaboration between 1) the teams deciding how to run our current and future business, 2) the teams developing the supporting software systems, and 3) the teams running our IT operations. In most companies, these three groups have poor communication.