A lot of people, especially developers, that I know or have worked with have issues keeping track of what they need to do and how they’ve spent their time. We have tools galore like Jira and GitLab that are supposed to manage our tasks but never really hit the spot just right. Especially in environments like consultancies where you need to track time against projects and clients to ensure correct billing this can get even harder.
I’ve got my own personal way of managing this that works really well and thought I would cover it here. We’ve previously seen my method for using a diary, but this time we’re moving to the digital.
I keep a project stored in git so I can keep it synced when I work from home or one of the other workstations in the office and within that I keep a folder for each year and a Markdown document for each month where I track both my work to do and my work done. On top of that I create extra folders to store scratch stuff I’m working on, example stuff that’s not ready for our centralised, shared docs, etc.
work-notes/ ├─ 2022/ ├─ 2022/ │ ├─ 10.md │ ├─ 11.md │ ├─ 12.md ├─ 2023/ │ ├─ 01.md │ ├─ 02.md │ ├─ 03.md ├─ hiring/ │ ├─ jd.md │ ├─ interviews/ │ │ ├─ 01-phone-screen.md │ │ ├─ 02-tech-interview.md ├─ mapserver/ │ ├─ setup.md │ ├─ example.map │ ├─ load.ps1 ├─ storage/ │ ├─ processes.md │ ├─ proposal.md │ ├─ 10.md ├─ .gitignore
Note that this doesn’t replace Jira, GitLab, or the timesheeting software we use. What it does is enhance my understanding of how I want my day to go and give me a better understanding of what I’ve done and what I need to do next. The important thing here is how I take my notes.
Within a month I’ll usually have a template near the top that I can quickly copy/paste when I first get in. I remove the template once the month is done and put it in the next month’s doc, a form of closing out and knowing another step in the eternal passage of time has been completed.
# TEMPLATE * Y: * T: * ♥: | Start | End | Time | Code | Comment | | ----- | ----- | ---- | --------------------- | ------------------------------- | | | | | | | | | | | | |
I’ll replace the header with the today’s date, then fill out what is effectively my “stand up”. This also means when standup starts I already know exactly what I’m going to say and no umm-ing and ahh-ing trying to recall what happened on Friday or if I have any blockers. I also add what I’m looking forward to today (doesn’t have to be work related).
The table is there to track my time. This is much more important if you’re in a consultancy or other business where time-tracking to a high specificity is important but can also be useful for just noting down when you started/finished for timesheets, helping plan out your day (and revising as you go), etc. Some sections I’ll pre-fill if I know what I have on but other times I’ll just append lines as I go. It ends up looking like this:
| Start | End | Time | Code | Comment | | ----- | ----- | ---- | --------------------- | ------------------------------- | | 06:00 | 08:15 | 135 | Robotics - SysAd | Disable HAL | | 09:15 | 10:15 | 60 | Bio - RD | Human trials | | 10:15 | 11:00 | 45 | IT | Fix printer - again | | 11:00 | 11:15 | 15 | Int Mtg | Stand up | | 11:15 | 11:45 | 30 | Thaumaturgy - Post | Clean off wards |
For my work at ScorpInc the 15 minute billing works. At the end of the day I can quickly add this to our timesheet system before I head home.
The important part though is the todo list.
For each day, underneath the timesheet table I put a list of all my current tasks:
* Finance * Add two field laptops to spreadsheet * Check admin's server invoices * RD-885 * Find a way to save within our existing EDRMS structure * Test * CI * MR * RD-887 * Data Generator PyTorch * RD-888 * Data Generator Keras * IT * Reboot Grog's tablet PC * Reply to Davo's email * THAU-889 * Literature review of lich warding * Shazza, et al * Markus, et al * Writeup * Code review * BOT-36 * THAU-771 * THAU-884 * Schema for updated phylactery design * Test * Submit schema
Often if there’s things I’ll need to do tomorrow or next week I’ll set up date headings for them and put the tasks there so I know what days to work on stuff. By listing things in priority order, I can easily recognise if there’s too much work for a day and then reorganise tasks over the next few days and potentially throw lower priority tasks to a month away.
As I go through the day and tick stuff off, I append
- DONE to the end of the line and if all sub-tasks are completed I’ll append the same on top-level. I can add more detail with sub-sub-tasks or even put little writeups and notes as I go under the todo list using Markdown second or third level headings. Often if I’ve got a large Jira task, I’ll use the subtasks to track how I plan to tackle it, a breakdown of my current and next attempts or things to do before I can consider it complete or ready for review.
You’ll note that I also keep a whole bunch of smaller tasks here, the kind of thing that wouldn’t usually be tracked in Jira such as email responses or things I promised to look at for other departments and colleagues. This is the kinda stuff that is easiest to get lost in the middle of a busy day and having one place to store it all makes it so much of a lower cognitive load for me. There is an initial period when using this system of getting into practice, but once I’m in the swing of things this becomes an absolute lifesaver.
Because I’m a dev, having this always open in VSCode or Obsidian on my second or third (or fifth) screen is easy and super handy. At the end of the day I take five minutes just to review what I’ve done, what needs to be shifted to tomorrow, and potentially what is no longer even relevant and can be removed. It’s also easy for me to review what I was doing last week or even last month/year and I can quickly search if I ever get questions about when we did certain work or projects.