Structuring a Software Development Team: The Roles and Expectations
January 20, 2022 / Katarina RudelaSoftware development has certainly evolved from its origins, where a single programmer could create a game-changing application at home during off hours. Today’s software developers typically work in large cross-functional teams composed of many specialists in multiple programming languages as well as generalists who can work on many parts of the project. Assembling the right team is one of the first steps in a development project, which involves much more than simply throwing a bunch of top app developers together and hoping for the best.
Once created, the team must be properly managed to obtain the greatest use of team members’ skills. The size of the team is a crucial factor in determining the most effective type of management, especially when it comes to maintaining open lines of communication. Other best practices in team management aren’t strongly related to team size.
Common Structures
Project managers can use many types of structures for their software development team, largely depending on where the team members’ skills lie on the spectrum between technological expertise and product knowledge. Team composition is a critical factor in determining the best approach to use for development. The chart below shows these relationships:
Figure 1: Characteristics of Software Development Team Types
Take the approach spectrum between bureaucracy and autonomy, for example. A product team is equally suited for each end of this spectrum, whereas technology and hybrid, or matrix teams, heavily favor an autonomous approach to development. It’s important to firmly establish your team’s structure first before attempting to prioritize tasks in the development process.
The core competencies needed in software development may generally be classified into the categories of engineering, design and product. The figure below shows the questions that each type of competency attempts to answer:
Figure 2: Competencies for Software Development Team Types
For example, the figure above shows that the design competency focuses on determining the user’s experience, mental model and behavior when using the software.
Top software companies recommend using a team structure that combines the three competencies, although their proportions in a specific team can vary greatly. The simplest structure represents each member of this triad equally, resulting in a team that can achieve reasonable success with any development approach. On the other hand, emphasizing one competency over the other two provides a structure that will be more successful with some approaches than others. For example, a team composes mostly of engineers would favor an approach based on technical specialization. Some teams also use subteams with different mixtures based on the other teams they need to collaborate with.
Approaches
The basic approaches to team structure can generally be classified into generalist, specialist and hybrid structures. In an ideal world, generalists and specialists would collaborate effectively on a software development project without any conflict, which obviously doesn't occur in practice. Each project has its own set of challenges, generally consisting of time and budget constraints. For this reason, a custom software development company typically uses the generalist structure.
Generalist
A generalist structure includes team members with a broad range of skills and experience. They usually perform many tasks to support the project throughout its entire development.
The greatest advantage of a generalist structure is that all team members know how the product works, making it easy to focus on product development. They’re also able to complete tasks independently of each other. However, the lack of specific knowledge on technology means this type of team will often need to add new members to handle technological advances that occur during development.
Specialist
A specialist structure uses team members with highly specialized skills, who have narrow responsibilities and perform specific tasks. Each member is proficient in a particular niche that contributes the overall project. Commercial software development teams typically use this structure.
The biggest advantages of a specialist structure include the team members’ detailed knowledge of specific project areas, and the ability to develop a quality product without significant lag. The most common disadvantage is that these individual parts may not fit together as well, since each team member works independent way. Furthermore, the lack of general knowledge can result in communication gaps between team members.
Hybrid
A hybrid team that combines the generalist and specialist structures can focus on the entire project, while still offering expertise in specific areas.
The biggest advantage of this structure is that specialists can develop the elements, allowing generalists to ensure that each element is properly integrated into the rest of the project. The development process of a hybrid structure is thus highly effective. The primary disadvantage is that team members have different approaches to work, making it challenging to manage them. It also takes more time and money to build a hybrid team then either a generalist or specialist team.
Roles
The roles in a software development project may be classified into the client and the development team itself, as shown in the following diagram:
Figure 3: Software Development Team Roles
Client
The client of a software development project is the owner of the idea behind it, whether that individual or group is internal or external to the organization developing the software. The client shares expectations with the developers and is therefore responsible for preparing detailed documentation on these ideas. Additional duties of the client include collaboration with technical experts on the team in the preparation of this documentation, especially in the case of in-house clients.
Project Manager
Project managers (PMs) coordinate the planning and execution of the software development project, ensuring that it continues moving forward. They're also responsible for managing the relationships between the development team and project stakeholders. The PM manages all processes in the project, assigns tasks and ensures they remain aligned with the overall project timeline.
Business Analyst
Business analysts (BA) set goals and analyze business processes that the software will perform. They also ensure the client's business model aligns with the technology implemented by the software. BAs must have the foresight needed to identify the components that fail to achieve this goal and help establish the business goals of the software.
UX/UI Designer
User experience and user interface (UX/UI) designers focus on the software's functionality and usability. They create the interfaces that will allow users to interact with the software, and also ensure that the software's features and functionality address the users' pain points.
Developers
Developers write the code for the software, including front-end and back-and coat. Front-end developers work on the visible elements of the software such as the interfaces. Back-and developers work on the software's functionality, which generally remain invisible to the users.
Quality Assurance
Quality Assurance (QA) engineers test the software to ensure it functions as intended. They also verify that the software aligns with the clients' expectations and established standards for software development. QA personnel serve as the software's final editor, so they should have a keen eye for detail. This ability helps them detect errors in software, so the development team can fix them before sending the final product to the end users.
Agile Software Development
Agile software development is a significant departure from the traditional waterfall model. The development teams for an Agile project therefore have additional roles besides those already discussed. The primary differences between the two development models include people and interactions taking precedence over tools and processes in Agile development. The Agile methodology also favors the development of functional software and customer collaboration over comprehensive documentation. Finally, Agile development places a higher priority on responding to change than complying with the existing development plan.
The figure below identifies the new roles for an Agile software developer project:
Figure 4: Agile software development team structure
The roles of product owner in scrum master are new for Agile development.
Product Owner
The product owner (PO) is a major stakeholder for an Agile project and is tasked with the responsibility of ensuring the product meets the client's requirements. Individuals in this role must therefore possess extensive knowledge of the product and its users, allowing them to coordinate the product's internal aspects. A PO also provides the development team with support and coordinates their operations to ensure the product is ready for market.
Scrum Master
Within the context of Agile development, a scrum is a methodology that allows the development team to respond quickly to change, as required by Agile principles. The scrum master is the person who manages this process.
Management
Many people experience difficulty in managing a team, especially when its members have skill sets that fall outside the manager's expertise. In the case of an enterprise software development team, team members are often highly specialized, so the prospect of managing them can be daunting even when you're a developer yourself. For example, a chief technology officer (CTO) who already has extensive experience in developing software will find that managing a data development team is an entirely new process from writing code.
Many people aren’t natural leaders, but they may still be able to learn this skill. It’s still possible to lead a development team to success regardless of your current knowledge or experience. The following best practices show how to develop software efficiently and deliver a useful product on time.
1. Define goals and expectations.
Gathering user requirements is typically the first step in a software development project. These requirements describe the minimum specifications needed to consider the product complete and successful, making them essential in determining the project's overall success. Managers must therefore present their specific expectations and objectives to the development team as well as the methods for achieving them. This is also the point at which managers should instruct the team to focus on speed or quality.
Consistency is a key requirement when explaining expectations, policies and procedures, as dealing with unpredictability can quickly exhaust team members. Part of this practice is remembering that all team members ultimately contribute to the project's success. It's therefore essential to avoid holding the opinions of team members in one role will above the others or to dismiss the opinions of team members in a particular role. All of these professionals must work together to achieve the desired outcome.
2. Choose the team structure that’s most relevant to your project.
A particular team structure can be highly effective for one project, but dysfunctional in another. A team structure that aligns with the project's collaborative and operational requirements is necessary to prevent lags in development or actual failure of the project.
This process includes building a chain of command that clearly establishes the team's operation from the beginning of the project. In particular, team members need to know who to inform when something goes wrong. This person might be the PM, but large teams may require low-level team members to escalate issues to an intermediary. PMs may also need to report issues to a higher authority, especially if those problems fall outside the PM's area of expertise.
It may also be necessary to split large teams into smaller ones, primarily for the purpose of facilitating the contributions and collaboration of team members. This is usually the case when the team has more than eight members, although teams with as few as four members may benefit from splitting. It's also important to keep teams and subteams balanced with the right roles and responsibilities. It's often necessary to change a team member's role during the project, especially when its focus or direction changes.
3. Empower team ownership.
Research consistently shows that providing team members with ownership of the project improves their performance. It's particularly important to enable creativity in a software development team, ensuring they remain efficient and innovative.
This process includes allowing team members to pull the agile initiative rather than forcing it on them. This approach helps create buy-in, which is particularly important for agile development. Project stakeholders must also support this methodology, which often requires the PM to educate them. Additional methods of empowering team ownership include the use of multiple iterations to refine the team plans. Team-focused goals also provide the members with the opportunity to improve their performance.
4. Grant autonomy to your team members.
PMs who micromanage that team members often introduce more problems are project than they solve. It's important to recognize that all members were hired for reason even if you played no role in that decision. This doesn't mean that every team member has the same level of responsibility, but you should empower them to act independently to the extent practical.
Some team members may find such autonomy difficult at first, especially those with less experience. Look for ways to encourage them by letting them know which decisions they can make on their own. Holding team members accountable for their actions is an essential element of the economy. Provide them with platforms for describing the responsibilities and how they plan to meet them.
5. Assign tasks.
The members of a software development team will often have diverse responsibilities and specialties, even among those serving in the same role. A PM needs to understand the responsibilities of each role and assign tasks accordingly. For example, it's typically necessary to distinguish between developers working on the front-end, black-and and full stack. An understanding of these differences helps a PM assign roles accordingly and sure everyone knows what they're supposed to be working on.
Prioritization is a key component of assigning tasks in a software development project. This process generally consists of differentiating between the tasks that require immediate attention and those that don't. In some cases, a manager may need to reassign tasks from overworked team members or even work on them personally.
6. Use collaboration.
Collaboration is a key component of successful software development, but it has become more challenging with the recent increase in remote workers. Improving collaboration under these circumstances requires platforms like Asana, Trello and Wrike to help team members track their progress and visualize the way their parts fit with the rest of the project. Collaboration tools also allow PMs to assign tasks with due dates to multiple team members.
7. Ask questions.
PMs won’t have the answers to all questions on a project, even if they have a technical background. Asking questions of team members is part of the PM’s job, whether it’s a term you don’t understand or clarification on the way a particular task affects the product. It’s always better to ask questions than pretend you know the answers, which will eventually get you into trouble. Addressing these issues when they arise allows you to keep the project moving forward.
8. Conduct one-on-one meetings.
Responsibility for a software development project often causes PMs to focus on the big picture, but it’s also important to manage the individual pieces that contribute to its success. Regular one-on-one meetings with team members keep the PM stay informed on everyone’s progress and allow team members to share their thoughts and concerns. They also provide the PM with an opportunity to learn their team members’ personalities and help them work better together.
Summary
The increasing complexity of software development is the result of several factors, including the general growth in size of these projects, the skill sets needed, technological advances and the routine use of remote workers. Organizations that develop software must therefore devote greater effort into building these teams to ensure the project’s success. Many structures can be used in this process, with the best choice depending on factors such as the expertise of the team members and the preferred approach to development.
The trend towards multidisciplinary teams has also contributed towards the current challenges in managing an effective software development team. These teams are no longer composed of only developers, so PMs must be prepared for team members with highly varied backgrounds. Following best practices in project management is thus essential for ensuring success in today’s custom software development.
About Baytech
Baytech is passionate about the technology we use to build custom business applications, especially enterprise solutions that optimize business processes. We’ve been delivering software solutions in a variety of technologies since 1997. Our success is due to the skill and efficiency of our senior staff, which includes software engineers, project managers, and DevOps experts. All of our engineers are onshore, salaried staff members.
We focus on the quality, usability, and scalability of our software and don’t believe in mitigating cost at the risk of quality. We manage project costs by implementing an efficient development process that’s completely transparent and uses the latest standards and practices to build software right the first time. Contact us today to learn more about how we can help your business. Find us online at https://www.baytechconsulting.com/contact.