When Apple replaced its Google-powered maps app with a complete in-house rewrite for iOS 6, most users had little good to say about it. It was inaccurate. It lacked public transit directions. The search was paltry, as was the iconography. At best, it could be described as slick, with the pixellated pop-in of previous generations replaced by crisp, swiftly scaling vector lines. But this was not enough to offset the lack of functionality compared to Google’s definitive mapping solution, and so Tim Cook apologized and we all went on with our lives.

It’s now a couple of iOS releases later, and over the past year — especially with OSX support in tow — I’ve been frequently finding myself reaching for Apple Maps before going anywhere near a browser. Gradually, Apple has been tending to its garden: improving its data; getting better business listings; making its icons more contextually meaningful. At the same time, in lockstep, Google Maps has been driving me progressively up the wall. And as someone who has had maps.google.com burned into his fingertips since its inception, I can’t help but see this as building towards a major shift in the balance of power in the mobile sphere.

One of the most frustrating issues with Google Maps is seemingly minor, but hits me every time I use it. When you go to open a map, it initially — silently — loads as a static image. After a few seconds, the UI appears, followed by the actual interactive map. But nothing is done to distinguish the fake image-map from the interactive Javascript map, which means that when I first go to drag the map with my mouse, I am inevitably left with a useless thumbnail dangling from my cursor. Every time. Even worse, the UI widgets appear to be clickable during this image phase, but have absolutely no function! The only thing you can do to avoid driving yourself crazy is wait for the tell-tale pop-in that heralds the interactive map — assuming you didn’t miss it on initial load.

The UI just doesn’t seem to work half the time. Widgets always take a long time to load. Popups frequently overlap each other. Controls often stop working, as does dragging the map, forcing me to use the arrow keys to move around. Zoom takes too long to work and behaves erratically, especially if you use the Ctrl+double-click shortcut. Embedded maps only exacerbate all these issues, breaking more stuff and confining you to a tiny, immobile box. Just trying to use the map feels like a Mexican standoff between yourself, the browser, and Google’s byzantine Javascript code.

Google’s own native iOS app never goes above 15 to 30 frames per second. When I first tried the app on release day on my iPhone 4, I figured the performance was a forgivable issue with the 1.0, or that my phone’s hardware simply wasn’t cutting it anymore. But no: even today, on the flagship redesigned version, with an iPhone 5S on iOS 8, everything still runs with this lag. For a while, I figured, OK, Google didn’t want to give us the full, fluid maps experience on their primary competitor’s platform; whatever. Imagine my shock when I picked up a recent Android device, opened Maps, and found that it had the same 15-30fps bottleneck! On their home turf!

Apple Maps, from the start, has been running at a solid 60 frames per second. It’s no joke: you can feel the smoothness in every scroll, every pinch, every rotation. There’s no longer any pop-in, aside from the initial load: when you zoom in, street lines get more detailed and smooth out instead of reloading, indicative of the updated vector graphics. It was widely rumored that one of Apple’s reasons for moving to their own app was that Google wasn’t giving them access to their full vector data, which they were supposedly already using on Android. If true, why is Google’s native app performance so atrocious, even to this day? Why do we still see tiles? Why do streets still have to unblur as you zoom in? If Google is actually using vectors, how are they using them in such a way that still causes these issues?

Speaking of smoothness: gestures in Apple Maps, both on iOS and via the trackpad on OSX, are a dream to use. Pinch-zooming, rotating, and panning have become so ingrained in my muscle memory that I keep trying to do it to Google Maps in my browser window — only to watch my fonts grow a size too big.

When I learned that Google Maps on iOS supported caching maps for offline use, I got excited. Now here was a great feature that Apple Maps would probably never offer! Well, how’s this for irony? Although Apple doesn’t explicitly allow offline caching, it does, in practice, cache large swaths of map that you’ve recently viewed. I’ve been using my phone offline for the past few months, and in every city I’ve been to, I’ve gotten beautiful offline maps of the area after peeking at the surroundings in Wi-Fi mode. There’s no blur: I can zoom in with no apparent loss of street names or any other detail. Perhaps it’s a bad idea to rely on a cache that may theoretically invalidate at any time, but in practice, it works great.

In Google Maps — an app, I must remind you, that explicitly supports offline mapping — saved maps don’t actually seem to work much of the time. I was unfortunate enough to discover this while walking around in a foreign city: upon opening my saved Google map, I found a blurry mess of pixels with no labels whatsoever. (Fortunately, Apple’s cache saved me from having to ask for directions.) To be fair, sometimes the maps do load, but I can’t seem to trigger this behavior deterministically. Even better, offline maps sometimes “expire” at arbitrary times, rendering them unusable. (The official expiration time — why even have one? — is about a month, but I’ve seen maps expire earlier than that for no reason.) Finally, for reasons I don’t understand, not all areas are cacheable. That’s right: if you try to save a map in Slovenia, you’ll be hit with an “area not available” error, even though you can save maps in Croatia by stepping over the border! What a mess.

So what about the elephant in the room: public transit? The lack of public transit directions on iOS is definitely a deal-breaker for me, and Apple’s kludgy third party solution just doesn’t cut it. (To remind readers: if you select public transit directions in Apple Maps, you are given the option of sending your request to any app that supports the transit directions API, or alternatively searching the App Store for one.) However, with the release of third party extensions, I think Apple has a tremendous opportunity on their hands. Although it’s convenient to have all your public transit directions curated by a central party, it’s hard for one organization to keep tabs on every public transit system in the world. How many bus lines are out there? Thousands? Google Maps mostly works in this regard, but I have on more than one occasion run into situations where the directions were inaccurate, misleading, or missing. Even Google can’t extend its feelers to every little city around the globe.

On the other hand, local transit apps are not only accurate and up-to-date, but can even offer cool features like real-time arrival times and GPS tracking. It’s also pretty easy to find them: Apple already lets you see what apps are most frequently used in an area. But these apps aren’t able to integrate with system-wide services: you have to either open them separately or load them via Apple’s kludgy Maps hook, making them inconvenient for everyday use.

So here’s an idea. What if Apple kept its third party transit direction support, but instead of having public transit directions open up in a separate app, brought that information directly into Maps itself?

Just a year ago, this would have been inconceivable. But today, with third party extension support, it would be a perfect fit with Apple’s strategy. Extensions go through specific, resource-constrained “extension points” to avoid hogging system resources, and Apple explicitly put future extension points on the table in their keynote reveal. How about this? With transit extensions, you could have an app transmit local, up-to-the-minute timetables, GPS markers, and other metadata for public transit services right into any native Maps view!

This isn’t something that Google could implement with its centralized, web-centric approach. But it’s almost obvious with Apple’s app-based infrastructure. All the pieces are already in place; all they need to do is give developers an API for it. I don’t think this would necessarily obviate the need for centralized, curated public transit directions, but it would be a great way to augment and future-proof such an offering.

There are still many problems with Apple Maps. Bookmark management is a nightmare. Getting directions between arbitrary points is nearly impossible. Things like subway stations are poorly delineated. But these are not high level problems; they are easy problems to fix, and Apple has progressively been fixing them. And so, I’m crossing my fingers for an amazing future where I can open Maps, switch over to satellite view, and have a private little “supervillain” moment as I watch the bus and train pins moving around the city, slowly etching out their hard-worn routes, in real-time.

All at a buttery 60fps.

Archagon

November 19, 2014