As an IT professional, you work in an industry where even well planned software development projects executed by well-organized teams can still be prone to failure. Nonetheless, due to growing competition and the present economic climate, businesses increasingly rely on improving efficiency and productivity through technology solutions. The role of the software development team has become critically important. In this lean and competitive business environment, the quality of the software development team doesn't simply impact project failure rates; it impacts business failure rates. So what makes an effective software development team?
Communication is typically what makes or breaks a development team. Even if all other aspects of the team are ideal, when communication is lacking, you will have sub-par performance. Effective communication can also allow teams to overcome many less than ideal circumstances. Good communication tends to hinge on several things. Listening skills are a must. If one cannot hear, evaluate and understand the message, one cannot effectively respond to it.
"Team members must have sufficient understanding of one another’s roles in order to communicate intelligently about their cooperative efforts," said TDK Software Architect Lee Harkness.
Individuals should also possess the emotional intelligence required for successful communication and relationship management. Emotionally intelligent individuals are more self-aware, socially aware, and aware of the emotional subtleties of both verbal and nonverbal communication. Teams that communicate well are also better at self-regulating and self-motivating.
Direction, Buy-in and Ownership
For software development teams to function effectively, the team must have clearly defined goals, objectives, strategies and tactics. The team must buy in to these as well.
“The team must buy in and believe in the scope, schedule and success of the project. The team must have a clear direction, clear expectations and all drive toward a common goal. Teams and projects too often fail when there is not a clear direction and buy-in,” TDK Principal David Kocs explained.
The team should feel a sense of ownership of the work. Buy-in to the development approach is required. A coherent chain of responsibilities must be present, as well as ownership and continuity of artifacts and deliverables. Everything from requirements to code must be accounted for in the chain of team responsibility and ownership.
Workplace teams require a quality work environment. There has to be mutual trust and support between the team and management, as well as among team members. There should be transparency in terms of knowing what is going on in the company. There should be a sense of job security and the feeling that the success of the team improves it. Team members should be compensated with equitable pay, and there should be compensation and/or rewards tied directly to the success of team projects.
More specific to software development teams is the selection of the appropriate software development methodology for a project. Development environments with mismatched methodologies and projects are prone to failure. Therefore, the best development environments are not limited to using only one methodology, but are instead open to changing methodologies based on business needs. Software development teams also require hardware, software and tools that adequately support the development process. They can benefit from quality office equipment and collaboration tools to aid in communication and coordination. In general, they require the type of equipment, tools and furnishings that enable maximum efficiency and productivity. Let's not forget camaraderie, either. Goodwill, rapport and friendship underpin the trust and support essential to the success of the team.
The organizational structure of the team plays a critical role in its success. Software development teams function best when they are organized into small sub teams. There should be clear delegation of responsibilities to sub teams. Team organization structure is largely determined by the resources available. Consider three types of organizational structures:
- Generalist structure: Sub teams consist of individuals with a broad range of experience. These teams typically manage end-to-end development of artifacts.
- Advantage: There is greater continuity of artifact ownership throughout the project and enhanced focus on the improvement of the system as a whole. Project management is simplified by the ability of generalists to understand one another’s roles and responsibilities, which facilitates more effective communication and cooperation. Software traceability is easier to accomplish.
- Disadvantage: Problems that require a high level of specialty expertise are more difficult to address. There may be less focus on improvement of the individual parts which make up the system as a whole. Project management may increase in difficulty due to inability of generalists to complete within time and budget constraints those tasks that require specialist expertise.
- Specialist structure: Sub teams consist of specialists. These teams typically work on several artifacts, focusing on the aspects that align with their specialty.
- Advantage: Aspects requiring special expertise are dealt with more efficiently and effectively, resulting in a higher quality of work for all the distinct parts that make up the system as a whole.
- Disadvantage: Sometimes the focus on improving a specific part of the system a specialist is responsible for does not improve the system as a whole. Lack of continuity in ownership can result in problems ranging from scope creep to developing components that are not well suited for the final software product. Communication and cooperation is less effective between specialist sub teams that don’t always understand each other’s roles and responsibilities. Software traceability is more difficult.
- Hybrid structure: Both generalist and specialist sub teams exist. Generalist sub teams oversee end-to-end development of artifacts. They also work with specialist sub teams responsible for the aspects of the artifact that align with their specialty.
- Advantage: Generalists improve the continuity of artifact ownership and maintain focus on building functional parts that easily integrate to form the system as a whole. Generalists also improve communication and cooperation between specialist sub teams. Specialists increase the quality of the individual parts and provide the ability to deal with specialty problems efficiently and effectively.
- Disadvantage: Finding the resources to create hybrid teams is more difficult and costly. Project management may increase in complexity when managing both vertical and horizontal sub teams. Additionally, while well-organized hybrid teams tend to provide the best of both worlds, poorly organized hybrid teams can just as easily bring out the worst of both worlds.
The most versatile and capable teams tend to be of the hybrid type.
“As a program manager it’s best to work with a mix of folks. You need generalists to effectively speak the business language, and specialists to translate those needs into technical specifications,” TDK Director of Project Solutions Kevin Rhoades explained. "This is especially true when top quality generalists are available and organizations possess the ability to find the ideal specialists based on project needs. However, team structure ultimately depends on the resources available, and the approach to managing the project must match the team structure."
Ideally, generalists should have a broad range of experience, the ability to rapidly learn and adapt to new situations and be problem solvers by nature. Specialists should not only be experts in their designated area, but should have at least a general understanding of the other roles and related technologies involved in the project. Generalists can add value by developing specialist understanding of the types of projects they typically work on. This is true even for program and project managers who are generalists by nature.
Individuals should possess good communication skills. They should be driven by the desire to add value to the team and to the software project as a whole. Sometimes this includes coming to grips with the fact that ways to improve something an individual or sub team is working on doesn’t always improve the entire team or the final software product. Individuals should know their own skill levels and roles, and not be discouraged by those who add more value and receive greater compensation. In fact, this should be motivation to obtain mentorship and improve their skills and experience. Team members must be willing to accept ownership of their roles and responsibilities, but also to understand and assist others. After all, the ultimate deliverable, the software product, is delivered by the team.
Effective Software Development Teams Require…
Effective development teams require effective communication, as this trait maximizes the strengths and minimizes the weaknesses of the team. The team should have a clear direction, a sense of ownership of the work, and buy-in to the process. Teams require a quality workplace environment, as team results are likely to reflect, not correct the environment. A hybrid team structure is ideal, but ultimately the team structure must match the individuals available and the needs of the project. Although the cliché “a team is only as good as its weakest link” may be an exaggeration, the most successful teams certainly consist of individuals who know their roles, excel at them, and excel at working with others.
“A team can be a fragile thing, and the personality of even a single team member can have a potentially huge effect on its performance,” Harkness explained.
Which brings us back to the central point. Communication is typically what makes or breaks a development team. Effective communication allows individuals with different personalities and skill sets to work together as part of a cohesive whole. For if a software development team is an engine, and for an increasing number of businesses it is THE engine, then communication is the engine’s oil.