Pedometer += 1,000,000

Yesterday Pedometer++ had its one millionth download. Here is the story of how it got there.

On September 10th, 2013 Apple announced that the iPhone 5s would include a new motion tracking chip called the M7. This chip allowed your iPhone to begin functioning as a fitness tracker. I remember first seeing Phil mention this in the keynote and wondering whether I could get an app together in time for when the iPhone launched the following week.

I quickly discovered that I couldn’t realistically ship an app without actual hardware because none of the APIs worked in the Simulator. So the following Friday I got up at some ungodly hour and got in line at my local Apple Store to get my iPhone 5s.

Once I got it, I rushed back to my office to try out the dead-simple app I’d thrown together. The app worked and I submitted it to the App Store. After review the app launched a week later. It was extraordinarily basic.

The response to it blew me away. I had put it on the store more as a whimsical tool for playing with the new hardware but it took off from day one. With 12k downloads in its first day of availability, and 30k its first week. Seeing this opportunity I worked over the next few days to get a better, more capable application ready.

Version 1.1 launched 9 days later which was a significant overhaul of the app. This included the concept of working towards a goal as well as storing your daily step totals. From here the app continued to grow in terms of popularity and downloads.

Given the attention it started to receive it also became the target of a slew of copycat applications (my thoughts on which I discussed then on Developing Perspective). I wanted to try and make sure that I stayed ahead of these so I began working on another major update to the application that was a bit more thoughtful than the rush-job I’d done for v1.1.

This resulted in the visual structure and features that the app includes today, which was launched on January 31, 2014.

Pedometer++ has become one of the most important apps in my portfolio and probably the app I’m now most widely known for.

It also carries with it an attribute that I’ve never experienced with any of my other projects—a sense of doing genuine good. I have had countless reports of how it has helped people get healthier, recover from injury or lose weight. These are the stories that really impact me as a developer. The thought that something I made in my basement can have extended and improved people’s lives is truly remarkable.

As I sit here 1.5 years later I see a bright future for Pedometer++. Apple continues to enhance and expand the fitness tracking capabilities of their devices (including the Apple Watch). Pedometer++ will continue to adapt and improve right along with these. It is remarkable to me how such a simple concept can hold up so well in the long term.

For the number nerds out there, here is the weekly downloads graph since introduction:

David Smith

AILW: Thinking about Load Time

WatchKit Series

One of the loudest complaints I’ve heard since the launch of the Apple Watch is the delays you can experience while launching 3rd Party apps. These can experience widely differing waits, sometimes a few seconds, sometimes upwards of a minute.

There is a certain amount of non-determinism that is inherent in the way WatchKit is structured. Any time your UI is split from your controllers via a wireless connection weird things can happen. This variability in launch times is probably just something we’ll have to deal with until we get native apps. But what can we do now?

I did a series of experiments this morning to see if there were any structural differences in the way a WatchKit app is designed that make a difference on how quickly it launches. My initial (incorrect) hypothesis was that having an app structured with pages, tables or getting data from your parent app would have a major impact on launch time. It turns out that the reality is far simpler.

Here are the results of my initial testing. I built a variety of test apps and launched them all on the watch (force quitting them between launches). I then found the median launch time for each build and laid them out side by side. I made (clockwise from top left):

  • Blank - Any empty app with no data or UI.
  • Paged - An app with three pages of Interface Controllers
  • Table - Loads a 10 row table
  • Core Data - Uses openParent to retrieve a value from the parent app’s Core Data stack.
  • Parent - Uses openParent to retrieve a value from the parent app

As you can see, the load time across each of these various configurations is nearly identical.

What this tells me is that the area I need to focus on for improving the launch time of my apps is entirely the speed at which I can get the data that drives my app loaded and sent over to the watch. The physical layout and structure of what I build matters far less.

I’ve settled on an overall structure for my apps where the watch extension does essentially all of its work from caches primed by the main app. Similar to what I outlined back in December. Taking this approach means that I can minimize any waiting that is my fault during launch. My apps still sometimes have the odd long launch time but I’m increasingly convinced this isn’t something fixable until we get the native SDK.

David Smith

AILW: First WatchKit Review Guideline

WatchKit Series

I’ve been monitoring the App Store Review Guidelines for when rules specifically addressing the Apple Watch would appear. Today we got our first new rule specifically forbidding a certain type of Watch app.

10.7 Watch Apps whose primary function is telling time will be rejected

For now it looks like the only ‘clock’ apps that are going to be permitted on the Watch are those provided by the built-in clock faces.

I’ll continue to keep my eye on this page for future guideline updates.

David Smith

Learning to Ride a Bicycle, Again.

Over the weekend I watched this rather fascinating video where Destin Sandlin describes the process of learning to ride a bicycle with backwards steering. The underlying point of the video is to demonstrate how engrained our thinking can become, even without us knowing it.

The video is worth watching on its own, but I mention it here because it really got me thinking about the App Store. If you’ve been listening to my recent series of episodes on Developing Perspective you’ll know that I’ve done a lot of talking about how the App Store has changed over the last few years.

I’ve made my primary living from selling apps in the App Store for roughly five years now. In some ways that experience gives me an advantage over newcomers to the platform. My apps have a certain amount of momentum that helps keep them sustainable. But I’ve started to recently really worry about the skewed perspective that the last five years has engendered.

Am I still going along riding my old school App Store bike, when the steering in the modern App Store has reversed? The nature of mental biases is that they are insidiously difficult to recognize in yourself.

Take this past weekend as an example. There was a time when being in the App Store on Day One of a new platform launch would, on its own, generate a significant amount of interest, buzz, downloads, etc. From what I saw amongst my own apps (and comments from other developers) those impacts are significantly more muted these days. That isn’t a problem, in-and-of-itself, but it isn’t what I had grown to expect.

To stay competitive and continue to be able to make my living this way I expect I will need to make sure that I spend time making sure I know what kind of ‘bicycle’ the modern App Store is. My past experiences are still useful, but I cannot allow myself to lazily expect them to be predictive.

David Smith

Random Apple Watch Observations

I have now been in possession of an Apple Watch for about three days. Here are a few random observations I’ve made about using it:

  • Overall it slips rather seamlessly into your life. The improvement it provides is reasonably limited, but still felt. There is very little I’ve encountered so far where having a watch had a dramatic impact, but it is useful.

  • The wake on raise function (that turns on the watch when it thinks you are looking at it) has been a bit hit-or-miss for me. It has worked correctly maybe 75% of the time, pretty good but that 25% feels pretty annoying. I especially found it to be bad while driving—where it kept waking up as I turned the steering wheel. This was rather distracting especially at night where it kept drawing my eyes down.

  • Making a phone call from your wrist feels like the future. Not sure how practical it will be in reality but very cool either way.

  • I’m still bouncing back and forth between watch faces trying to find my favorite one. One thing that I did find kind of annoying is that you can’t show the time in the middle of the Modular face. I really wish I could put the time in this big middle box. Right now I’m going back and forth between that face and the Utility analogue face.

  • The fitness tracking stuff is really sweet. I love being able to get quick performance stat updates while out exercising by just looking at my wrist. Previously I’d used Runkeeper’s audio cues for this, which does the job but keeps pausing my podcast every few minutes which is less than ideal. The heart rate sensor seems pretty consistent with my experience with other dedicated devices.

  • The activity tracking gets really confused by walking while pushing a stroller (something I do a lot). It counted roughly 40% less steps than my iPhone in my pocket for a long walk we did on Saturday. Certainly understandable since my wrist isn’t moving much while holding onto the stroller but frustrating nevertheless. I wish it would have more intelligently combined the data from my iPhone with the Watch to get a more holistically accurate picture.

  • I kinda wish that Apple had setup a dummy account where you could send digital touches and heartbeats too (maybe to Siri?). I tried showing the feature to a few friends over the weekend but this requires the rather awkward decision about which of my Apple Watch equipped friends I was going to interrupt with my heartbeat.

  • Also, it is worth noting that the heartbeat you send with that communication feature isn’t your real-time heartbeat. Based on what I can gather it looks to be based on the last measured value the Watch has. This is typically within a few minutes but still feels slightly less ‘intimate’.

  • The latency of using apps is a bit more than I was hoping for. Overall you can get things done with it but given how short I’d like to keep interactions with the Watch waiting 3 seconds for something to load is not great.

  • I’ve turned off essentially all notifications to the Watch except for phone calls and text messages. Everything else just got annoying very quickly.

My general impression is that it is a very solid V1 product. There are still a lot of little rough edges but overall it achieves what it sets out to very well.

David Smith