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.


  1. Accessing HealthKit data in the background via a complication datasource seems to be a hit or miss right now. I need to do more research and see if I could use pedometer data to bridge the inconsistencies. ↩︎

  2. In general, the watch app relies on the phone app to provide all the data. But when we go for a run without a phone, Tempo on the watch takes over to update the data (that was originally generated on the phone) with the latest workout data generated by the Workout app on the watch. Even when the phone to watch sync is active again, the latest workout data from the watch has to first sync with the phone before that data becomes available to Tempo on the phone. So there is a delay for the phone app to refresh with the latest workout data. This results in the phone app to continue sending the older version of the data (before the latest workout) to the watch app, and watch app continues to merge the recent workout data. At some point, the phone app catches-up, and sends most up-to-date data, and the watch app stops doing the merge. ↩︎