Maintaining Momentum as a Software Engineer
I was chatting with a team member this week, who I’ll call Ash, about the loss of momentum while chasing a quick win.
They had spent the better part of a day planning out a week's worth of work. But Ash wanted something more emotionally satisfying to show for the day than the completed specification.
They should have felt proud to deliver the specification. It gave the team a great point to start the implementation from. But, I understand not feeling productive as an engineer unless you ship code on a given day. It's how a lot of software engineers fight feelings of inadequacy and imposter syndrome. How they measure their self worth, what they tie their identity to, and how they cope with a lack of clear feedback.
Ash picked up a task to try to score a quick win. The task turned out to be anything but quick. While on the surface the work looked like it should be simple enough, no one had taken the time to look through the code and document in the specification where this code was a dependency for outside systems.
The "quick win" they had picked up wasn't urgent. It was a nice-to-have cleanup task for the codebase. It is appreciated, but any sort of negative impact would only be felt in the very distant future.
Ash wasn’t even excited about this task. Quality suffered, they didn’t try to flesh out more of the details before beginning the work, and forgot to do a thorough self review by the end.
All of this in the name of momentum.
Strategies for maintaining momentum
During our one on one, I talked with Ash about what happened. We all crave that feeling of forward motion. Acknowledging that, we walked through a few different strategies they could have used to keep momentum up for the most important priority in the organization.
Here’s a bit of what I shared with Ash:
Software engineering is a social activity. It’s about understanding a group’s problem well enough to encode the problem and the solution in a way that can be communicated through time to both the computer and other team members. It almost certainly includes you two months from now.
If you have an urgent task, but your motivation is waning, you may want to give pair programming a shot. Talking through potential solutions and then implementing one together can help you keep up momentum and spread the domain knowledge. As a bonus, you improve code quality, because the idea has now been socialized with at least one other member of the team. I get tremendous energy from solving problems with a tight knit group. You may too.
This wasn't a time sensitive task. And you may not always be able to find others to pair with. If that's the case, there was another potentially obvious solution staring them in the face. Although hidden in plain sight, the specification they had just crafted suggested 6 potential seams that could be committed and sent up individually. At least four of which were tasks easily completed within an hour or two.
Depending on your team and the tradeoffs of your software development process, it may be that the 6 commits may have been too fine grain. Or they may have been perfectly adequate.
The point being there were different opportunities available to get those quick wins and maintain momentum while continuing on the work most valuable for the organization, because they knew how to break down a piece of work. But just because you know how to break down a piece of work doesn't mean you'll always see clearly how to proceed to keep momentum going.
Finally, sometimes you’re just not going to be in a headspace where you can get going. In a case like that, take a break. In his book When: The Scientific Secrets of Perfect Timing, Dan Pink highlights some of the research showing how beneficial taking a break is for cognitive work, different kinds of breaks, and when to use them. In schools studies found that test scores of children increase as if they had spent three additional weeks in school by taking a break before a test in the afternoon.
So go for a walk. Grab a cup of coffee. Refill your water. Stretch. Take five, and come back to tackle the problem when you’re in a better headspace.
I'd love to hear about strategies you use to maintain forward momentum. Send me an email at brittonbroderick@gmail.com or a message on Twitter, @brit_broderick