| 
    Introduction
    Software is created by people with different interests and skills who must work together to create software
    effectively.
 
    Develop practices that foster a healthy team environment. A healthy team environment enables effective collaboration,
    which aligns the interests of project participants (development team, quality assurance, product stakeholders, and
    customers) and helps project participants develop a shared understanding of the project.
 
    Practices
    Maintain a common understanding
    Project participants require a common understanding of a project to cooperate effectively. Otherwise, disorder sets in,
    because the team members cannot align their understanding and interests, and will then work with different purposes.
 
    Be proactive communicating and sharing information with project participants. Do not assume that everyone will just
    find what they need to know, or that each person has the same understanding of the project as everyone else. Use work
    products (such as the Vision, Work Items List, and Requirements) to align the understanding between the stakeholders and
    developers. Use the architecture to focus and align the interests of the developers. At the end of each iteration, get
    agreement on whether the iteration goals have been reached and, if not, what actions must be taken.
 
    Foster a high-trust environment
    People who do not feel safe will not communicate their ideas, take initiative, or admit their ignorance. In these
    low-trust work environments, activities must be laboriously planned in detail, carefully supervised, and extensively
    audited. A team working in a low-trust environment may not be able to keep up with rapid change.
 
    Take actions that foster a high-trust environment:
 
    
        
            Manage by intent. Create an environment where teams manage themselves, and managers serve as
            mentors to teams to help them complete their objectives.
        
        
            Tear down the walls. Work to remove both the physical and mental barriers that inhibit
            development of a common understanding among project participants.
        
        
            Walk a mile (or 1.6 kilometers) in someone else's shoes. Respect and try to understand the
            perspectives of others before criticizing their ideas or responding to their criticism.
        
        
            Respond to conversations with relevance. People, especially technical workers, often respond
            with argument or disagreement, which leads to rivalry and establishes a pecking order in which only a
            few people contribute to the discussion. Develop and encourage behavior that values curiosity and relevance
            over argument and disagreement.
        
        
            Always look to yourself first for the source of communication problems. Understand that
            everyone has a perspective that is largely invisible to the individual (although it is often obvious to
            everyone else). Develop the habit of identifying the assumptions and prejudices within you that lead to
            argument or lack of communication. Learn to overcome these in the moment of the conversation. This takes
            practice. There are times when others may be intractable, but often the problem can be addressed by wrestling
            with your own perspective.
        
        
            Understand the constraints of the workplace culture. Some organizations operate in a way that
            allows people to admit mistakes, ask questions, and experiment. Some organizations limit these expressions, but
            they may change, with time and effort. Some organizations have no tolerance for error, and their workers put
            themselves in danger if they admit mistakes or experiment. Understand your environment and protect yourself
            accordingly. Understand that low-trust organizations have more problems in achieving their goals, and provide a
            less satisfying environment.
         
    Share responsibility
    There may be disadvantages for individuals when they work alone. Communication with the team can become sporadic, and
    then stop. People may get into trouble and not ask for help, or not realize that the team is in trouble and needs their
    help. Their understanding of the project may become misaligned with the rest of the team. In the worse situations,
    trust breaks down as individuals see the team working at different purposes to their interests.
 
    While individuals have primary responsibility for their work products, responsibility for work products is shared.
    Nothing is someone else's responsibility. This may mean either taking up slack and working with someone who is lagging
    for some reason, or asking for help. Experienced staff should be extra-vigilant and watch over less-experienced staff,
    encouraging them to ask for help if necessary.
 
    Learn continuously
    Not only is software development a fast-developing field where technical skills rapidly become obsolete, it is also an
    empirical process, where software is developed in a manner that sometimes resembles trial and error. Furthermore,
    software is developed by teams of people who must work together to achieve results.
 
    Continuously develop both your technical and interpersonal skills. Learn from the examples of your colleagues. Take the
    opportunity to be both a student of your colleagues, as well as a teacher to them. Always increase your personal
    ability to overcome your own antagonism toward other team members.
 
    Organize around the architecture
    As projects grow in size, communication between team members becomes increasingly complex. While all team members
    understand the overall system, they can focus primarily on the one or more subsystems that they are responsible for.
    Organizing around the architecture also helps with communication by providing the team with a common vocabulary and
    shared mental model of the system. Communication between team members becomes increasingly complex.
 
    Organize the team around the architecture, and the vocabulary and a shared mental model of the system. However, be
    careful that individuals and teams organized this way do not form a so-called silo mentality, where they
    focus strictly on their subsystems and become ignorant of the other subsystems.
 
    An architecture that reflects the organization’s structure is not in itself evidence that the team has successfully organized
    around the architecture. If organizations and teams are not organized around the architecture, then the architecture
    will naturally conform to the organization, as a result of political and cultural influences. In the end, the
    architecture and the organization will almost always be a reflection of each other. The goal is to guide team
    organization from the needs of the architecture as much as possible.
 |