How to “Getting Things Done” for Software Developers
Abdu starts his workday fresh after drinking a nice coffee. He starts checking the tickets to see what to do today. Suddenly, his PM wants to catch up in a quick call. After the call, he gets some requests to do from them. Then, there is a meeting that he forgot to prepare for yesterday. After the messy meeting, he had a chat with one of his coworkers about some comments with their pull request. Then, the PM pings him about the morning tasks they told him earlier. He goes to do them but forgot about his main task for today when it is almost 6 pm.
What an unproductive day 😢
As a developer, you will get many interruptions on a daily basis and requests from different people.
If you don’t manage your timeline correctly, you will get lost and might slow down your career progress or get caught by the TVA 😅
That’s why I tried to check this Book “Getting Things Done” by David Allen.
Although the book was too long and I still think 300 pages for this information was too much, it still had some good ideas and gave some clarity to my mind on how I can improve my process.
The approaches in this book have some similarities with Agile software development methodologies. It consists of many approaches to improve getting things done faster with little overhead and stress.
I have summarized the biggest takeaways from it and actionable tips that you can start doing to improve your productivity.
You can think of this in Scrum as the Backlog.
During the workday, you have daily tickets and tasks. You might get a request from a coworker to do a bug fix. You have a late meeting with your tech lead or have a call with your product manager and they need you to do some tasks.
All of these cluttered tasks and requests should be in a single easily accessible place. You can use a good-old physical book or online tools like Evernote or Notion.
Centralizing can also extend to your cluttered desktop or local repositories which will just make your life easier. You don’t need to spend time searching for the thing that you were looking for and then forget about it.
The idea of centralizing everything is to free your mind to do the task and not keep them in it to avoid making you stressed because you have to keep remembering it. The human mind is like a very powerful single-core CPU but with limited memory registries.
In addition to minimizing the number of interruptions, you are getting because you forgot something or searching for it.
So instead of dealing with this upcoming meeting or new feature while you are coding, put it in this capturing system and organize a time to deal with it later but at the moment focus on what is at hand to be productive.
Before working on any task, you have to “refine” it as we do during refinement meetings and define what done means and how to get it done.
To define what done means, You have to answer two things:
- What are the outcomes?
- What are the actions needed to get to these outcomes?
and then decide what you can do about it:
- Do it: These are the tasks that you can do yourself
- Delegate: if someone else should do it or can do it
- Trash: If you found it’s something old or unnecessary
You need to think like a Commander. Every step needs to be calculated to get the tasks done efficiently and on time ⏳
Let's take few examples:
You got a task to add a new shopping cart feature to the application.
- Outcome: Add new shopping Cart
- Actions needed: Talk to PM, Talk to UX/UI Design, Understand test-cases
Here you can do the code but you have to delegate the designs to the designer and the proper test cases to the QA engineer.
You have a meeting with your stakeholders to discuss new designs
- Outcome: Understand concerns and collect design ideas
- Actions needed: Align meeting time, Prepare Presentation, Collect important questions before the meeting
Here you have to do it all
The 2 minutes rule
This is a fairly simple trick. If there is a small task that takes less than 2 minutes to do then just do it!
This would save time creating a ticket for it and spending time during refinement just for a config change that could be done in a few seconds.
Of course, the idea is not strictly 2-minutes tasks but any that can be done in a relatively short time. This would save time from remembering what was it and how we need to do it.
Bonus Tip: As a developer, you should aim at automating manual work to have 2-minute tasks which would lead to higher productivity. I remember we had a very annoying manual task that would take like 30 mins to do but I took 1 hour to create a script and now this task only takes 1 minute
Next actions list
After we have collected and defined the tasks and eliminated the 2-minute ones, we should have a next action list 📝
The “next-actions-list” should have specific manageable clear tasks from the ones we have refined and ordered by priority.
This is like Sprints in Scrum.
If the action is vague or too big this means you haven’t refined it well. They should be small enough to be done say in like a Pomodoro cycle 🍅
In this way, you have small enough manageable tasks that you can start directly even if you have low willpower but also not very small that goes under the two minutes category
This focuses more on improving your process rather than blaming yourself for “being lazy” or “under the weather” but instead creating a boring efficient system that would work under any condition.
Allen spoke in his book about five important steps to master his workflow which are
- Capture: Don’t use your mind as a hard drive but rather as a CPU. Store your thoughts and tasks in an easy to recall place and free your mind
- Clarity: Refine the task and define its “Done”
- Organize: Put it where it belongs in the To-Do, Delegate, or Trash
- Reflect: Review every week what has been done
- Engage: Do the thing itself