I should have known this one would take longer than I expected.
My Jawbone UP finally died, so I replaced it with a FitBit. I've really enjoyed the Jawbones, but I'm not confident in the future of the company's wearables department. I decided to take the plunge and dive in to the FitBit ecosystem instead. I got a new FitBit Charge 2, which among other things includes a heart rate monitor which I'm excited about. But step one was rewriting my sleep import script to pull sleep data from FitBit instead of Jawbone.
Registering for the FitBit API was pretty straightforward. I was also impressed that the FitBit API provides additional capabilities for your own account when you tell it you're creating a "Personal" application. You get a lot more data out of the API compared to applications accessing other peoples' accounts. For example, you get the minute-by-minute sleep data needed to build the image that I show for sleep posts.
One thing I was surprised about was that the API doesn't have any concept of absolute timestamps. All the times provided from the API lack a timezone and are local time. This means there are pieces of information such as "startTime": "2017-01-29T21:50:00.000" which doesn't actually correspond to an absolute point in time. This is a challenge when importing this to my website, since I want to pin that to an actual timestamp with a proper timezone offset. I realized this is the same problem I encountered with timestamps in Exif data in my photos. I even wrote a whole description of the problem and my solution. I had forgotten that at the end of that I turned the whole thing into an API so that I could reuse it later, so thanks past me!
Now that I'm able to take a sleep record that starts at "2017-01-29T21:50:00" and turn that into an absolute point in time, the next step was generating the sleep image from the raw data they provide. FitBit provides minute-by-minute data, so I just draw a bunch of skinny rectangles in the SVG and let the browser sort it out. This looks fine at 100% zoom, for example:
However, the number of vertical lines in the image is dependent on how long I was asleep for, so my images are all different widths. When I render this on my website, I just set the width to 100% and let the browser scale it. This unfortunately results in some interesting scaling artifacts that I'm not happy with:
I don't really know how to solve this, so I'm going to leave it alone for now. I always have the raw data in the post so I can go back and regenerate the images again later.
This post is a review about the syncing process of a number of popular self-tracking devices.
Currently, most wearable trackers require some procedure to sync the device with your smartphone in order to get the data off of them. While it doesn't sound like there would be a huge difference between the Bluetooth syncing of the Fitbit Flex vs the Basis watch, it turns out small technical differences can make huge behavioral differences.
I've been wearing all of the below devices for at least over 3 months, and I've had the Jawbone UP for two years. I don't like to jump to snap conclusions, so I wait until I've lived with a device for an extended period of time before writing about it.
Starting the Sync: To sync the Basis watch, you press the button on the side of the watch to begin syncing. However, this requires that the app is running in the background or the watch won't be able to communicate with the app. In practice, this means you end up launching the app, then pressing the button on the watch.
The Syncing Process: The syncing process takes several minutes. I don't know why it's so slow, but it's definitely the slowest out of the bunch. Afterwards, there is very little information visible in the iPhone app, the website has a better view of the data.
Effort vs Reward: The amount of effort it takes to sync the Basis is far too high given the minimal immediate reward on the phone after a sync is complete.
Starting the Sync: To sync the Fitbit Flex, you simply launch the app on your phone, and it goes and finds the Fitbit and begins downloading data.
The Syncing Process: It takes relatively little time to finish the sync once it's started. The only thing I've had trouble with is getting distracted while it's looking for the Fitbit and then not noticing if the sync is complete or if it errored out before finding the Fitbit.
Effort vs Reward: The amount of effort to sync seems like it should be low, since it only requires launching the app. However, in practice, the cognitive overhead of inspecting the interface to determine whether the sync has started and finished successfully makes the effort relatively high. The reward is also not as great as it could be, since the effects of the sync are not immediately visible. Yes, the screen shows today's stats, and you can page back through previous days, but I often forget when the last time I synced the device was, so I don't know how far back I should keep looking to find the "new" and "interesting" data that I haven't seen before.
Starting the Sync: This is one of the only devices that does not require a manual step to begin syncing. Assuming you have a computer always plugged in at home with the Fitbit base station plugged in, then whenever you are in range of the base station the device will automatically sync with no additional effort on your part. In fact I've also had my Fitbit sync via other people's base stations! I guess it was only using the base station as a radio-to-Internet gateway, just treating the OSX app as a way to pass data through.
The Syncing Process: Because you do not have to manually initiate the sync, you don't even notice the syncing process.
Effort vs Reward: This essentially requires no effort, since as soon as you get home the device syncs. However, this also means Fitbit has less opportunity to reward you. The feedback was limited to push notifications about significant events, like if you broke your goal for the day, you'd get a push notification when the device was done syncing. The result is that there is very little reward, and it's easy to forget about the app completely.
Starting the Sync: To begin syncing, you need to tap the "Menu" icon in the top left corner of the screen. At this point the lower half of the screen changes to show a Shine-sized circle on the screen saying "Place Shine here to sync". The app claims you need to place the device on the iPhone's screen to begin the sync. However there aren't any sensors in the phone that can actually determine whether the device is physically on the screen. So I end up starting the sync by just tapping the center of the circle with my finger.
The Syncing Process: During the whole syncing process the app shows rings emanating from where you are supposed to place the Shine on the screen. However there is no indication of the progress of the sync, and it's not even very clear that anything is happening other than some animated circles.
Effort vs Reward: After the syncing is complete, the app updates its daily activity cards with the recent data. Unfortunately there is no indication of what data is new vs what has already been synced, so you end up swiping back until you see a day you recognize as having already seen before. The bottom half of the screen still shows "Grab Shine and hit the road. Then sync your shine to see how many points you earned" even immediately after syncing, so it's not quite as motivating as it could be.
I was not able to get enough experience with syncing the Pulse to make a fair comparison. The device recently started rebooting whenever a sync begins, and I haven't yet returned it to get a new one.
Starting the Sync: To sync the UP band, you have to take off the endcap, launch the app, and plug in the band to the headphone jack on your phone. The app auto-detects when the band is plugged in and begins syncing right away.
The Syncing Process: Once the sync begins, there is a nice big progress bar on top. It animates quickly, so you're never left wondering if the device got "stuck," and usually finishes within a few seconds assuming you're downloading 1-3 days of data at a time. The sync finishes with a resounding "100%" on the screen, so it's absolutely clear whether the sync completed successfully, even if you look away from the app for a few seconds.
Effort vs Reward: When the sync is complete, the app shows a summary of the data that was just downloaded. This serves as a great way to mentally recap and reflect on my previous day or two of activity without paging through interfaces. It probably sounds like the effort of physically plugging in the device to the phone is high, but the rewards far overcome any inconvenience, and so this ends up being the most satisfying syncing process out of all the devices.
The new Jawbone UP claims to have "continuous syncing" through the phone's Bluetooth LE connection. If that's the case I'll be very interested to see how that ends up feeling in practice!