Timing - Automated Time Tracking for macOS
The Context
Working on the macOS time-tracking app Timing for over three years was a unique experience. During this time with Daniel Alm, Timing felt like home – very much like working on my own apps.
Core Contributions
My work focused on:
- Adding features, most notably integrations with other applications
- Building bridges to third-party productivity tools
- Bug fixing and stability improvements
- User interface implementation
Technical Challenges
Third-Party Integrations
One of my main contributions was developing the integration system that allows Timing to automatically track time spent in various applications. This required spelunking in SQLite databases to find out ways to ingest data.
RxSwift
The app’s reactive architecture using RxSwift allowed us to:
- Handle real-time activity monitoring
- Coordinate multiple data streams
- Maintain UI responsiveness during heavy processing
Team Dynamics
What made this project special was the collaborative environment and the trust to make architectural decisions. The codebase was well-maintained and actively worked on, Daniel emphasized pragmatic testing, and there was always room for suggesting improvements and implementing them.
Personal Reflections
This project felt like home: like my apps, it was crafted by a single mind with a focus, not a group with shifting participants and styles – which you notice quickly as you walk through a code-base. We’ve worked together on this app for a long while before parting ways, so I knew some corners like our pantry at home.
I also remember that I didn’t need to touch client/server synchronization until very late in our collaboration, and it was kind of weird to find an unknown part of the app so late in the process. The feeling of homeliness didn’t fit the surprise of discovering how that stuff worked, so that was quite a weird dissonance.
I wonder if I would’ve made some decisions differently, had I not been shielded from these internal workings. Then again, it’s hard to justify the time and cost of walking someone new on the team through all the parts “just in case”. And dumping information up front, when it cannot yet be anchored to experience, will make very little of the tour actually stick.
For my projects, I took away a lesson here: that it’s important to onboard someone with narrowly scoped tasks that touch as little of the code base as possible, and expand in scope slowly, while also offering a tour of the code base every now and then to help the new teammember orient themselve – a lesson I took to heart as I prepared things to work on for Marin in my app TableFlip later.
Impact
The features and improvements I contributed to Timing helped serve thousands of users who rely on accurate time tracking for their billing, productivity analysis, and work-life balance. The stuff I was allowed to create, like the “Entry-O-Matic” (actual working title “Task-O-Matic” rolled better off the tongue, but was inaccurate) reduced the repetetive work that users needed to do, and that must surely have saved a couple of years of people’s lives, combined, which is a crazy thought.
I’m using Timing myself and enjoy watching it grow up and change even since I left. It’s a great piece of software.
Team & Collaborators
Team size: Small team