In today's software development environment, there are many teams that are capable of delivering and producing software. But there are also those who fail to meet the delivery requirements usually due to time or budget restrictions and which could be considered a failure.
There are various reasons that contribute to software development failures, recorded through empirical studies or anecdotal evidence. Some of these include poor requirements specification, scope creep, poor management, no user involvement, poor communication, or lack of testing.
Given that these are some of the factors that can negatively affect the success of the project, the theory suggests that if a project does not encounter any of the negative factors mentioned above, a project should be a success.
Someday in the future, it may be possible that all projects will be a success as we'd probably create an Artificial Intelligence to create software. Happy customers and flawless software, what more could any software engineer ask for?
Until that time though, software will be created by us - humans whom we group and cluster into optimized teams in an effort to reach the happy customer and flawless software utopia.
Over the course of many years being involved in the various facets of software projects from inception, development and eventual go-live of projects, a key and critical success factor has been the teams on these projects. This has begged the question in my mind: what factors of a team contribute to a project's success?
Trying to answer this question led me to an overarching description of such teams - High Performance Teams (HPT). In my experience, a HPT is one with key attributes that contribute to a successful project. In real terms this means a team that presents the following five characteristics:
1. Delivers continuously at a steady pace.
2. Displays a positive sentiment: They want to come to work, they are eager to make the project a success, they are eager to be part of the team, they have a sense of satisfaction from the work they do and they have a sense of purpose.
3. Eager and willing to contribute to the project and to the people around them.
4. Seeks every opportunity to improve their skills; either on a project and/or in their role as a leader, and finding ways to facilitate these opportunities while balancing delivery and making sure timelines are met.
5. Realizes the importance of mentorship and that team is only as strong as its weakest member: This creates a strong mentorship environment where the seniors are providing constant and regular feedback to juniors to improve themselves, and seniors in turn gain valuable experience with mentoring, which serves to position them as leaders within the team.
However, even with these five attributes in place, there are other operational features that can influence a project's success.
Empowerment and Decision-making
A team that is afforded the ability to autonomously and pro-actively make decisions on project is key for several reasons.
Firstly, a HPT can action items immediately, items which would otherwise require several layers of approval. Typically, this is because they have a much closer view of the project at hand. As such, they are well suited to make key decisions on the project, since they are closest and understand the potential impacts better.
When it comes to problem solving, HPT teams define and identify the solution space and work within those boundaries. However, they are also not afraid to clarify or challenge the status quo, and due to their closeness to the project are able to think creatively about how to solve problems.
A HPT that is empowered often absorb high levels of responsibility and accountability. They take responsibility for their decisions, can justify their actions and decisions, and are not afraid to accept responsibility when things do not go as planned. Plus, they make sure that everyone accepts accountability for the roles.
In my experience, a successful component of this process is to recognize the efforts of the team holistically and/or individually and consistently provide direct feedback. Feedback ensures the team is always on the same page and can help to improve self-confidence within the team as a collaborative unit.
Furthermore, external factors such as unforeseen changes in the client team, or budget redactions, can present risks and limitations to the team's delivery. It is important that one member of the team keeps an eye on external factors to ensure that the team are able to continue to apply agile planning principles with relevant and necessary information.
There should be only one Head Chef in the Kitchen
Having clear leadership within a team is important. In order for the HPT to make decisions with immediacy and based on accurate information of project and external factors, the team member fulfilling this role must consistently practice a number of leadership traits that serve to support the growth of the team:
1. Keep the end goal in mind and ensure the team is aware of the direction
2. Ensure that roles and responsibilities within the team are well understood
3. Continuously work to improve the skills of the team throughout the project
4. Presents regular status updates to the team
5. Identify and highlight areas for improvement, thereby encouraging growth and skills development
6. Provide constructive feedback with clear guidance on the way forward
7. Provide team sheltering
8. Leverages team diversity and employs the diverse skills and attributes to the benefit your team and its delivery
In some instances, multiple leaders on the team can be useful, especially if they are fulfilling different roles. However, if those leaders are pulling the team in different directions, the team suffers and ultimately compromises delivery. Usually one head chef will help keep the HPT aligned and focused on optimum project delivery.
When these areas are considered holistically, the end results are tangible and contribute to project success. Although we will never stop striving to achieve the happy customer and flawless software 'utopia', leadership who can consciously work to develop High Performance Teams, will be able to build a reputation for consistently delivery successful software projects, and differentiate themselves from the many out there who just deliver and produce average software.