Introducing Tempo on Apple Watch
It’s finally here — Tempo now works on your Apple Watch!
This is for all of us, who need a little extra motivation to do our runs these days. You can do the following with Tempo on your Apple Watch,
- Track distance totals for the current week, month, and year.
- Use a Tempo complication on your favorite watch face to stay motivated towards your week, month, or year's distance goal.
A feature request that could help many runners
For many of us, our goals keep us motivated through our training cycles. In the midst of a global crisis, with races getting cancelled for the current season, that motivation has been a bit lacking. So when Zac, one of Tempo's champion runner and evangelist, reached out with a suggestion about a watch complication to track the current month's total distance, I instantly knew that it was a great time to build and launch Tempo's watch app. It could be a way to participate by enabling runners to maintain some long-term focus during the time of crisis.
From zero to a functional app
The initial app took less than a couple of days to put together. That was followed by fine tuning all the watch face complications, and a lot of field testing to further refine details like the following,
- How does a Tempo complication update everyday; especially at the beginning of a period — week, month, or year — when the total distance for that period resets. Not tricky in terms of development, but I wouldn't have discovered this scenario without doing adequate real-world testing, over multiple days.
- How does a Tempo complication update after a run that was tracked using the Workout app on the Apple Watch. I have some hooks implemented to handle this, but don't think it's perfect, and will need more testing and work to fine tune.[1]
- How to avoid data discrepancy while maintaining bidirectional sync between Tempo on the watch and Tempo on the iPhone. Think transient source of truth and merge conflicts around pre-synced Health data across devices.[2]
- There are a lot more, behind-the-scenes, dev-level tooling and practices that I identified and put together to be able to do productive development with a tethered watch device. A lot of iterative rewrite/refactoring happened to do things the right way.
Some of the above is challenging to get right because it requires testing on a real watch device with real workout data. Add to that the limitation of the fact that I can only workout (run) once these days. I could have skipped some of it for this initial launch version, but when the data is meant to be available at a quick glance and represents a goal metric, fast data precision and integrity is of utmost importance.
Staying focused during the pandemic
Building this has been a great distraction from all the pandemic news while staying curiously focused through the fragmented workday hours with kids at home. Some key development highlights include,
- This is my first SwiftUI app in the App Store. SwiftUI is such a great tool for developers (and designers). Thanks to Apple engineers for making UI development so much easier and fun to do. Technically, I really like the immutability and state management mechanism for views in SwiftUI. It also feels a lot faster to prototype and transform into production-ready UI.
- Developing and testing watchOS app that accesses Health data has it's own peculiarities that were both enjoyable and frustrating to keep me curious and engaged.
Overall, I enjoyed exercising some new development muscles with SwiftUI, WatchKit, WatchConnectivity. I also appreciated how my running while build-testing this transformed from more than the usual fun physical activity to also the need to go get some real-world testing done. It led to a 13-day running streak for me, which might be my longest streak in recent years, and will probably remain that way through 2020.
Sparking inspiration & motivation
The app itself is simple right now, but as Zac put it, "perfect for sparking inspiration and motivation." Having a monthly distance complication on the watch face has been a great motivation to keep running. Seeing it first thing in the morning as I glance for time/date/weather gets me oriented about my day's workout goal. Seeing it later in the day, after a run, is a nice boost to that feeling of accomplishment and staying on track towards a long-term goal. I want to say it’s the equivalent of Activity app for running, but that's too early, and more of an aspirational goal. A lot more to come!
My thanks to Zac for sending this feature request that allowed me to do something via Tempo for our community during these crazy times.
I hope you are still able to run safely by following social distancing measures, and this update helps maintain that spark and joy of running.