0%

One Task Board to Rule Them All

Do you ever feel that the numerous productivity tools you use every day actually cost you more time than they are supposed to save? It sure doesn’t feel right when managing your tasks becomes a non-trivial task on its own. On the other hand, there’s no one-size-fits-all solution when it comes to task managers, so it makes sense to use the right tool for the job. To address this dilemma, I recently came up with a simple hack that lets me use all my favorite tools while interacting with just one.

I’m notoriously bad at remembering things, and my life would be a total mess if I didn’t somehow keep track of my personal tasks. Here are some of my favorite tools I use to manage different kinds of tasks:

Tool Purpose Example
Trello simple todos write blog post
TodoDock periodic tasks water plants
Github Issues side-projects fix bug in login page
Google Sheets daily habits piano practice
Google Calendar meetings/appointments gRPC webinar

Even though I like the tools themselves individually, having to keep track of all of them at the same time is a pain in the ass, to be frank. On my computer, I literally have to keep 5 browser tabs open just so that I can see what’s on my to-do list at a given time and decide what to do next. It’s even worse when I’m on a mobile device because then I have to cycle through 5 different apps.

I didn’t want to stop using any of those tools, because each one does a great job in certain situations where others can be insufficient. For instance, I like how Google Sheets allows me to visualize my daily habit progress in a grid. I would have to give up on that if I used Trello for my habits.

This is just a subset of my daily habits :)

Long story short, a few weeks ago I decided to build a tool for periodically grabbing tasks from different sources and putting them in one place. A Trello board seemed to be the perfect place for this because:

  • UX-wise, it’s my favorite
  • its API and webhooks make it very easy to build automation tools around it
  • and let’s face it, who doesn’t like kanbans, am I right?

Here’s how it works:

  1. Query all sources every 5 minutes:
    • TodoDock: tasks due in the next 2 days — TodoDock API
    • Github Issues: non-PR issues that are assigned to me — GitHub API
    • Google Sheets: habits that I haven’t completed yet today — Google Sheets API
    • Google Calendar: not implemented yet
  2. Create a card in the Trello board for each task that doesn’t already exist.
  3. Check if there are any stale cards and remove them from the board. (e.g. if someone closed a Github issue in the past 5 minutes)

Feel free to check out the source code and let me know what you think! If you can program in Go, it should be fairly easy to fork and customize for your own needs.

But there’s more. The next thing I did was to create a Trello webhook to be fired whenever something changes in the board. Then I set up a Firebase Cloud Function that listens to that webhook and takes a certain action if a card of interest has been archived. I haven’t open-sourced this yet, but here’s the idea:

  • if a card with tododock label has been archived; reset the corresponding TodoDock task timer
  • if a card with habit label has been archived, mark the corresponding habit for today as
    • ✘  if it also has the habit-fail label
    •   if it also has the habit-skip label
    • ✔  if it doesn’t have any other labels

I don’t handle archived cards for Github issues, because the issue gets closed automatically anyway when you merge a pull request that references it.

I can now enjoy the benefits of using all my favorite tools without even interacting with them manually. Sure I check out my personal habits from time to time to see how I’ve done so far, but I don’t need to open the spreadsheet to see my uncompleted habits for the day, or to manually update the sheet when I complete a habit. The same goes for my GitHub issues and TodoDock tasks.

Feel free to reach me out on Twitter for any comments, questions or suggestions you might have. I really like quick hacks like this that save a lot of time and effort compared to how little it takes to code them. So I’m interested in hearing about similar things you’ve come up with that proved useful to you in the past.