At Bold Tech we prioritize having great internal tools - we understand the importance of efficient and personalized internal processes. As an internal tools development agency, we work with a variety of different clients on varying hourly contracts, with a team of developers assigned to each one. This means that time tracking is somewhat complicated, comprising varying client hours as well as internal ones, and it is of utmost importance.
Due to this complication, Harvest, the time-tracking SaaS product we were using, just wasn’t cutting it. Developers were having a hard time assigning their hours to certain clients to balance their time, the admin each month to sort through those hours and bill appropriately was adding up and we just weren’t getting the overview of project time commitment we needed.
We decided it was high time to practice what we preach and build a better, bespoke app for ourselves in Retool. By moving this core SaaS product to a custom tool we’ve been able to:
- Create an overview that allows better insight into our completed hours
- Directly integrate it into our CRM and invoicing software
- Cut down on SaaS sprawl across the board, to have greater control over functionality (and billing too)
In this case study, we’ll talk a bit about our previous struggles with SaaS, why we decided to build ourselves, and a bit about what we built out and how.
Here's a peek at the final app:
Subscribe to The Toolbox for free to skip the tutorial and download the JSON at the end of this article ⬇️
Members will get guides, tutorials and internal tool tips in 1-2 emails every month.
What we needed in a time tracker app
Bold Tech is an agency that specializes in building internal tools. Since we predominantly operate as a center of excellence, our contracts are typically long-term monthly retainers where companies are partnered with one of our dedicated internal tool experts to build, advise, and maintain their internal infrastructure.
Our engagements generally land at around 40 - 120 hours each month per client. This means that a developer's time might be split across several different projects at once. With client timelines and needs ever-changing, balancing time, and ensuring hours completion across each project is a difficult task for each of our developers in a given month.
Our old time-tracking process - underutilized SaaS
As most already know, Harvest is a time-tracking software that has built-in client invoicing and reporting and boasts tons of integrations and features. Nevertheless, in our use case, most of this functionality went unused. The unused buttons and functions cluttering the applications made a relatively intuitive process something that required onboarding and training to mold our tracking process into the Harvest system.
In our process, each month, we would:
- Assign developers a project and a total hour amount for them to complete for that project,
- They would then track time from the Harvest console for projects they’ve been assigned, switching between projects to track client time.
- At the end of the month, we would export the CSV, send our invoices to our clients, add up all of the hours a developer has completed, and pay developers.
Step 3 created a lot of admin time at the end of each month, often amounting to 10+ hours for our operations team to ensure appropriate billing to clients (including complexities for overages and variable pricing packages) and pay to developers. Since data was exported for this processing, it was no longer synced, and so lots of cross-referencing had to be done to ensure no errors were made in the final calculations.
Crucially, since we lacked an overview, each of our developers was having difficulty knowing if they were on track for their projects, nor were they sure if they might have a large crunch period at the end of the month.
At 12 USD per user per month, Harvest definitely wasn’t breaking the bank, but the cost of the hours of monthly internal admin, plus the potential high cost of error, meant it was time to consider a new custom build-out.
Why build in Retool from scratch?
Granted, building in Retool isn’t exactly like coding from scratch the traditional way - we were able to make use of built-in components and programming tools to build this tool much faster, but why did it make sense to invest this time in building our own version?
Well here’s the final app, a tool that works perfectly to our bespoke needs, and one that we have full control over:
Let’s run through some key benefits of the way we built this.
1. Bespoke UI tailored to the needs of our agency
Building our application from scratch, we were able to take the things we liked from Harvest and leave the things we didn’t. In general, this is a great way to look at the Build vs. Buy dichotomy: you can trial SaaS products as a way to determine what you do and don’t need, before moving on to build yourself.
We started by making a list of things that we knew we wanted in our application. For example, since our contracts were monthly, and we really disliked that Harvest’s summary statistics were all weekly, meaning developers had to mentally calculate hours. So we put a greater emphasis on monthly statistics in Retool.
Harvest’s summary:
Bold Tech's emphasis on weekly & monthly hours worked:
We were also able to remove 6+ buttons from a user’s field of view on the application and really hone in on the functionality we needed, to avoid confusing users.
With Retool’s IDE, it is almost effortless to rearrange the UI and adapt it according to the most efficient UX with user feedback.
Ability to add key custom features whenever we want
A feature we added that has really transformed the way our team can work is the summary of project progress per company for a month in view. As we mentioned, this was becoming a real problem with Harvest, as developers weren’t able to get any oversight on the progress each monthly retainer was making.
For this functionality, we opted for Retool’s table component, where we pull from our CRM and display all project assignments, the amount of hours assigned to the developer, the hours completed and then calculate the project progress to clearly display whether or not a project is on track:
With Retool’s built-in table functionality, we could easily add features like the progress bar and the color-coded tags that help a developer quickly discern where to direct their attention. We could also quickly add a sum-up below the table to show overall assigned hours. Under ‘month progress’ for each project, we added the caption to show the percentage of the month that has passed, to help developers align the hours completed with the amount of time left in the month.
None of this functionality was available in Harvest, and it has quickly made a huge impact on how our developers can work. Not only is it a nicer user experience, but a much more efficient one that leaves much less margin for costly errors.
Having complete control over our data for further analysis and integration
Having our application built in-house means we own and control the data. Because of this, we can easily build other application workflows around our data without having to worry about integration sets or extracting additional data, transferring it to different programs, and loading it into other programs with complex APIs and paywalls.
This was particularly useful as, for the next iteration of our internal tool infrastructure, we also wanted to have a multi-page application where users could view the project in its entirety and enrich data about a given client with details of previous projects. We have since integrated this time tracker data with our CRM to create a management overview, as well as a system distributing relevant information to the respective teams in a structure of custom tools.
By managing the data in-house, we can quickly and easily expand and improve our tools and systems to automate and optimize processes.
Feature highlights: Cool stuff worth sharing
Here are a couple of handy features we were able to build out in Retool that we want to tell you about:
The timer continues working when you close the Retool application
One unique feature that we added is that the timer works when the Retool application is not open.
Employees can close their browser and reopen the application later to find their timer is still running. Once a timer is initialized and a row is added to the timer_sessions table, we can refer back to when that timer was started, and update the timer once a user logs back into the application.
JS query
const wasClockRunning = await triggerQuery(stopClock)
try {
let timerToStart
await triggerQuery(saveRunningTimer)
if(typeof timer === ‘undefined’) {
const { result: [newTimer] } = await triggerQuery(createTimer)
const updatedTimers = [...timers.value, newTimer]
timers.setValue(updatedTimers);
timerToStart = newTimer
} else {
timerToStart = timer
}
const { result: [newOrUpdatedTimerSession] } = await triggerQuery(updateOrCreateTimerSession, {
timer_id: timerToStart.id,
initial_seconds: timerToStart.seconds
})
Nevertheless, this feature does mean developers might close the browser and forget to clock out, which is why we added the...
Slack ping for running timers (and other fun workflows)
Using Retool’s native integration with Slack as well as the Workflows product, we set up a ping for running timers over 3 hours. That way, developers get a quick notification directly to their Slack to let them know it’s ongoing.
Next on our roadmap is using Workflows to produce automated custom reports which are sent to each developer weekly via the Retool email system.
Direct integration into our Postgres CRM & invoicing software
As part of our wider infrastructure, we can directly create sum-up views to see how projects are progressing, and the general cadence of a given month to make smarter decisions for future projects.
Now, with the time tracker app built out for our custom use case, we are empowered to build even more effective tools on top of our internal data. The roadmap includes further integration with the CRM to enrich project data and give better context to developers, as well as extending automations and integrations with our HR and invoicing systems.
Download the sample toolscript
The Toolbox newsletter members can download the JSON and import it directly into their Retool environment to test it out ⬇️⬇️⬇️