Time Tracking for Freelance Developers
Time tracking is terribly mundane. But if you charge by the hour, or need to account for how you spend your work day, it’s absolutely essential.
One of the minor blessings of full-time, on-site employment is that you are considered “working” as soon as you walk into the building. Your presence makes it count, even if you read a blog post with your first cup of coffee, take a personal call, or chat with a coworker about your weekend.
But when you are freelancing from your home office and juggling multiple clients, the transitions from “not working” to “working” and back can be numerous and difficult to keep track of. And likely none of your clients will want to pay for a mid-morning conversation with your partner or a half-hour break to scroll Twitter.
When I left full-time employment in 2013, learning to track my time was one of the hardest adjustments. It took a year to really get the hang of it. I started by using a spreadsheet, then quickly realized I needed something better and switched to Harvest, first on the free plan and then on the pro plan. I’m still using Harvest, almost 9 years later. I’m not affiliated with Harvest, but it’s one of my most important tools and I highly recommend it.
What to Track
My first year using Harvest, I tried to account for all of my time during the workday, both personal and professional. That included my client work, as well as things like helping my kids with homeschooling, doing personal emails, taking walks, or meeting friends for lunch. This was too difficult to manage long-term. It can be useful short-term, to help get a snapshot of where your time goes, but it’s not sustainable in my experience.
Instead, I recommend only tracking work activities, which includes billable client time, but also time spent on accounting, filing taxes, invoicing, sales, marketing, and business planning. Each client should be set up separately in your time tracker, but you should also have one “client” that is your own business, where you track that unbillable time spent on your business.
If you use Harvest, or a similar time tracker that allows you record a task type, try to keep those types to the minimal number that will still be useful to you later. For developers, I would recommend:
- Development (all coding-related activities)
- Communications (Slack, emails, calls, standups)
- Planning (research, strategy, architecture, prioritization, backlog grooming)
- Operations (system administration, infrastructure, support)
You may want to break out a few of those, depending on your needs or how much time you spend on those activities. But don’t get too granular. If you are having to stop and think about what type of task you are time tracking on, you have too many task types.
Tracking is partly for your clients, and partly for you. You want a high enough level of granularity for ease of use, but low enough level of granularity where you and your client have some decent detail about how your time is used.
Starting Your Time
The biggest challenge to time tracking is remembering to start your time. If your personal and professional lives are intertwined, it can be difficult to notice when you’ve started working. If you don’t have a clear transition, like walking into an office, or opening a work-only laptop, you need something else that triggers you that you are now in work mode. For example, as soon as you open client email, start time tracking. Or as soon as you select a Trello card or GitHub issue to work on, start time tracking. I suggest using the Harvest Chrome extension which integrates with Basecamp, Trello, and GitHub and remembers the client, project, and task for those contexts.
Don’t stop your time for short breaks, like responding to a quick text or getting a glass of water. If a short break turns long, it’s easier to remove tracked time than to try to account for untracked time. I recommend using the Harvest desktop app, which will detect idle time and let you easily remove it.
If you stop for lunch or a walk or any longer break, leave your timesheet up, so that it is the first thing you see when you return to your computer. You’ll be able to review your time for the day so far, and be prompted to start tracking again.
You will still occasionally forget to start your time. This happens to me once every month or two. If you suddenly realize you’ve been working for a while without tracking your time, look for any actions you’ve taken that could have a timestamp. Did you leave a comment on a Trello card, did you make a commit to your git repo, did you run a command in the terminal that will have the date and time? Use that as a reference to determine how long you’ve been working and add the time accordingly.
Another big challenge to time tracking is remembering to switch projects if you are working with multiple clients, or on multiple projects for the same client. The most important thing you can do here is to plan and protect your work day as much as possible, so it is not broken up needlessly. If you are on the same client and the same project for large chunks of your day, you won’t need to keep stopping and starting your time. I find that if I have to change client contexts more than 3 or 4 times a day, then it becomes hard to keep track of, and I’ve also probably been interrupted a lot, and had a crummy day as a result.
Interruptions happen, though, so it’s important to be ready to switch. If you get an emergency phone call or an app alert that you need to investigate, just start tracking the time under a new entry and update the details for it afterward.
At the end of the day, go back over your time sheet and double-check the time entries. If you are using the Harvest Chrome extension, you should be able to see that Trello cards or GitHub PRs match their respective clients and projects. This is also a good time to fill in missing details, like who you had a meeting with, or what support emails you responded to.
Aside from helping you get paid, time tracking does have a few other benefits.
First, if you have a weekly team standup where you need to share what you’ve been working on, you can quickly pull a report from your time tracker and use the entries as a working outline. In Harvest, I do this by running a detailed time report for a given client for the past week.
Second, clients often want details about the work you’ve done when you send your invoice. Instead of trying to recall all of this from memory, you can use your time tracking notes to fill in these details. In Harvest, I run the detailed time report for a given client and the invoice billing period, and pull out all the linked Trello cards, GitHub issues and PRS, and organize and de-duplicate them to show everything I’ve worked on.
Finally, time tracking can give you insights into how both your work and your life are going. In 2020, I had one of the hardest years of my career. I was working a lot of hours, and exhausted and quite burnt out by the end of it. In 2021, I made some big changes, cut my hours back, and it turned out to be a year of recovery and restoration. Looking back at the annual reports in Harvest, I can see the difference: 300 billed hours between a really hard year and a pretty good one. I now know what my upper limit is before leading to burnout, and what my lower bounds would need to be for a recovery.
That’s valuable information I wouldn’t have, without a time tracker.
Need help building or maintaining a Rails app?
Jeremy is currently booked until mid-2023, but always happy to chat.