When was the last time your manager asked you to do less work or slow down your speed in software development?
A more likely scenario is that your manager came to your desk to say something like, "We're moving your deadlines up. Oh, and here are three new projects we want you to work on."
Conversations like this take place every day at every company in the world. That's because every company in the world would love it if their employees got more work done in shorter periods of time. However, squeezing more and more work from employees has its consequences and tradeoffs.
Companies in the tech space are infamous for burning out their employees with constant deadlines, high expectations, and work weeks that bleed into the weekends. Perhaps as a result, the turnover rate for software, in particular, is now the highest of any industry.
While the pressure to produce more in less time is never going to go away, software development teams need to re-examine the expectations, stresses, and responsibilities they place on developers. Aside from simply respecting your developers' health and free time, unreasonably high paces of development aren't sustainable when your employees frequently leave your team. Moreover, it'll eventually become difficult to attract new developers when you have a reputation for running your employees into the ground. Targetprocess offers one solution to avoid this problem with our visual people allocation tool
Fortunately, there are ways to supercharge your speed in software development that will help your team produce more without burning out every few months. Let's examine some options your team has to start increasing speed without decreasing employee satisfaction.
Increasing speed in software development without making developers hate you
Your team should never find themselves in an endless sprint. While sprints are acceptable over short periods of time, running your developers ragged for months is the best way to burn them out.
However, you can't always guarantee that your team will be able to work in "marathon mode" at a slow but steady pace where there's never any stress, and no deadline is urgent.
There are many other strategies you can use to increase your speed in software development without making your employees hate you. I'll discuss a handful of those strategies below.
1. Strategically adjust your team's size
If you want to get more work done, your first instinct might be to hire more people to do that work.
The thing to keep in mind here is that, while hiring new people will eventually increase your development speed, it'll decrease it in the short term. Conducting technical interviews takes developers away from important tasks. Plus, once you hire someone, it'll take several months to train and mentor them properly.
More people also means more team coordination. If you don't keep coordination activities in check, you'll spend more time in poorly conducted meetings or on activities that don't directly add value.
When hiring more people, consider dividing your growing team into smaller semi-autonomous, cross-functional units that can make important decisions and move large chunks of your projects forward. Dividing teams and responsibilities this way ensures that some part of your development project is always making progress.
2. Increase your team's overall skill level
If hiring en masse isn't in your budget, you can focus on increasing your development team's skill level. Developers operating at a higher skill level solve problems faster and create less complex solutions.
This transformation obviously won't happen overnight, but you can start by actively encouraging your team members' continuous learning and skill development. Create a learning library, and encourage book clubs. Send your developers to conferences. Create internal conferences or conduct employee-led workshops to facilitate knowledge sharing. Dedicate time in your work week exclusively to professional development or personal projects.
If you do need skilled hands right now, you might want to consider hiring experienced developers who can complete more complex work in shorter periods of time. However, hiring not-so-skilled developers isn't necessarily a bad investment for your team as long as they're enthusiastic about learning new things. People who are ridiculously curious are more likely to acquire new skills with less need for external motivation from managers.
Investing in your team's skill level will both improve the quality of your final product and increase development speed over time.
3. Decrease system complexity
Nothing slows down speed in software development like a complex system.
Complexity is inevitable in software development, but it's also a considerable speed inhibitor. As a system increases in complexity, it becomes more difficult to add new features, spot and fix bugs, and generally understand what's going on within it.
You might partially solve this problem by following tip #2: skilled developers tend to build less complex systems, while novice developers tend to create fragile, overcomplicated solutions. However, when attempting to decrease complexity, there are a couple of other factors you should be wary of or avoid entirely.
Be smart about technical debt
Technical debt is a deliberate decision to implement not-the-best solution or write not-the-best code to release software faster.
Taking on some technical debt is inevitable and can increase speed in software development in the short run. However, in the long run, it contributes to system complexity, which slows you down.Track your technical debt thoroughly, as a user story or something similar, to ensure that it doesn't get out of hand. This documentation will help you understand how much you've already borrowed.
Never take on technical debt "just because." Sometimes it's necessary to cut corners and push something out quickly to meet deadlines. However, rushing without reason can result in shoddy code that's full of bugs. Plus, your developers won't be happy with unreasonable deadlines.
When you do decide to take on technical debt, have a plan to reduce it via refactoring or a full rewrite. Schedule "maintenance days" periodically so your technical debt doesn't grow out of control.
Discourage cowboy coding
Cowboy coders ignore the development process without regard for how their actions impact their team or the quality of the final product. These coders can create subpar code by cutting corners and trying to move forward as quickly as possible. Over time, this type of attitude can lead to more complexity.
Defining a consistent development process and making sure your team sticks to it can go a long way in reducing system complexity.
4. Decrease rework
There are three primary sources of rework on development teams:
- Unclear requirements
- Incorrect task completion
While it's impossible to avoid rework entirely, you should try to minimize it by focusing on those three sources.
Find bugs early
Bugs in development are inevitable, but it's important to find bugs sooner rather than later. Developers who have a fresher memory of the code in question will be able to fix bugs faster. Having a long testing cycle, on the other hand, can severely reduce bug-fixing speed.
Create better specifications
Good specifications are necessary to help developers better understand a solution, reduce the number of bugs, decrease rework, and generally save time.
There are various techniques to describe and explain solutions to people, and visual techniques are often the most helpful. The chart below shows all these techniques:Every team's experience with specs will be different, but take the time to create detailed specifications that offer a better understanding of the final product from the start to increase development speed.
Make sure your developers understand requirements
As good as your specifications might be, you should still ensure that developers know what you're asking for. Most bugs stem from unclear requirements, and developers' guesses can lead to mistakes and, inevitably, rework.
One way to solve this issue is to hold "kick-start meetings" for every feature or user story. The goal of these meetings is to get everyone—developers, testers, product owners—on the same page. Discuss features or user stories in detail. Review possible failure cases. Let developers ask questions. A solution drastically changes (for the better) during a kick-start meeting.
5. Ask for customer and client feedback early
It's hard to know what your customers want if you don't ask them. Without talking to your customers, your developers might spend time designing, implementing, and testing features that nobody will ever use.
Before you launch new features or make significant UX changes, ask for feedback from customers. Create prototypes, share sketches, perform A/B testing, accumulate data, and analyze it carefully to reduce rework on your final product.
Once you have a finished product, give your customers easy methods of providing feedback through both public (social media, reviews, etc.) and private (customer service communication, emails, surveys) channels. So you can stay on top of any bugs or additional feature requests.
Talking directly to customers and clients takes a lot of the guesswork out of product design and can help your developers avoid wasting time on features no one will use.
6. Encourage focused work
Software development demands deep concentration and focus. Programmers build huge models in their minds, and every single interruption pulls them away from these complicated mental systems.
Boosting speed in software development requires boosting your programmers' abilities to concentrate, as well.
Focused work cuts out wasteful activities and helps developers operate in a flow state. To help your developers, strive to reduce the distractions that can take them out of focused state as much as possible.
Create or find dedicated teamwork spaces
It can be tough to focus when there's a constant buzz emanating from your open office. Create space by organizing your team's desks in a "pod" formation. This arrangement doesn't entirely negate the need for noise-canceling headphones, but it does make it easier for developers to ask relevant teammates questions or work together on a task. It also makes distractions from other teams' activities less likely.
You can also reserve time and space for focused, dedicated teamwork periodically by hopping into available conference rooms or even quieter corners of your office specifically for "power hours" or brainstorming sessions.
Encourage periodic "offline" times
Messages and notifications are remorseless focus stealers. These small interruptions are dangerous and can interrupt valuable coding time.
Encourage team members to "go dark" for extended periods of time to avoid distractions. Tell them they can shut down email, Slack, Twitter, etc. Encourage them to put their phones in their desk drawers or turn them off. They're unlikely to miss vital information when they're offline for an hour or two every day, and their increased focus will increase productivity.
Every time you shift your focus from one task to another, the resulting context switch immediately decreases your productivity. Try to keep context switching to a minimum by encouraging developers to work on a single task until they've completed it.Unfortunately, this advice is easy to offer and hard to follow. You can try meditation or use focus methods like the Pomodoro technique to cut out distractions and encourage extended periods of focused work.
7. Cut back on activities that don't directly add value during sprints
When you're in a sprint, it's always crunch time. Every task becomes more urgent, and everyone should try to do as much focused work as possible. During a sprint, reduce time spent on activities that don't directly add value as much as possible.
Cut back on meetings unless they're absolutely necessary, and never go into a meeting without a clear agenda. Encourage developers to spend less time on side projects. If it doesn't directly contribute to your sprint goals, think twice about putting it on your team's to-do list.
It's important to stress that stepping away from work—even during a sprint—should not go on the list of activities that don't add value. Encouraging your developers to take regular breaks will actually increase productivity, thereby increasing development speed while still avoiding burnout.
8. Encourage a healthy work-life balance
The best way to increase development speed and avoid burnout is to make sure your developers aren't spending too much time working. Spending time on hobbies or with family and friends outside of work gives employees time to recharge. When they return to work after a vacation or even a weekend with no work emails, they can approach complex coding issues with a fresh mind.
Plus, your developers won't hate you for repeatedly interrupting family dinners or fun nights out with friends.
Though it seems counterintuitive, stepping away from work every once in a while allows you not only to do more work but better work.
Focus on what's best for your team
There's no magic fix to increasing speed in software development. You can’t shout, “Work faster!” at your employees every day. You can’t blindly cut corners and focus only on value-added activities.
However, you can focus on taking the multiple factors that impact software development speed into account and tweaking your approach to them to find methods, processes, tools, and best practices that work for your team.
What methods do you use to encourage high levels of productivity while still keeping your development team happy? Drop some advice in the comments section or tag us on Twitter (@targetprocess)!