If you are like me, having countless side projects and jumping from one to another from time to time, you might also experience ending up losing track of what you should do on each side projects.

Keeping track of tasks in all of your side projects isn’t easy without using any project management software. However, it might feel overkill for personal projects.

How might one solve it? With a simple text file and some bash script.

Where I left off last time?

Every now and then, when I am working on my side projects, I always forget what are the last changes I made. Luckily with version control and the practice of writing good commit message, I can always use git log to view the past commits to get an overview what I should do next and what have been done.

However, this approach is limited. Sometime, the past commits can’t really tell me what should I do next.

Hence, I use a simple way to keep track of what I need to do in my side projects, which is a todo list. To be more accurate, a project based todo list, in a simple file.

Introducing .todo file

The idea is straighforward. I write down my tasks in the .todo file located at the root directory of the project.

To edit it, I just use vim .todo. Adding tasks or deleting tasks are the same as manipulating text. If you’re not a vim user, you can use any text editor you prefer.

Listing the tasks

To get what you need to do on each side projects, is simple. The simplest apporach is to cat -n .todo. This command will show your task in your .todo file, numbered.

In cases where you have wrote a lot of tasks, listing out just like this might clutter your terminal. To resolve this, we can use head to show only the top few tasks on the .todo file. Now our command becomes:

cat -n .todo | head -n 5

This command will list the top 5 line of your file. To take it further, you can write a bash function and add it to your .bashrc or .zshrc.

function whattodo() {
    cat -n .todo
}

Now, everytime I need to know what I need to do for each side projects, I just cd into project directory and run my whattodo command.

Benefits

No extra dependencies is needed. Since, we use the comamnds that are widely available and also cross compatible to every machine Unix based machine.


Final Thoughts

There are no silver bullets to manage a project. Different project size, might need different toolings and approach. For instance, this approach is not really suitable when the project become too large or complex, where the tasks involved consists of different type of work such as bug fixes, adding features and etc.

For a small, personal side project, I found this method to be quite helpful personally.