DEV Community

James Hood
James Hood

Posted on • Originally published at jlhood.com

The Power of the TODO List

This post was originally posted on my blog

I wanted to share a simple, yet powerful technique I discovered during my 2nd year as a software developer, which has served me extremely well ever since. I recommend it to everyone I mentor and have received positive feedback from other devs who've used this technique. Drumroll please...

I manage a daily TODO list for myself.

Ok I know, that was probably a bit anticlimactic. Let me explain further before you nickname me MOTO: Master of the Obvious. 😋

The format of the TODO list is really simple. It's just a plain text file with two sections of bulleted lists. It looks like this:

TODO
 -most important thing I need to do
 -next most important thing I need to do
 -...

Accomplished
 -stuff I did
 -more stuff I did
Enter fullscreen mode Exit fullscreen mode

I keep my TODO items in priority order, and use the Accomplished section to record what I did that day. As I add items to the Accomplished section, I remove them from the TODO section. As new tasks come in, I insert them into the TODO section in priority order. Each day, I copy the file from the day before into a new file and erase the Accomplished section. I name the text files after the date (MM:DD.txt) and organize the files into folders by year. Again, I know it may seem simple or obvious, but disciplined use of this technique over time promotes some very healthy behaviors.

First, it forces me to list and prioritize the work I have to do. This allows me to stay on task, since I can refer to the list if I'm not sure what I should be working on next. It also gives me a queue of work so if I get blocked on one task, I can make progress on the next task in the queue. It also helps me see when I don't have clarity around certain tasks. If an item on the TODO list is hanging around for a week or longer, something's wrong. Maybe the deliverable of the task is not well defined, or the task should be broken down into smaller tasks.

Another important benefit is that the list forces me to admit when I have too many things on my plate. My rule of thumb is if the TODO list gets larger than 4 things, it's time to make a change. This may mean talking to my manager or scrum master to (1) ensure they agree with my priorities and (2) see if there are alternatives like handing tasks off to someone else on the team. If no changes can be made, it at least helps reset expectations (mine and my manager's) on how much I will be able to accomplish and by when.

The Accomplished section provides a little morale boost at the end of each day since you can see your impact visually. However, where it really helps is, when you're working at a company that requires you to write an annual self review. I've been lucky in my career and have had several good managers, however I never rely on my manager to remember everything I've done in a year. I always want to be able to vouch for myself. My TODO list technique helps me do this.

Before writing my self review, I go to my TODO list folder for the previous year and do a simple "less *.txt". I can then step through all of the files for that year in order. I focus on the Accomplished section and when I see something that stands out as noteworthy, I note it down. It generally takes me less than 20 minutes to look through all files for a year and at the end, I have a rough outline for my self review. I then build a narrative around those key accomplishments.

A year is a really long time. There have been several times that I have looked through TODO list files from January or February and thought, "Wow, that was last year? I thought that was the year before." Without the TODO list logs, I would have missed putting that on my self review. Also, while some contributions by software developers are easy to track down, e.g., commit history, others are not, like participating in design reviews or giving a talk. The TODO list mechanism helps me capture all accomplishments, whether they result in code being written or not.

The result is that my self reviews are very detailed and complete. I once had a manager, whose performance feedback review for me was basically echoing my self review and saying "I acknowledge that James did this. I acknowledge that James also did this..." It was kind of funny, but also illustrates the power of this mechanism. I feel much more in control of my own career, because I'm confident in my ability to provide complete data on my contributions. It can also make your manager's life easier, which is never a bad thing to do.

If you're skeptical, I still recommend giving it a try. It's so simple and low cost, what could it hurt? Give it at least a month and see what you think. You don't have to use my exact format, but the key elements to preserve are (1) making work visible, (2) forcing priority decisions and early communication on expectations, and (3) maintaining a log of accomplishments.

Oldest comments (17)

Collapse
 
aadslingerland profile image
Aad Slingerland

Totally agree. I use old fashioned pen and paper for this (almost) daily.

Collapse
 
brotherm profile image
MichaelC

I didn't recognize this as a valuable approach until I recently started a new job, stopped keeping this kind of list, and your article made me realize why I've been feeling so unorganized.

I follow your approach but use a weekly instead of a daily file, and use three sections, inspired by GTD:

  • @ACTION
  • @DONE
  • @SOMEDAY/MAYBE

Thanks for helping me realize what I was missing.

Collapse
 
jlhcoder profile image
James Hood

So glad this was helpful! I've definitely fallen off the wagon for periods of time in the past, and I always end up having that same feeling of disorganization and anxiety about my workload. Coming back to keeping my TODO list always helps a lot. Good luck!

Collapse
 
jaredprice profile image
Jared Price

I've been trying to find the best method to do this... maybe the Bullet Journal, index card, or an app of some kind. Really about the habit more than the medium I suppose.

Collapse
 
humanismusic profile image
Mike

Simplicity is key. If anyone wants a step up from a .txt file, I've built lanes.io. All of the above, plus a timer.

Collapse
 
wsmoak profile image
Wendy Smoak

I generally keep the TODO part on paper, and use RescueTime to track what I'm doing and record accomplishments. (They call it Highlights, though it may not be in the free tier.) There's an API for retrieving the data later, or you can use their web UI.

Collapse
 
val_baca profile image
Valentin Baca

Neat idea. I've been using a single huge "todo.txt" but might try out this one-TODO-a-day.

Here's a script to automate the file creation:
$ echo ~/bin/newtodo

#!/bin/sh
TODO_DIR=~/todos/
TODO_PREFIX="TODO-"
mkdir -p $TODO_DIR
cd $TODO_DIR

# copy most recent* TODO file
# *recent = using filename, not last edited! So filenames need to be in a sane date format, like YYYY-MM-DD
RECENT_TODO=`ls -1 | head -n1`
# use this if you want to use last edited instead
# RECENT_TODO=`ls -1t | head -n1`

# %F == YYYY-MM-DD
TODO_SUFFIX=`date +"%F"`
TODO_FILENAME="${TODO_PREFIX}${TODO_SUFFIX}"

# if there is an existing TODO, then copy from that...
if [ -e "${RECENT_TODO}" ]; then
    cp ${RECENT_TODO} ${TODO_FILENAME}
else
    # ...otherwise, just create new TODO
    echo "TODO\n-do the thing\n\nAccomplished\n-created TODO\n" > ${TODO_FILENAME}
fi

echo "New todo created:\n${TODO_DIR}${TODO_FILENAME}"
Enter fullscreen mode Exit fullscreen mode
Collapse
 
eoinmurphy profile image
Eoin Murphy

I've been using the PlainTasks package within Sublime Text. I seen it on a game development stream on Twitch, actually. Its the exact TODO workflow that I was chasing for so long. Now I've got a .todo file for each main aspect of what I do and I'm absolutely loving it.

Only problem with this is the fact that its got to be opened in Sublime for the core functionality of the package, but you can open it as a .txt file by renaming the extension.

Come to think of it, I really need to write a script which converts each .todo to a .txt file on Google Drive so that I've always got an accessible version on any device.

Great article, by the way, James!

Collapse
 
dorelljames profile image
Dorell James

maybe too late to the party but anyhow just want to share my current workflow for anyone that might find this helpful. Basically, I upload all of my todo's in a secret Gist. Here's a useful package to save a gist, open it and automatically update once you hit save. packagecontrol.io/packages/Gist

Collapse
 
stealthmusic profile image
Jan Wedel

This sounds exactly how we work in a scrum team with the agile board of Jira.

  • You see what you need to do
  • the Done column motivates you
  • you have the additional "scope change" indicator that allows you to tell the management why you're late ;)
  • Each task has little dots for every day in one state that shows that this is too big or has some unresolved dependencies.
  • no text files :)
Collapse
 
jlhcoder profile image
James Hood

Good observation! It really is very much like a personal agile process. I'd say it's more like Kanban than Scrum though. However a team scrum/Kanban board is no substitute for keeping this personal TODO list. Especially as your career advances, I find there's a lot that goes on the TODO list that wouldn't normally end up on the scrum board, e.g., mentoring, interviews, talks, etc. Also, never underestimate the power of text files! They are by far the lowest friction medium I've found. It's always faster to edit a text file than to update even the fastest scrum or Kanban UI. There are downsides of course and the post is about the method/practice rather than the specific medium used.

Collapse
 
mistermantas profile image
Mantas

Really?

TODO.txt?

Isn’t something like GitHub Issues supposed to make that kind of stuff a thing of the past, no? Because I think I can accomplish everything of TODO.txt in an issue tracker. Heck, GitHub even has a Trello project… thing that can also help you do everything mentioned.

Collapse
 
jlhcoder profile image
James Hood

Don't get stuck on the medium. The underlying principles are the more important part: breaking tasks down, prioritizing, detecting when you're overloaded and quick retrieval of history of accomplishments. Most importantly, finding a minimal overhead way to consistently maintain these things every single day. Use whatever medium that allows you to do that.

But since you went there...as a unix CLI power user, you will never show me an issue tracker interface that matches the speed and flexibility of plain text files + unix command line tools. There's also no internet connection required. Downside is you have to manage your own backup solution, but it's really easy to setup a private git repo and a daily cron job that auto commits and pushes your updates to a remote repo.

Tools like issue trackers and Trello are great as soon as the number of users is greater than 1. However for the individual case, the overhead of using those tools is always greater than plain text.

Good example of why it's important to check your requirements before choosing (or prematurely rejecting) certain tools...

Collapse
 
subbramanil profile image
Subbu Lakshmanan • Edited

Absolutely Great Idea. Best way to reflect back that you have done in the past. One other way it helps me, is that while entering time sheets I no longer wondering about what the heck that I did last Tuesday. I work in a smaller team, where the priorities gets changed so frequently. This habit helps me to track the work that I have done also helps me to focus on the task at hand for the day.

I use "Evernote" for my work. I have a separate notebook titled, "Work Log". Every day, I start my day with a todo list of tasks to be done and start with that. I add additional notes below that.

For example this is my work log from last week 13th of July, 2017,

13 July, 2017

Todo:

[x] Create Repo for *** design
[x] Escalations
[x] Shawn’s issue with ****
[x] API testing using postman app
[x] technical tasks proposal
[ ] Study the *** design


...

Escalations:

  • Notes related

Shawn’s issue

  • Notes related

I will create a new note, if a task has required lots of details. For example, technical tasks proposal.

At the end of the day, I reflect back on the tasks and mark it done if it is completed. I will add the incomplete tasks to next day based on the priority. This kind of helps me keep focus and track of the work being done.

One key take away for me from this article is to limit the number of tasks. I do prioritize the work that I do but there are times where I have added bunch of tasks to be done at the start of the day and complete very few of them. Although I know that I have completed the tasks in the priority order, having bunch of in-complete tasks at the end of the day leaves a sour taste. I believe limiting the tasks to a certain number by ruthless prioritization can help me in this case.

Fantastic Article!!

Collapse
 
jlhcoder profile image
James Hood

Thanks so much for sharing your method! I could definitely stand to adopt EverNote as well. My desktop is littered with open TextEdit windows. 😁

Collapse
 
netanelravid profile image
Netanel Ravid

I have used to write everything in the old school style with the pen and a notebook
I'll try the text file, hope it will be better
Thanks for the article!!

Collapse
 
apiarian profile image
Aleksandr Pasechnik

I implemented something along these lines in go: github.com/apiarian/next-day-todo . I had been running this same system though Editorial on iOS for months before that, but I've lost the workflow when I moved to a new phone.