editione1.0.1
Updated August 7, 2023An important thing to remember as you work towards a senior developer role is that your job is not to build perfect software, which is a common misconception among developers when they’re starting their careers. Yes, writing clean, reliable, and bug-free software is an ideal outcome, but ironically, that’s not what you were hired to do. Your real job as a software engineer is quite simple—to build value for your company. Sometimes that means shipping code that isn’t fully polished, and sometimes it means taking your time to get your design right before shipping a solution. In the end, it’s all about shipping code. The more code you can ship, the more value you can deliver and the more valuable you become to your employer.
It’s essential to understand the business and the industry you work in because you can’t deliver disruptive value unless you have a deep understanding of your customer’s pain points and how your products solve them. It may take a long time, sometimes even years, to fully understand the complexities of a business or an industry, but that domain knowledge is needed in order to deliver value. When you’re just starting a new role, you’ll only have limited experience, but there are still ways you can build value for your business that don’t require years of institutional knowledge, and it’s all about improving productivity so you can ship code faster.
There will always be one thing that you have full control over, and that is your own productivity. You may not fully understand the business context behind the changes you’re asked to make, but at least you are able to control how quickly you can ship code and deliver those changes to customers.
Even if you’re just getting familiar with a new codebase or learning a new language, there are habits you can build that will help you stay focused and work efficiently. Let’s look at different ways to help increase your own productivity.
It sounds obvious, but sometimes it’s easier said than done. During the workday, do your best to stay focused on the task at hand, rather than checking news websites, your stock portfolio, or browsing social media. There are tools you can use that allow you to block certain websites or apps for a specified period of time so you’re not distracted. And there are time management tools like the Pomodoro and Flowtime techniques that are designed to help you stay focused for short bursts of time.
It’s easy to feel like you always need to be working on something, whether it’s coding a new feature, fixing a bug, or refactoring some tech debt. We feel productive when we’re sitting in front of our IDE churning out code—it’s where we’re most comfortable. It may be tempting to pick up a new task as soon as you submit your code for review, but sometimes that can hurt your productivity. You may think you can get started on another feature while you wait for your coworkers to review your code, but keep in mind that you’ll need to switch context if you need to answer any questions or make changes to your pull request. This often can slow you down as you shift gears to focus between multiple things.
In the first few years of your career, you should try to focus on one task at a time, even if that means you’re sitting idle waiting for feedback. There are other ways you can be productive while you wait, such as reviewing other developer’s code, writing documentation, and planning and researching tickets. Remember, it’s more efficient to give 100% of your effort towards one task than it is to give 50% of your effort towards two.
There’s a lot of information thrown at you every day. You may be focused on the task at hand, but your boss might ask you to do them a small favor. Or you might receive an email or chat message that you can’t respond to right away. Or maybe your coworker assigned you as a reviewer on their PR that they’re waiting to merge in. It’s easy to let things slip through the cracks and forget about all the small things you need to do during your day.
One of the best ways to make sure you’re keeping track of everything you need to do is to keep a to-do list. It sounds simple, but it’s effective. A lot of developers try to keep track of everything in their head, and they forget to do certain things they promised or were asked to do. When you can write down your tasks on a notepad or an app, it helps you clear your head to focus on the task at hand. When you have a break in the day, make sure to check your to-do list for the next thing you should work on.
It’s tempting to jump right into a task as soon as you pick one up, but it pays to be patient. Developers early in their career often have a habit of starting to code right away without thinking through the problem first. They may start implementing a solution without thinking about trade-offs or alternative solutions. It’s a common mistake engineers make, and it can lead to reduced productivity if they need to change direction after the code has been written.
The saying “measure twice, cut once” is a good mantra to keep in mind when picking up a new ticket. Before you start coding a solution, make sure you’ve thought through multiple solutions so you can be sure you’re implementing the correct one. This helps reduce the amount of wasted work if your first solution won’t work out for any reason.
These are just a few examples of things you can do to increase your personal productivity. Every developer works differently, so try out different tools and techniques to find what works best for you. Once you’ve found your own productivity groove, the next step is to focus on helping increase your team’s overall productivity.
Attention Is My Most Valuable Asset for Productivity as a Software Developer (zwbetz.com)
Pomodoro Technique (wikipedia.org)
Flowtime Technique (lifehack.org)
Team productivity is one of the most important things an engineering manager focuses on. It’s their job to make sure their team is working at as close to full capacity as possible. That means making sure their team members are not blocked by any issues preventing them from finishing their task, making sure the product requirements are fleshed out enough for the engineers to turn them into technical requirements, and making sure there is enough work coming down the pipeline for their engineers to pick up. The last thing an engineering manager wants is for their team members to be sitting idle and not shipping any code.
As an individual software engineer, there are things you can do to help your manager increase team productivity. As mentioned in the earlier section, Working with Your Manager, you should consider your manager’s goals to be your own goals, so if they’re concerned with keeping team productivity high, so should you be. If you can demonstrate to your manager that you can help them keep the team moving forward, you will prove that you’re a valuable asset to the team and the organization.
So, what can you do to help improve your team’s productivity?
If your team doesn’t already limit the amount of work in progress (WIP), you may want to suggest implementing that practice for your team. It may seem counterintuitive that limiting the amount of work being done will help your team move faster, but the idea is to eliminate bottlenecks in the pipeline. Your team’s output is limited by the smallest bottleneck. This could be, for example, the number of engineers available to work, the number of engineers that have time to review pull requests, or the number of test engineers that are able to test features for quality assurance.
When work begins to back up at one of these bottlenecks, productivity grinds to a halt. Adding a WIP limit allows you to control when work is released onto the queue to be picked up by engineers, which helps ensure that work is always moving through the pipeline and not backing up at a bottleneck. Another advantage of WIP limits is that they encourage engineers to limit the number of tasks they’re working on, which allows them to focus on finishing a task before picking up the next one.
Putting the “flow” back in workflow with WIP limits (atlassian.com)
DevOps measurement: Work in process limits (cloud.google.com)
Most engineers early in their career focus solely on completing their own tasks, but a common sign that a software engineer is ready to move to a senior role is when they shift their focus to helping teammates complete their tasks. When you complete a task, you may have some free time to help others before moving on to your next task, so try to leverage this down time to help keep things moving for the rest of your team.
exampleHere are some examples of how you can keep tasks moving:
Don’t let pull requests build up. If there are PRs waiting for review, focus on those. The work has been done and the code is waiting to be merged into the release pipeline. Help your teammates by reviewing PRs so they can move those tickets off the board and pick up the next ones.
Ask your teammates if they need help. Someone might be stuck on a tough problem and could use some advice, or perhaps another engineer is having trouble getting their development environment up and running. If another developer is stuck, try helping to get them unstuck before starting a new task.
Help define the requirements for upcoming tickets. Take a look at the tickets in your team’s backlog and check to make sure there is enough information in each ticket for the developer to complete the task. Sometimes, tickets make it into the backlog with only a sentence or two of what needs to be done, when there are often additional product or technical requirements that need to be sorted out before a ticket can be started. Does the ticket need mockups from the design team? Is the expected functionality spelled out in the acceptance criteria? Are there steps to reproduce a bug? Making sure each ticket has enough information will help your team so they don’t have to track down the information after they’ve already started the task.
Entire books have been written on productivity, at both the individual and team levels. These examples just scratch the surface of what you can do to help improve productivity, but if you want to add value for your team, there are always things you can do to increase the throughput for the work you need to deliver.
Think about your typical customer for a minute. When a customer buys your product or service, they’re looking to solve a specific need, whether that’s to save time or money, perform a difficult task, automate something, or even provide entertainment value. What they care about the most is that their needs are met by your product—that’s what makes your product valuable to them.
What they almost never care about is how your product is built. They don’t care what language you used or what data structures, algorithms, or application architecture you chose for your codebase. They may not even care about all the features that are available in your product. What they do care about is that your product solves their pain points, which is why it’s important to focus on the customer when writing software. Sometimes using a new framework or using fancy data structures is fun, but that doesn’t always add value for your customers. Solving a customer’s problems always adds value.