An Engineer's Guide to TODOs: How to Get Things Done
We've long been promised a world where automation and other tech would free up our time to focus on more creative, rewarding pursuits.
But still, we find ourselves battling with small, but time-sucking tasks. We all want to surrender ourselves to the deep focus we need to complete more important work, but there are two big old-time sucks:
- Finding and committing to all the small tasks that need to be done.
- A lack of focus.
- A lack visibility into the codebase problems
Let's go against the grain and start with point 2.
1. A lack of focus
- How many times have you looked up from this article?
- Checked your email?
- Checked your phone?
- Or received a Slack alert?
The case seems to be clear, our ability to focus has been stolen.
So, let's find ways to get through the TODOs that have been nagging, niggling, and keeping us awake at night.
How do we record and track the rest of our tasks?
Ok, you're probably familiar with a combination of creating TODOs or tickets. But these might not be working for you or your team in their current state. Let's take a look:
The TODO option
Many devs create TODOs to note down unfinished work or things that need fixing in the codebase. But do they actually improve codebase communication?
Ok, they offer an alternative to a typical product or tasks management tool. But, as the makers of Taco say:
"Most of us don't need another way to create tasks. We need a way to get them done."
If we think of the typical TODO as a small piece of text, how do other people know what the original note is meant to indicate? That's if the person who wrote it can even remember in the first place.
As Alex notes, tools like GitLens or git-blame (great name hehe) show the owner of a snippet of code or the person who has last modified it.
This means they make it easy to leave that person to assume responsibility - usually without the ability check if the problem is actually dealt with.
You could have a lot of tasks that you thought were someone else's problem.
Further, it's hard to check TODOs as the codebase changes over time - code refactoring is painful enough but made much harder with unclear, or obsolete TODOs.
What else do developers use to organise their tasks?
Developers have loads of different work styles and suggestions for how they organize their tasks and workflow. Some examples, some of which are better than others:
- Sticky notes (they’re gonna get stuck on the cat or end up the floor under someone’s shoe)
- Whiteboard (have you ever tried to transcribe whiteboard scrawl? It's not fun)
- Google Keep
- Word documents
I think the golden key is consistency and efficacy. As one commenter notes, “One more app is one more thing I have to find, learn, remember to check, and eventually delete because I don't like how it works.”
Those of you working freelance for multiple clients will know this pain as well as I do…
What can you delete or reassign?
Feel like you're drowning? Ok, it's time to reassess your tasks and look at your backlog.
First things first, is there anything you've committed to that no longer needs work? Like editing a codebase that's already been updated? Cross that shit off your list.
If you haven’t updated your backlog in a while – backlog grooming is here to help.
Tickets are the death of focus
What is the biggest problem with tickets? They mean you have to step out of the IDE, and that's a bad idea.
Remember what we said about the fight to focus our attention? Every time we context twitch by leaving the codebase to concentrate on something else, we lose focus.
I know we're now all cool, working asynchronously in our slippers at home. But, anyone with a workplace that relies on Slack knows the PAIN of context switching every time you get some urgent alert.
Even worse, think how many times it happens a day, and imagine that time added up over a year. It can not only kill your focus and concentration but lower your IQ and burn through cash in terms of lost productivity.
Simply put, the more tasks we pile on, even those small, easy tasks that we can be doing while listening to podcasts and chatting to colleagues, the more focus we've taken away from the big stuff.
Place in the context of tasks like grooming your backlog, code maintenance, refactoring, and dealing with technical debt, and you can end up with a world of small things that never get done, but eventually converge and result in a world of pain.
2. Getting things done
And how do we get all these small but important tasks done?
Honestly, one of the best approaches is intentionally blocking out chunks of time. The size of the pieces is up to you, really, just keep it consistent, like making that cup of coffee when you start work every day.
And while you're there, block out at least one chunk of time every day for deep focus where you block out your co-workers, and slack alerts, and dig deep into what's left of your concentration.
It'll feel weird like you're doing something wrong by being slightly untethered from the mothership, but it'll make a difference.
The worst thing is when I hear co-workers say they have to start work early or late, or work on the weekends in order to concentrate and get stuff done. This is bad, and shows that something is going wrong in your work style and your workplace. You have the right to focus enough at work for both the big and small tasks.
3. Bringing visibility into your codebase problems
Developers spend lots of time reading and understanding code. If you feel like most of your time is spent on trying to fix old codebase issues and your productivity is suffering, you know the name of the problem – technical debt.
TODOs and tickets are not working for these types of problems because they are not linked to code, they are hard to create, and lack context.
The easiest way to fix this is through extensions. Stepsize has a game-changing set of extensions that work with Jira, Visual Studio, VS Code, JetBrains and more. These enable you to:
- Create issues directly from your editor
- Create TODOs and code comments
- Add issues to your sprints with Jira, Asana, Linear, and other PM tools integrations
Creating issues that are linked to your code will help you quickly and easily find and fix any codebase problem. As a result, your team will create more issues, they will be visible in your codebase, and you’ll see how your tech debt is getting fixed continuously.