GCal Time Tracker

Being a CTO means you are involved in all the projects delivered by your Company; this means you have the opportunity to be exposed to many technologies, but also not being the person in charge to write the actual code. I miss that part a lot, because I still love to code. I love the feeling of solving non-trivial problems by writing elegant and efficient code.

One of the most boring and time consuming activities my team is doing is time-tracking; I think this might be a very basic common case for many companies who want to know how much time they spend on each project. This activity is important in order to control cost and make accurate budget estimations.

Over the last years we based our time tracking on Clockify.

Clockify is an awesome (and free) time tracker and timesheet app that lets you track work hours across projects.

In order to plan projects' activities according to our capacity we update each monday a big Google Sheet file where we make sure that staffing on each project is balanced to meet its deadlines.

Then we use Jira in order to manage sprints and tasks for each project.

On an individual level, we leverage Google Workspace in order to manage meetings (Meet), plan our agenda (Calendar), communicate (Chat, GMail), share documents (Drive). This means that meetings automatically show up as events in participants' calendars.

I also encourage my team members to "book" their Calendar even when they are working alone, in order to set their agenda busy and avoid others asking for meetings. I strongly believe that continuous change of context threatens and negatively affects productivity.

Net: my team is planning with Excel, executing with Jira, managing personal schedules and meeting with Calendar and finally (manually) filling timesheets on Clockify (...!).

I plan to close the gap between planning and execution by improving the way we use Jira in the future (or by selecting a more flexible software... dear Atlassian, you have been warned!), but I wanted to do something today to relieve my team from manual time tracking in Clockify.

Our activities are already tracked in our Google Calendars. Also, as I said, shared activities are automatically added to each participants' calendar.

I wish we could just export events from the Calendar to automatically fill the timesheets.

Introducing GCal Time Tracker (GTT) - a web based application that seamlessly integrates with your Google Calendar and export events. If events are flagged with preset "TAGS", the duration of events is then summed up and aggregated by those specific TAGS. Net: timesheet tracking by the press of a button!

The opportunity to code something useful for ourselves was too good to pass up, or to ask somebody else to do it. On a lazy weekend last February, I coded and deployed the first version of what went live today.

Due to my experience with the language and the framework, it was pretty easy to code and deploy a Python/Django app. Honestly I'm not satisfied with Google's API documentation, which is pretty much outdated and incomplete, but in the end I managed to integrate with Calendar's API.

What was really unexpected is how much time it can take to obtain the approval from Google to open your app to the public. If your app accesses users' personal data (in my case, Calendar's events), Google requires it to undertake and pass through a strict verification process, in order to prove that it is not coded to harm your own users.

Until the app is pending approval, only selected test users can login through the Google OAuth Consent Screen and interact with Google APIs.

The process involves uploading a video on youtube that explain how your app works, writing compliant T&C and cookie/privacy policies, and explaining why and how your app requires access to those personal scopes.

The full process took almost 3 months. I must admit that my busyness and lack of time to spend on non-billable projects didn't help to shorten the process, but the feedback from The Google Cloud Trust & Safety Team was most of the time extremely generic and included a pretty broad list of "issues" to fix in order to get the app approved. Among the list of issues, each time, there was one that prevented my app from getting approved, but it was never explained which one specifically. I believe this process can be greatly improved by Google.

In any case, the bigger the effort, the bigger the satisfaction I had when today my team members logged their first hours in the app.

It was good to be back coding again, and I'm happy it was for something that will make my team members' work life better.