Software engineering is one of the most challenging endeavors we can engage in today. Successful software projects must address the vast scope of today’s applications while paying meticulous attention to the small details that can make the difference between a fast, efficient system and a slow, cumbersome burden. Surprisingly, the things that are most often complained about – short deadlines, moving targets, etc. – are rarely the things that determine how likely a project is to be completed. In our experience, almost all project teams would like more time and have better-defined project targets. Over the years, we have found that the ingredients for success don’t lie in the project; they reside in the team and the tools that support it.
In this post, we’d like to present four ingredients that are key factors in determining if a team will realize the cost, performance, and timing requirements of its projects. Those ingredients are:
- Project managers that assume the role of servant leaders
- Engineers who are smart, transparent, and team players
- A pool of subject matter experts that are supported by the company and available to assist the team’s efforts
- Tooling that supports efficient software development
1. Project managers that assume the role of servant leaders
Successful projects often appear to have been free from the disruptions and changing priorities that plague failed endeavors. However, retrospectives often reveal quite a different story. As mentioned above, successful projects are just as likely to have insufficient time and clarity as any other project. The difference appears to be in how the project management team addresses these challenges.
Projects are most likely to achieve their goals when the project management team assumes a servant-leadership stance. A servant leader views their charge as something that supersedes their individual goals and aspirations. The servant leader believes that their ultimate success lies in ensuring that those around them are successful and well supported.
On a project team, the project manager works diligently to clear obstacles and clarify ambiguities in the project as they arise and before they affect the rest of the group. However, they understand that their efforts are not directly adding value to the project (i.e., they aren’t writing or testing the code). As a result, they believe that the most valuable thing they can do is to ensure that those team members that are adding direct value are not distracted or engaged in non-value added activities.
2. Engineers who are smart, transparent, and team players
Many developers have worked on teams that have struggled to keep up with their tasks and deliver clean, efficient code on time. However, a fortunate few have worked on projects where no challenge was too great. We have found that more successful projects were often implemented by engineers who balanced ability, communication, and their ability to embrace their role within the team.
Software development is difficult. To successfully distill business requirements into well-structured and maintainable code demands a high degree of ability and attention to detail. Engineers that possess these traits are almost always able to quickly deliver effective solutions to individual tasks. Ability alone, however, is insufficient when projects grow beyond the capacity of a few engineers to solve. At that point, the soft skills of transparency and teamwork become vital as well.
In a team environment, communication is essential. Allowing others to understand what each engineer is working on and how they are progressing enables the entire team to work more effectively. Transparency enables each team member to execute their tasks in a way that smoothly integrates with their coworkers’ efforts. Additionally, when unexpected challenges arise, the project management team can initiate corrective actions to ensure that the project’s goals are not placed in jeopardy.
The final trait of the engineers on a successful project team is their ability to embrace their place within the group. Effective software development requires more than simple programming. The skills of architecture, testing, security, quality assurance, system integration, and more are vital in the development process. When each engineer recognizes the roles that they fill and understands the value that each position provides, they become a cohesive unit that breaks large problems down into manageable pieces.
3. A pool of subject matter experts that are supported by the company and available to assist the team’s efforts
When speaking of his work on optics, Isaac Newton stated: “If I have seen further, it is by standing on the shoulders of Giants.” The same can be said of project teams that achieve their goals. These teams often receive credit for their success, but they rarely accomplish that success independently. Instead, the most successful project teams tap into the organization’s (often unrecognized) pool of experts to help them efficiently implement the project’s goals. Costly mistakes can be avoided when major project decisions are reviewed with these subject matter experts.
Many successful companies recognize this informal benefit and foster its growth by offering training opportunities and encouraging side projects that enable individuals to explore their interests without the pressure to meet specific objectives. The system that a company uses to promote the growth of subject matter experts is often informal. Employees will often use personal development time to acquire valuable new skills before the organization even recognizes their needs.
4. Tooling that supports efficient software development
One of the fascinating aspects of software engineering is the ability to build complex systems with nothing more than a text editor. Practically, however, a project team can be much more effective when adequately equipped with tools that help them efficiently organize the project and execute its tasks. It is a daunting task for many companies to select the right set of tools for their teams, leading to poor alignment between the team and its tools.
One solution to this problem is to allow the team to self-select its tools early in the project. This self-selection process enables each team member to advocate for their ideal setup while ensuring that the overall toolkit works smoothly together. Additionally, the self-selection process can encourage knowledge sharing among the team members and foster the team’s sense of identity.
Modern software systems are almost always the product of one or more teams working together. To be successful, teams must collaborate and work cohesively while being well supported by the larger organization. We understand that balancing all of these needs and priorities can be difficult, especially in larger organizations with multiple simultaneous projects competing for limited resources. We have worked with companies of all sizes and have encountered and overcome these challenges many times. Please feel free to reach out to us. We would love to help you improve the effectiveness and efficiency of your development efforts.