One of the most important questions we ask ourselves when starting a project is if we should “build” or “buy.” Do we develop a custom piece of software that meets our needs exactly or use an existing solution (open source software or a paid service)? At 18F, we have that conversation nearly every day, both for projects with our partner agencies and for internal ones, which help our team work faster and more effectively.

The clock and the candlestick from Beauty and the Beast celebrating.

I recently spent time helping with one of our internal frustrations — how members of 18F track how we spend our time. 18F operates many of our projects under the Economy Act. For the uninitiated, this means that all project costs must be billed to the partner agency. 18F walks a fine line. We cannot make a profit on our work, nor can we take a loss. Thus, it is critical that we manage time and money responsibly, both for our own accounting and for the taxpayers who support our work.

For a long time, our internal time tracking looked something like this:

Old time tracking screenshot

Every week, our operations team dutifully created a giant Google Sheets spreadsheet and shared it with the entire team. As we grew, the number of rows multiplied, and the number of columns increased, making it more and more difficult to manage. Our last spreadsheet time tracker had 55 line items and over 60 employees, and it was clear this process would not scale. Our operations team and product leads had the unenviable task of ensuring people didn’t accidently type in the wrong cell. Once the timesheet was completed, they then had to spend even more time converting the spreadsheet into account statements that we could send to our partners. While this approach worked well when we were a small group of twenty, as we grew to over a hundred, we realized the time spent maintaining the spreadsheets was unsustainable.

We needed something new.

###Evaluating options

Many people would say tracking time is a solved problem — endless tools and services exist to help organizations like ours do it well. Before we started looking at what was available, we conducted some minor usability research among both reporters of time (everyone at 18F) and backend time processors (the operations team). Out of those conversations, a few things became clear:

  • We wanted the flexibility to record time in either hours per week or a percentage of a given allotment of hours.
  • No one wanted another login. Luckily, another 18F project (MyUSA) does a great job at authentication. Thank you!
  • We needed to customize the periods in which we record time — such as by fiscal year, weeks with federal holidays, etc.
  • Ideally, we wanted to record enough information that later developments could allow the system to provide real-time information on project costs to our partners.
  • Ideally, we wanted the system to help others inside 18F better understand not only how much our employees are working but also how they are spending their time.
  • To minimize our footprint, we want to deploy something on 18F’s new platform as a service, which would take care of many of our operational and security concerns.

We looked at the available products, weighing options that met our criteria, and estimating how much time we would spend if we built a custom solution. Ultimately, we opted to try rolling our own simple solution using Django, a Python framework both I and Dave Zvenyach (a fellow 18Fer who volunteered to help) have experience in. Although building our own solution meant we would need to spend time developing and maintaining a system into the future, we felt that something so critical the entire team touches it every week was important enough that we really wanted to make the user experience as simple and easy as possible. We also felt this was a great opportunity to try out our internal platform as a service and flex our Python muscles.

Building things out

The first prototype took about day to build and deploy. We built it entirely in the open (see our GitHub repository) and immediately put it online for the team to test.

Prototype screenshot The first iteration of Tock

At the core, this is a very simple Django site. We have four main models, or types of information:


A person who is reporting time. We integrated with MyUSA so 18F employees are automatically logged into Tock based on their email address. No passwords here!

Reporting periods

The timespan we are recording, for example, the week of May 11 to May 15.


The individual line items we record time against. Every 18F project gets a line item, and we also have general line items for things like “out of office” or time spent on 18F-focused activities, such as our weekly all-hands meeting.


The glue that holds everything together. Each user gets one timecard for every reporting period, on which they report each project and how much time they’ve spent on it.

Although this initial effort didn’t do everything one could ever want in a time tracking system, the core functionality worked, and we had a viable prototype.

Sharing with the team

We asked everyone at 18F to try Tock for a week and report back. Initial feedback was very positive:

“Tock has made accurate reporting of how we spend our time at work much easier.”

“Before Tock, I used to hate Mondays.”

As with any project at 18F, people were also quick to provide a lot of constructive feedback as to how to make the experience even better. For example, now that time tracking was much easier, our list of projects grew rapidly as people tried to strike the right balance between capturing work accurately and forcing users to browse a long list of random things:

List screenshot So many items!

We fixed this, in part, by providing an auto-select based on Chosen, an open source tool designed specifically for this purpose. Now, Tock users can search by either the project or partner agency name when selecting a line item:

Line screenshot

The future of time

We’ve had Tock in operation for a little over one month. So far our time investment has proven well worth the results. Our operations team spends less time tracking hours spent on projects, members of 18F are relieved to leave the monster spreadsheet behind, and the Tock team had a great opportunity to build a small, fun app. We now have a solution that works the way we do. Hopefully, it can be a useful solution for other organizations as well.

Think Tock may be a good solution for you? Check out the code on GitHub. Would you like to be recording your time spent helping make the government awesome in Tock? Well…we’re hiring!