Over the many years of being in software leadership I have developed successful best practices for running a software development team. In addition to those 22 specific best practices, which are the foundational key traits of successful software organizations, I use 3 specific tactics or strategies for effectively managing software delivery teams
- Expecting high performance
In a fast moving software development organization it can be very difficult for the team to receive relevant, clear, and accurate information. Providing transparency to the team allows people to easily see what actions are performed and reasoning behind specific goals or decisions.
As a leader managing a delivery team you should be the first place team members should come to for questions and clarification for anything in the organization. It is your job to either gather the information for them or provide them with the person or resource to give them what they need.
Let’s look at an example of transparency around why an there might be an organizational push to move to new development framework.
Due to a downturn in revenue over the last year our leadership team is looking for ways to reduce mobile development costs. The added challenge is that we have made a commitment to delivering a new mobile app to our new client. This is on top of existing delivery commitments.
One idea that has been proposed by our lead architect is to look into using React Native to develop the simpler parts and native for the more complex. With this approach we would not hire more native developers, but rather train our existing Node, iOS, and Android developers to use React Native. I realize that many folks on the team do not like the idea, but as a delivery team we should understand the reasons why this is being discussed and focus on being supportive toward the most successful solution possible.
The key take away with this example is rather than just telling the team that they need to adopt a new framework you give them the context of why it is being pushed. This gives them the opportunity to provide alternate ideas toward the underlining problem.
Proactively sharing timely, accurate, and relevant information with your team should be your main approach for ensuring your team as shared context for understanding your goals.
Expecting high performance
The main way to manage the day to day flow of work into and out of the team should be through your agile development methodology. Scrum or Kanban and XP provide the baseline for handling the core team development activities such as sprint planning, visualizing the work flow, backlog grooming, TDD, pair programming, or continuous integration/deployment. Overtime teams will deliver with greater quality and predictability just from following agile practices.
Beyond just making progress on the product, the team needs something bigger to strive for, a quest for high performance.
High performance is not a certain state, but rather a journey toward something better. To help the team strive for high performance start by developing principles for guiding the team on their journey. An example of guiding principles that allow the team to improve past just delivering stories and writing unit tests, could be:
- We are a self-organizing team rather than role- or title-based.
- We are empowered to make are own decisions.
- We believe that as a team that we can solve any problem.
- We own our decisions and commitments.
In the past I have made the mistake of just having a team flow the agile practices alone. Although the team made progress, they became so married to the rituals that the morale and motivation of the team declined.
I realized that the team needed to achieve autonomy, mastery, and a sense of purpose. Setting the expectation of high performance and helping the team define guiding principles to achieve high performance; builds a team that can do anything.
People and teams have greater motivation and sense of purpose when they have autonomy to make day to day decisions own their own. As a manager it is important to ensure that clear goals are defined and the team has the support it needs to operate with autonomy. Here are a couple of specific approaches I use:
- When creating goals ensure that it is very clear why the goal is important. Never assume the why is as obvious to your team as it is to you.
- Don’t micro-manage the implementation of the goal. Allow your team or the individual to decide how they will reach the goal. This will create the feeling of choice necessary to be intrinsically motivated. They then will be able to tailor the goal to their approach, preferences, and abilities. Which will give them a heightened sense of control over the situation they find themselves in, which can only benefit performance.
Competing priorities, unrealistic deadlines, unclear, incomplete, or changing requirements, and finding time to mentor team members growth can make managing software delivery teams very challenging. By creating an environment of transparency, setting the expectation and supporting high performance, and giving teams a sense of purpose through autonomy will help to develop a team that can handle anything.