Even the most productive developers will have a hard time getting things done if they work in an inefficient team. Hiring additional engineers onto the team will not help. Nor will encouraging each developer on the team to be more productive. It may make things even worse by introducing additional endpoints to already flawed processes.
Before improving your software development team’s productivity, you must first understand how to measure it and why you should.
When working to improve something, the only way to know if your strategy is working is by measuring it before and after implementation. To optimize productivity, you, therefore, need first to measure it somehow.
There is no one way to increase a team’s productivity and no one-size-fits-all solutions. To increase productivity, you will need to try things and figure out which work and which don’t. By continuously monitoring your team’s productivity, you will immediately become aware of any drops in productivity and investigate the cause.
It is also imperative you track the cost of the increased productivity. If you have ten engineers in your team, and you need two engineers to increase the productivity of those ten engineers by 10%, you’re at a net loss. Without knowing the increase in productivity, you cannot assess your ROI (return on investment).
Development team productivity measurement is a complex problem due to quality, quantity, and complexity all in the mix. When a factory measures its productivity, it is easy to count the number of items produced and account for errors in production. When code is involved, things get a lot trickier to measure. Every milestone, every release, every patch is its own challenge with unique solutions. Counting commits or lines of code is likewise a fuzzy metric to measure productivity and is unlikely to bring much insight.
Though there is no accepted industry standard in place, software giants have developed and used strategies that can apply to many cases. One such example is Google; they use a system called GSM – Goal, Signal, Metric.
The goal is the end-game. The property you want to measure. A goal is not something that is directly measurable and is abstract.
When defining a goal, teams often neglect to account for the quality of code vs. quantity of code. Therefore a handy mnemonic helps guide your goals: “QUANTS“.
High-quality code has a low risk of causing future problems, is easy to maintain, and doesn’t develop technical debt.
Developers need to focus on completing complex tasks. If they are constantly distracted, they cannot achieve the focus required to solve complex problems.
While challenging tasks can be interesting for developers, working on overly complex problems at all times can be draining. Some tasks are also made unnecessarily complicated by overhead and miscommunication.
While speed is not the be-all-end-all objective, releasing code on a schedule is essential for any organization looking to push out timely releases. Developers need to be able to complete tasks in a timely fashion.
Satisfaction
A signal is something that might indicate progress towards your goal. There may be more than one Signal per goal. Like Goals, Signals are not directly measurable but something that you might like to measure if you could.
A metric is the lowest level of the GSM model. A metric is something measurable that indicates that a Signal is going well. You are likely to require several metrics to indicate a Signal. It is also possible that a Signal is not measurable at all at a given point in time.
You could try one or all of those tips and see how they affect your team’s productivity. You could also see how combining them together changes the efficacy of each. Some may speak to you, while others don’t. I suggest you try them all anyway. If you can measure success, there is little harm in trying and seeing the results.
Most people need personal, specialized guidance at the workplace. Without communicating to your team what they should be doing, you’re not going to get there. But delivering a task list isn’t sufficient. It would help if you had a conversation. Every team member needs space to express their desires, their own goals, and expectations. This is why 1-on-1 meetings are the number one item on this list.
Having regular 1-on-1 meetings allows you to take in what each team member is dealing with, understand what they are doing, how they are doing it, and help them accomplish their goals. 1-on-1 meetings are not your time to dictate. It is your time to listen and help. An effective 1-on-1 meeting will give a team member the feeling that they matter, not a feeling that they’re doing poorly.
Developers need time to develop. To do that effectively, they need long uninterrupted sessions to focus on a specific task. Meetings are the bane of a developer. When a developer has two meetings before their lunch break, spaced one hour apart, they will never reach the point where they can fully immerse themselves in the code.
You should minimize meetings. This tip might sound like it contradicts tip number one, but it doesn’t. 1-on-1 sessions are crucial, often weekly, but companies routinely run a lot more meetings than that, such as team meetings, goal meetings, product meetings. Those are time-wasters and focus-breakers. Make sure the meetings you do have are necessary.
(Source: https://www.pluralsight.com/blog/teams/2017-software-developer-productivity-survey)
Developers also should do as little as possible that isn’t development. That means no IT, no DevOps, no design. Let the people that are best at what they do, do what they do best. 1-on-1 meetings are an excellent time to find out what your developers are doing that isn’t development.
Good tools can elevate your team’s information flow in a way that increases productivity. But too many tools can bog them down as information gets lost in multiple avenues of communication. Project management tools such as Jira, Asana, or Trello are mandatory in this day and age, especially with the increase in remote workers. A communication platform such as Slack, Teams, or Discord is essential for your team to communicate without interrupting one another.
You want your developers to get better at what they do. They will naturally improve over time by simply doing what they are doing, but you can encourage this in various ways. Offering employees opportunities to take courses, training, and otherwise learn new things is a great way to broaden their horizons. And it doesn’t have to be anything directly relevant to the current product in development either.
For example, you might think that a team working in Java doesn’t need to learn Python. But a developer that knows Python can use that knowledge to develop scripts to make their work more efficient, which is our objective, after all. It would help if you let employees decide what they want to learn. If they have a passion for it, they will find a way to use it to their benefit, which is also to your benefit.
Most organizations still expect employees to learn a new skill on their own time. Giving developers time to learn new technologies can be a boon, but also it makes your employees feel valued. If you cannot afford to spend resources on outside courses or training programs, consider allocating time for developers to learn things on their own, on company time.
Holding back feedback for an annual review is a common and rather awful approach to feedback. If you wait for a team member to become entirely ineffective to give them feedback, you needlessly lose a lot of time, money, and potentially an employee. The more often you give feedback, the easier it will be for a developer to adjust.
Use frequent 1-1 meetings, post-sprint-meetings, or any other channel you can think of to direct a team member to be more productive.
You need to have your team communicating, sharing knowledge, and helping each other. Make sure they have plenty of communication channels. Even hold meetings if necessary. Just keep them concise and agenda-focused.
An excellent way to get your team to use a communication platform is to encourage sharing memes, jokes, and other humorous or engaging content by having dedicated channels for them. Make room for personal stuff too. If your team uses a communication channel for non-work discourse, they will also use it for shop talk.
Encourage team members that contribute to teamwork. You can use simple verbal affirmation or even emojis to show appreciation. You could also give out gifts, bonuses, or other rewards.
The idea is to make the team member feel appreciated and also part of a whole. A developer that feels they are essential is much more likely to care about the team’s success.
You will see a rise in productivity when you combine increased individual productivity by ensuring continuous feedback, personal goals, and individual growth with increased team productivity via improved communication and proper incentives. But without first implementing a strategy to measure productivity, you will not be able to assess the cost-benefit ratio or indeed be able to identify the increased productivity at all.