Do you ever get distracted at work? Yes, me too…
We get distracted. By someone, a live issue, a meeting, a colleague asking a quick question, a broken build pipeline, and so on. Reasons are plenty.
We forget “where we were”.
Every workday, I write an ordered list of tasks I will do at the start of the next workday.
Just before logging off, I set aside 5 minutes.
This is useful to do this every workday. Don’t skip it. Particularly, don’t skip it on Friday at 5.30pm. I know you want to get out of the building, but stay 5 more minutes, you will thank yourself for it on Monday morning.
Identifying communication tasks
I scan all my communication channels. Did I ask someone a question I am waiting on? Have I been asked something?
I scan all my tickets and code reviews. Am I waiting on someone to review a PR? Is someone waiting on me? Have I updated all tickets with the latest info and progress?
Identifying next ticket to work on
When I’ve just finished, or will finish very soon, a ticket, I decide which ticket to choose next.
If I can do that, then I think about the coding tasks for it as described in section below.
If I can’t, then I think about what information I need to decide and I write a decision tree.
As a recent example, I noticed some UI tests were flaky when sharding them, creating a few random failed builds. The last build has failed and I have just relaunched one. My choice is between picking up that UI tests flakiness ticket, or picking up the next ticket in the current epic I am working on. I made a decision tree such as “Was new build successful?” If yes, then work on next ticket in epic; if no, then work on UI tests flakiness ticket.
When the outcome of my decision tree is no more than 2 possible tickets, then I think about coding tasks for each ticket as described in section below.
This example is a simple decision tree, but it might be more complicated. Make sure you dig as far as you can, to give yourself a clear plan for the next day.
Identifying next coding tasks
I look at the last piece of code I was writing, or a ticket I am going to work on next. What is the next thing I can do? And after? And after? And after? And after?
Be as detailed as possible. The idea is to make the start of my day easy. Eg “create a new method to call API getItems() in ApiDefinitions.kt” is better than “implement new API call”.
I generally take 2 or 3 minutes to think about the next few steps. I like to have at least 2, though I generally aim for 5.
Putting it all together
I then take a pen, my work notepad (you have one of those, don’t you?), and I write a list of things I need to do the next day.
I start with the communication tasks. It’s best to remind people early in the day if you need their feedback. And, by reciprocity, I don’t like to knowingly keep people waiting.
Then, I add the tasks in decision trees, if I have any.
And finally, are the actual code tasks. If I have a decision tree with 2 possible tickets as a result, then I list the tasks I have identified for each ticket.
Sometimes, when I come to the end, I realise the list I wrote isn’t ordered properly, because I thought about another task while writing it. No sweat. In that case, I just write numbers in front of each item to reorder.
Easy start of the next day. Easy to get back on track when disrupted. My work day feels a little bit more productive 🙂Check out Being a software developer in 2020!