The principle of collaboration across teams stresses the importance of fostering optimal communication. This goal is achieved through proper people management and the setting up of effective collaborative environments. 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 collaborationwhat some have referred to as the "soft" element of software developmenthave been a primary focus in the agile development community. Following this principle requires answering many questions, such as the following:
The first imperative in effective collaboration is to motivate individuals on the team to perform at their best. The notion of self-managed teams, which has gained popularity in the agile community, 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 that directly influence the result.[1] When people feel that they are truly responsible for the end result, they are much more motivated to do a good job. As one of the principles behind 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 imperative is to encourage cross-functional collaboration. As Walker Royce says, "software development is a team sport."[2] 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 team member must understand the mission and vision of the project.
As teams grow, we need to provide them with effective collaborative environments. These environments facilitate and automate metrics collection, status reporting, and build management, as well as 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 environments range from shared project rooms and whiteboards to networked or Web-based solutions such as Wikis, or integrated development environments and configuration and change management environments. Our fourth imperative under this principle is integration across business, software, and operation teams. As software becomes increasingly critical to how we run our business, we need to create close collaboration among (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 (see Figure 5.1). Figure 5.1. Collaborate Across Business, Development, and Operations Teams.As software becomes more critical to how we run our business, we need to collaborate more closely around teams responsible for how to run the business, how to develop applications, and how to run the applications. In most companies these three groups have poor communication.
The anti-pattern to following this principle would be to nurture heroic developers who are willing to work extremely long hours, including weekends. Another anti-pattern would be to have highly specialized people equipped with power tools for doing their jobs, with limited collaboration among different team members and limited integration of different tools. The assumption is that if everybody just does his or her job, the end result will be good. Let's have a look at some of the practices that will help you achieve the above goals:
|