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
|
-
Motivate people to perform at their best
-
Create self-managed teams.
-
Encourage cross-functional collaboration (e.g. analysts, developers, testers)
-
Provide effective collaborative environments
-
Manage evolving artifacts and tasks to enhance collaboration and progress and
quality insight with integrated environments.
-
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.
|