The software development process can be a complicated tango of deadlines, constraints, and expectations. Knowing this, companies must have an increased focus on the makeup of their software development teams. Unlike a master chef who carefully selects ingredients for the perfect dish, most software development teams have less precise methods for inclusion. This in no way discredits the skills and talents of individual members, but team dynamics play an undervalued role in productivity and output. The production from team to team varies and is not simply a metric of (developers x hours) = output. Placing the five brightest or fastest developers on a team does not guarantee a "dream team" with unbounded productivity.
Building a productive team begins with understanding the talents and skills of each member. The goal is to have a well balanced team. This balance is achieved through diverse programming skills, varying personalities, and personal strengths. As with any professional sport, different positions are required to build a competitive team. Placing individuals with opposing strengths may seem counterintuitive but the results speak loud and clear. Over time these individuals gain invaluable experience and insight from one another. Placing individuals in the correct roles within a team helps lay the foundation for a successful team, but that still does not guarantee success.
Why is this? The answer does not directly correlate with coding, requirements, timelines, or any other project related subject. All effective software development teams have two things in common. They trust and hold each other accountable. Although this can be the basis for any team, software groups rely heavily on individual contributions. As the saying goes, "Rome wasn't built in day." It also wasn't built by one person. The ability to trust others in a business environment can be challenging, but it is vital. Trust drives team confidence. Team members expect each other to pull their own weight. The distinction between "their weight" and "equal weight" is important. People aren't mass produced each person comes with a unique set of talents and traits. When members display this reliability, a team's trust and comfort level improves.
Part of establishing trust in business includes holding one's self and team members accountable. This must be accomplished in a respectful and tasteful manner with proper tact. Accountability is not about finger pointing or taking the blame. It's about identifying a concern, having open dialog, and providing team support for any resulting decision/action. This checks and balances system cannot be optional for members. When a project or release fails, the team fails; not individuals. This recognition by the team is an important building block. Without trust, accountability, and proper team dynamics a project will struggle to succeed.