CityWalker in four months
CityWalker went live on 30 April as v2.2.0. On 31 August it is at v3.4.1. Two months ago I wrote up the first 60 days. This is the follow-up. The analysis still runs from 13 May, when I started recording analytics events with Aptabase.
Before anything else: CityWalker for iPhone
CityWalker is Android first. There is now an iOS build in TestFlight, an open beta while I close the gaps with the Android app. Expect rough edges. Feedback from the beta is already shaping both platforms.
Walks
Total walks went from a few hundred to 1,668. Weekly activity roughly doubled.
Completed walks since 13 May, by milestone:
| Milestone | Date | Days since previous |
|---|---|---|
| Walk 500 | 10 Jul | 54 |
| Walk 1000 | 10 Aug | 31 |
| Walk 1500 | 26 Aug | 16 |
The first 500 walks took 54 days. The last 500 took 16. August had 863 completed walks, more than May, June and July together.
Walk 1 to walk 2
In the two-month post, 46% of users came back for a second walk. I shipped a redesigned walk summary screen in early July aimed at that drop. Over the last 30 days the rate is around 55%.
| Walk # | Completed (30 days) | % of Walk 1 |
|---|---|---|
| 1 | 228 | 100% |
| 2 | 126 | 55% |
| 3 | 93 | 41% |
| 4 | 71 | 31% |
| 5 | 58 | 25% |
The redesign shipped around the same time growth picked up and more cities were added, so I cannot fully separate the effects. I think it helped.
Walks per user
Last time this number was climbing from 1.13 to 1.45. It reached about 2.0 and has stayed flat there for several weeks. Cumulative walks divided by cumulative onboardings does not keep rising once the app settles. New users keep pulling it back to the average.
A flat 2.0 with total walks still growing means more people are each doing a couple of walks. That is the pattern I want.
Acquisition
Weekly walks and weekly onboardings both roughly doubled between early July and mid August. Daily installs went from about 7 a day in July to a mid-August peak near 25, then eased off. The active install base grew from about 150 at the start of July to about 370 by mid August. My guess is that the growth is compounding.
More cities means fewer new users hit a dead end. Better walk 1 to walk 2 retention means more of each group stays. All acquisition is link-driven, so a larger base produces more links. Summer walking weather in the northern hemisphere probably helped too. I do not have enough data to be sure.
City downloads
This is the metric I watch most closely. When a new user cannot download their city, they usually do not come back.
At launch about 50% of city downloads failed. At two months it was 35%. Over the last 30 days it is 26%. Better, still short of the under-10% goal.
Close to half of the remaining failures are the server being busy, which is the shared OpenStreetMap data service rate-limiting large requests. The other common case is a city too big to download in one go. Over the last 30 days the app showed the too-large screen 724 times and 629 were resolved, usually by picking a smaller region.
City data does not come straight from OpenStreetMap. It goes through a small caching proxy I run. Over the last 30 days about 60% of requests to that proxy were served from the cache without touching the public Overpass servers at all, and that share is slowly rising as more cities get requested more than once. A cache hit is fast and never fails with a busy server, so raising this number is one of the better ways to bring the failure rate down.
Stability
The two-month post said one crash in 90 days. That did not hold. The 3.1.x releases in mid July introduced a crash that fired about 20 times over two weeks, plus a few ANRs, mostly on Android 15 and 16. I fixed it. August had 5 crashes for the whole month and no ANRs.
Region seeds
City boundaries come from a public GitHub repository under the OpenStreetMap license. The app pulls the latest version whenever it opens. The catalog has gone from version 36 to version 133 in two months and now covers around 130 cities. Each one was added because a user was already walking there on a plain radius download. Most of August went into tooling to split very large cities into district-sized pieces, so more of them can be added without hitting the download limit.
Walkers around the world
Two months ago the app had been downloaded in 49 countries, with a completed walk in 24 of them. It is now around 85 countries, with a completed walk in 56.
Most users are still in Europe and North America. A small group of power users does a large share of the walks. The most active person has completed over 200.
What I am shipping next
- Automatic retry and smarter splitting for city downloads, to push the 26% failure rate down. The server-busy failures should mostly go away if the app waits and tries again instead of showing an error.
- A better map, for cleaner coverage viewing.
- More work on Plan a Route.
- Getting the iOS app to release level.
