Marco.org

I’m : a programmer, writer, podcaster, geek, and coffee enthusiast.

Why I Don’t Recommend Auto-Renewable Subscriptions, Even If Apple Lets Your App Use Them

I recently wrote that I wouldn’t use auto-renewable subscriptions again after extensive experience with both non-renewing in Instapaper and auto-renewing in The Magazine. A lot of developers have asked me to elaborate, especially as Apple has gradually allowed some apps to use them outside of Newsstand.1

Support and Perception

Like any other in-app purchase, customers can start an auto-renewing subscription within your app.

But they can’t end it. There’s no way for developers to offer an “Unsubscribe” button, and the actual App Store subscription management page is buried where few customers ever think to look.

Naturally, customers who can’t figure out how to unsubscribe don’t get angry at Apple — they blame the developers, writing angry 1-star reviews and nasty support emails because they think we’re trying to rip them off.

We can’t help them in response, because developers can’t even cancel their subscriptions — only the customers can. Developers can only apologize and refer them to this Apple support document.

Purchase Experience

When a new customer subscribes, the system in-app-purchase dialog pops up to confirm (…eventually — it’s so slow that it’s easy to assume it failed and tap again). Then a second box comes up with the dreaded “share your information with the publisher” dialog, which has its own problems.

The new-subscriber process is mediocre, but it’s much better than when an existing subscriber needs to sign in on another device.

By convention and policy, apps should display a “Restore Purchases” button. If a subscriber invokes it, their subscription is (…eventually) restored properly.

If they instead select “Subscribe” again, the subscribe flow works as usual, but ends early with a dialog telling the user that they’re already subscribed. Fatally, this is reported as a failure to the app, and there’s no way to distinguish between an “already subscribed” failure and any other subscription failure, such as a failed login or hitting Cancel.2

As you can imagine, this causes yet more support email and angry 1-star reviews. And when apps do it wrong — which happens frequently, especially since sandbox testing is difficult and Apple’s reviewers don’t test for this — it causes embarrassing bugs that prevent people from using the subscription they’re paying for.

Inflexibility

There’s no way for developers to know for sure when an auto-renewing subscription will end. When a customer toggles “Renew automatically” to “Off”, that isn’t reflected in the API. The subscription continues through the current period, and there’s no way to tell when it will end until it actually ends.3 And, of course, we can’t end it manually.

Developers also have no way to extend a subscription. And nobody — developers or customers — can buy or redeem subscriptions as gifts.

This complicates support and marketing. Developers can’t, for instance, give free subscriptions to reviewers or extend a subscription to appease an angry customer.

These limitations can be avoided by having a separate website payment and subscription system. (Use Stripe.) Then you can give reviewers web subscriptions, enable gift purchases, extend subscriptions arbitrarily, cancel subscriptions yourself, and provide much more helpful sign-in feedback in the app, all while paying much lower commissions.

But in an iOS app, you must offer subscriptions via In-App Purchase. Web and in-app subscriptions can coexist without too much trouble, but it becomes problematic when an in-app subscriber wants to convert to a web subscription to get one of its benefits (redeeming a gift or extension, etc.). Since you can’t cancel an in-app subscription, detect when it will end, or even verify whether any given email address is a subscriber,4 it’s difficult to coordinate the switchover.

The Benefits

What are all of this complexity and all of these limitations supposed to buy?

In theory, it’s easier for customers since they don’t need to renew manually after each period. But it’s much harder to restore purchases and cancel subscriptions, so I’m not sure it’s a net win for them.

The real appeal is clearly lopsided to benefit the developers:

The Alternative

What I built for Instapaper instead was much simpler.

I used the old “non-renewable subscription” in-app purchase type, which is almost a misnomer — it’s simply buying access to something for a fixed duration. I also offered the same subscriptions on the website through PayPal with recurring billing. (That was a mistake. Never use PayPal for recurring subscriptions.6 Use Stripe.)

The non-renewable in-app purchase enables your subscription for an additional 3, 6, or 12 months.7 Two weeks before a subscription expires, the app shows one dialog informing the user of this and offering a renewal. Three days before, it shows one more. And after it expires, it shows one more. That’s it.

It had almost the same loss and renewal rate as the auto-renewing PayPal subscription, but with nearly zero support cost. It was great for the customers, Instapaper, and Apple.

Implementing non-renewing subscriptions is simple, too: every user has a subscription expiration timestamp. When a purchase comes in, validate it and simply extend the user’s expiration date into the future by that interval. It’s night and day compared to implementing and supporting Apple’s auto-renewing subscriptions.

Offering non-renewing options and a good auto-renewing system, like Stripe, is a nice balance. But if your choice is between non-renewing subscriptions or a bad auto-renewing system, such as PayPal’s or Apple’s, you’re better off not using auto-renewing subscriptions at all.


  1. Building a non-Newsstand app with the expectation that you’ll be permitted to use auto-renewing subscriptions is still a big risk, though.

    The most common case I see is developers who want to fund a web service with them. While Apple has permitted some services to bill with auto-renewing subscriptions, it hasn’t been consistent — I still hear from people who have been rejected for attempting it. Even if you get approved, anytime you’re on the edge of a policy like this, there’s a good chance you’ll be rejected or required to remove it in the future. ↩︎

  2. In an early version of The Magazine, I tried evading the “already subscribed” problem by quietly invoking a restore-purchases before every subscribe attempt. It worked well in most conditions, but had a few awkward edge cases. Shortly after releasing it, Apple required that I remove it because it used In-App Purchase in a “non-standard” way. ↩︎

  3. Well, you don’t know a subscription has ended until you poll Apple’s API for an update. Apple doesn’t support automatic notification to a callback on your servers, so you just need to poll them to revalidate every subscription on some interval, generally daily or weekly. ↩︎

  4. The “share your information with the publisher” report includes names, emails, and addresses, but does not include transaction IDs. There’s no way to tell whether someone with a given email address is a current subscriber or when their subscription ends.

    So if you have a website, you also need to build and support a method for people to claim and connect their in-app-purchase subscription to their website account. ↩︎

  5. Apple does send an email to subscribers a few days before each renewal. You’d think this would alleviate the “you’re taking my money, I don’t understand what this is for, I demand you stop immediately” emails, but in practice, it doesn’t. Many people apparently either don’t receive them, don’t read them, don’t understand them, or simply don’t remember them. ↩︎

  6. This could be its own entire post. The quick version: the website becomes unusably slow with lots of small transactions, issuing refunds is time-consuming and tedious, non-PayPal-account customers can’t cancel their own subscriptions, disputes are handled as if everything’s an eBay item you didn’t ship, the payment notifications to your servers are unreliable, and there’s no way to get a list of all current subscribers in the API or otherwise (really!), which makes it impossible to rectify inconsistencies caused by the unreliable notifications.

    Trust me. Use Stripe. The loss of buyers without credit cards is completely worth the massive savings in support email and headaches. ↩︎

  7. There were no savings for buying more time — it was simply $1 per month. I thought nobody would buy the biggest option (12 months). But interestingly, while almost nobody bought the middle option (6 months), the 3-month and 12-month options consistently grossed almost the same amount each day. ↩︎

NanoPad and “Elevation Dock 2”

When ElevationLab first started promoting the Elevation Dock 2, I thought the name seemed a bit misleading: as far as I could tell, it was just the original Elevation Dock bundled with the Lightning adapter and something called “NanoPad” to help it grip the desk a bit better, which I figured would work about as well as most non-skid rubber sheeting.

The original Elevation Dock’s major problem was its huge production delay, followed by Apple releasing the iPhone 5 with the brand new Lightning connector right as most Kickstarter backers were getting their docks. Rather than go through the lengthy and expensive process to build an officially licensed Lightning dock with a custom connector, ElevationLab rushed to release a quick fix: a little clamp that mounted Apple’s stock Lightning cable into the existing Elevation Dock.

It sucked, mostly because the cabled Lightning connector requires too much force to remove: enough effort to remove the phone would also lift the Dock right off the table, ironically giving it the same annoyance that ElevationLab made fun of in their original Kickstarter video. It was a beautifully manufactured, high-quality dock that didn’t work very well.

In the meantime, I switched to another Kickstarter heavy-dock project, the Dock+. It works decently, has a real low-friction Lightning connector, and charges iPads as well, but is sloppily made and a bit ugly.

Today, I got these in the mail from Casey Hopkins of ElevationLab, unprompted:

Naturally, I accepted the challenge.

I also took its description of having “thousands of microscopic suction cups” as a challenge for my macro lens:

To the naked eye, it just looks like a flat, black, shiny surface. The holes aren’t visible at all. “Microscopic” might be a bit of a stretch — my macro lens isn’t that good — but to give you an idea of the scale, it looks like the holes are roughly the size of the aluminum dents from bead-blasting, which are small enough that the surface looks and feels perfectly smooth in reality. (The very slightly misaligned pad on the metal base is my imprecise installation, not ElevationLab’s.)

Photography verified that the NanoPad is indeed cool. But most important is how it works.

And it works incredibly well.

Assuming the NanoPad was like typical non-skid material was a gross underestimation of its grip — it’s more like a strong adhesive, although it comes off cleanly and reattaches easily. It works exactly as promised, and ElevationLab is not exaggerating with any of its claims.

In fact, it’s so good that I might buy a few extras to adhere other objects to desks, tables, and counters.

None of this makes the Elevation Dock’s Lightning compatibility less of a hack. Now, it’s another hack on top of the previous hack, but this hack actually works. You still need to supply your own Apple Lightning-to-USB cable, and it’s still an inelegant, high-friction connection — the NanoPad just makes it a one-handed operation.

Despite the hackiness, that’s a substantial improvement. Before the NanoPad, the Elevation Dock worked so poorly with Lightning that I stopped using it entirely. Now, I’m back to it. For $7, I definitely suggest that Lightning-adapted Elevation Dock owners give the NanoPad retrofit a try.

For new buyers, it’s less persuasive: you’re still looking at spending at least $90 for the dock, plus losing an Apple Lightning cable and AC adapter to it (or buying extras from Apple for a total of at least $38). It’s a tough sell.

It’s a pile of hacks, but it works, and it looks much nicer and is better made than other docks I’ve seen and used.

Gift/Product Recommendations That I’ve Actually Used For At Least A Year

Entire industries rely on trying to convince us that we need things that we really don’t, or that the things we have aren’t good enough and need to be upgraded.

The older I get and the more stuff I accumulate, the more I realize that most stuff, especially the crap on cool-stuff sites and gift guides, is wasted on me. (And probably you, too.) I simply don’t need it, and if I had it, there’s a good chance it would end up in the closet after a month.

Big cool-stuff sites need to make many posts per day to stay relevant and profitable, so they can’t be very discriminating or give long-term reviews based on actual experience — all they can say is that something looks cool, which usually results in a collection of expensive things that photograph well, not things you might actually buy and find useful.

Small sites can fall into a different unhelpfulness trap: it’s hard to provide meaningful comparisons if you’ve only had one or two of something. Saying that your camera is the best camera isn’t useful to me unless you’ve spent a meaningful amount of time using many similar cameras and can distinguish what makes different models suitable to different roles and priorities. (And full-time reviewers have a different problem: they usually don’t spend long periods with any products or report back after living with them for a while, since there’s little economic upside and they usually review too many products to make this practical.) So comparisons are hard.

The concept of a “best” product of any nontrivial complexity is a fallacy. Sites like The Wirecutter and The Sweethome get it right much of the time, but when faced with a complex category with multiple product subtypes and different customer needs, like humidifiers or headphones, they often make unfair comparisons or dismiss entire product classes prematurely. It’s not that they’re doing a bad job picking the “best” — it’s that many product categories are more complicated or diverse than simply having one “best”, or are so large that the “best” might be one of the hundreds of models that they didn’t even test.

All I can do is tell you what I’ve used, but in an effort to be most helpful, I’ve narrowed the scope further than most recommendation sites can: these are products that I personally bought or received as gifts at least a year ago, use regularly, and still enjoy and recommend.

Coffee

I own almost every type of drip-coffee brewer. (I don’t know anything about espresso, except that most people are better off not trying to make it at home.)

Most brew methods aren’t worth the trouble, including the moka pot and the fancy Yama vacuum/siphon brewer. My favorites, in descending order:

Measuring and grinding:

I’ve never found a hand-crank travel grinder that was worth its cranking effort. It takes a lot of cranking to make one cup’s worth of a fine AeroPress grind. I think I’m better off just packing some good teabags (which I’ll get to in a minute) next time I travel, rather than trying to bring a ridiculous hand-crank coffee setup.

Beyond the scale, grinder, and brewer, I don’t use a lot of extra equipment:

And, of course, where you get the coffee beans matters quite a lot. I’d rather have great, freshly roasted beans from an automatic coffeemaker than old beans from an AeroPress. Coffee is best in the first week or so after roasting, so your best bet is either a mail-order roaster or, ideally, a local one.

I home-roast (another topic entirely), but before I did, I got great coffee from:

(Granted, I don’t use any of those regularly now, so they don’t quite belong on this list. I’ll just not make them bold, and hope you ignore the rule deviation.)

Kitchen

Specific food and drink picks beyond coffee:

Shaving

The recent retail expansion of The Art Of Shaving stores has brought the idea of fancy shaving stuff much more mainstream, but I wasn’t impressed with their products when I tried them a few years ago. Geeks like me have been buying obscure double-edged (DE) safety razors, badger brushes, and thickly lathering creams and soaps for years from places like Classic Shaving that are almost all better than anything I’ve tried from The Art Of Shaving.

I have sensitive skin and shave in the shower, and this is what works best for me:

I’ve tried a lot of aftershaves, but most of them have too-strong smells that stick around all day, and very few are better for me than applying nothing at all. The least-bad one I’ve tried is the Taylor of Old Bond Street balm in “Shaving Shop” scent, but most days, I don’t apply anything. The Proraso/Fusion ProGlide combo is so good that I rarely need aftershave.

Electronics

This is a huge category, but few products stand the test of time even for one year. And I don’t want to tell you the same things that every other gadget site is telling you to buy. Yeah, the iPad is great, but you know that already.

I’ve omitted any full-sized, closed headphones from the list this year. I’ve only worn them recently while recording podcasts — at most other times that I’m at my desk, I’m able to wear open headphones, so I use the much-better-sounding T90s. I’ve previously recommended the 280 Pro and 380 Pro (review), but I don’t use them anymore — I lost my 380s to a hard fall and I’ve since upgraded to The Wirecutter’s recommendation of the PSB M4U 1, which is significantly more comfortable than most closed headphones but not worth its cost. For general closed-headphone picks, most people (who don’t suggest the 280 Pro) recommend the MDR-7506 or ATH-M50, neither of which I’ve spent much time with.

Board Games

Now that Settlers of Catan has spread to your non-geek friends and family members and given them a taste for board games that require actual thought, you can introduce them to better ones. We’ve been subjecting our friends and family to geeky board games for years, and these are the ones that they’ve liked best and actually asked to play, in roughly descending order:

So there you have it. Coffee, kitchen, shaving, electronics, and board games. All you need.

Apple Can’t Ban “Rate This App” Dialogs

There’s been a lot of discussion in the last few days about those annoying “Rate This App” dialogs in far too many iOS apps today, initiated by John Gruber, summarized nicely by Chris Gonzales, and followed up with a nice discussion between Gruber and Daniel Jalkut in The Talk Show this week.

I’d go further than Gruber’s moderate stance on The Talk Show. I think even interrupting people once with these is too much. I’m strongly against them — to me, they’re spam, pure and simple. They’re as intrusive as a web popup ad, they betray a complete lack of respect for users, and they make their apps’ developers look greedy and desperate.

Passive links to review the app, such as a button in an about screen,1 are fine and can even be helpful to people who do want to review the app. But interrupting people with a modal dialog is over the line.

Unfortunately, short of removing app ratings entirely,2 Apple can’t do much to stop them, and they’ll continue to “work” on enough people for many developers to continue using them.

Apple’s not blind to the problem of “Rate This App” dialogs: in a WWDC 2011 session,3 the presenter even instructed developers not to use them, which was met with knowing laughter and applause from the audience. We were all already sick of them in 2011.

But Apple can’t ban these dialogs for the same reason that this official rule is never enforced:

5.6: Apps cannot use Push Notifications to send advertising, promotions, or direct marketing of any kind

This rule is violated so often, with no repercussions, that its presence in the Review Guidelines is a cruel joke to developers with good taste and respect for their customers.

But how would Apple enforce this? Putting a “report” button on every push notification in the UI would be ugly, crowded, and confusing, and would result in tons of false reports from accidental or misguided invocations. Without one, by what mechanism would Apple even know of a violation, unless the app spammed its reviewer with an inappropriate push notification during the 6 minutes that it’s being tested?

Individual written complaints? Who’s going to process them and decide whether they’re valid? Can Apple do anything useful with an email saying that “InstaMineGramCraft Guide Cheats Pro sent me a push-notification advertisement yesterday”? Can many people reasonably prove or verify such a claim? Does Apple even store or log APNs after they’re delivered? (I’m guessing not.)

What even qualifies as an “advertisement” or “promotion”? I’ve seen many clear violations, but many aren’t. Is it an advertisement if you send a push notification to people who haven’t launched your app in a while, encouraging them to launch the app and “check in”? What if you’re telling them that their virtual farm in your psychological scam game is withering and dying until they tap some buttons or buy something? What if a new type of cow is available for just 99 cents, on sale today only? What if you just added a new feature in an update and are telling users about it via push, since they probably use auto-updating and didn’t see the release notes? Is that an advertisement?

Apple doesn’t enforce rule 5.6 because they can’t.

A rule banning “Rate This App” dialogs would have the same problem: since the dialog is unlikely to appear during app review (and could be easily coded to guarantee that it wouldn’t), they’ll almost never reject anything for it. Once an app is in the wild, there’s no good way for Apple to be reliably notified of violations, and even if they added one, the line between permissible and prohibited would be vague and easy to skirt.

We could all rate these apps lower as a form of protest, but it’s unlikely to have a meaningful impact. The App Store is a big place.

We could vote with our feet and delete any app that interrupts us with these, but we won’t. Are you really going to delete Instagram and stop using it? Yeah, exactly.

We’re stuck with these annoying dialogs. All we can really do is avoid using them ourselves and stigmatize them as akin to spam, popup ads, and telemarketing4 — techniques only used by the greedy, desperate, shameless, and disrespectful.


  1. This is what I’m doing for Overcast: a rating shortcut button in the Settings screen, adjacent to the contact-support button, possibly with a brief explanation that developers can’t respond to individual support issues in reviews. (I’m still on the fence about that last bit.) ↩︎

  2. Will Hains’ proposed alternative, ranking apps by total usage time across all users, has its own set of problems. For instance, it penalizes apps that don’t need to be used very often by most of their customers, such as transit maps or bank apps, or apps that solve your problem as quickly as possible to minimize time spent in them, such as calculators and unit converters.

    I also don’t think eliminating reviews would be a net positive. I often learn very useful information from reviews of apps I’m considering buying, especially when the apps aren’t very popular and there’s not much else to go on except three or four store reviews. The system could use a lot of improvement, but user reviews aren’t inherently bad. ↩︎

  3. WWDC 2011, 105: Polishing Your App by Ian Baird, 11 minutes into the session video. ↩︎

  4. If you consider the similarities between “Rate This App” dialogs and what everyone hates about spam, popup ads, and telemarketing, I think the comparison is apt. ↩︎

Mac Pro Pricing Over Time

The new Mac Pro feels very expensive when configured with a few options, and it’s easy to feel that it’s much more expensive than previous Mac Pros.

And it is. But the big jump actually started with the 2009 model, when Intel started running out of ways to make the high-end Xeons better except by raising their core count, which drove the price up dramatically.

Here’s the actual history of Mac Pro prices from Everymac:

Entry LevelMidrange CPUHigh-end CPU
GenerationCoresClockPriceCoresClockPriceCoresClockPrice
2006 22.0 $2199 42.66$2499 43.0 $3299
2008 42.8 $2299 82.8 $2799 83.2 $4399
2009 42.66$2499 82.26$3299 82.93 $5899
2010 42.8 $2499 63.33$3699 122.93$6199
“2012”43.2 $2499 63.33$2999 123.06$6199
2013 43.7 $2999 63.5 $3499 122.7 $6499

It’s hard to define “midrange” in some generations, so I made my best estimates. It’s also debatable whether the 2013 “high-end” should be the 8- or 12-core model since Turbo Boost makes it weird now, but I chose the 12-core to be more comparable with the previous generations. And this is based on CPU upgrades only, since it’s easiest to find data for those and they’re usually the most expensive upgrades in the lineup.

The trend is even more clear when graphed:

Graph of prices over time

Mac Pro prices have always crept upward, but the biggest jumps aren’t recent.

It’s not even as much of a ripoff as you might assume. In the 2006 and 2008 generations, the range of performance within the lineup was smaller, especially between the midrange and high-end. Once Intel started ramping up core counts and Turbo Boost in the last few generations, the midrange was no longer 10–20% slower than the high-end — it became more like 50–75% slower at fully parallel tasks.

Here are those same Mac Pros with their Geekbench 3 scores graphed (32-bit multicore):

Graph of parallel performance over time

Scores for the 4- and 12-core 2013 models are estimated from the 6-core’s.

Prices have stayed mostly in proportion to parallel performance. The difference between the low and high end is much bigger than it used to be.

But don’t feel too bad about those high-end CPUs being so far out of reach. The core-count hikes that yielded such massive parallel improvements have come with stagnation or regression in single-threaded performance, which is still very important to many common tasks, so today’s highest-end options are either very similar to the lower-end choices or actually worse for many buyers. As their prices have crept upward, the high-end options have become more specialized at the expense of economy and some general-purpose performance.

And that’s now true of the entire Mac Pro line: it’s no longer the fastest Mac at single-threaded tasks (the highest-end iMac is), and the jobs that the Mac Pro does faster than other high-end Macs are becoming fewer and more specialized.

You can still find good value in the Mac Pro line (in the 2013 lineup, just like the “2012”, the 6-core is a great value), but it’s pushing further into specialty uses as the high-end iMac and 15” MacBook Pro options keep closing the gap for more people.

Smart Watches and Computers On Your Face

The personal computer and the smartphone are amazing, and will almost certainly remain pillars of computing for the majority of our lifetimes. Beyond those two major portability and productivity classes, you hit diminishing returns.

Portability is critical to modern device usefulness, and there are only two classes that matter anymore: always with you, and not.1 Devices that are always with you must fit comfortably into pants pockets without looking stupid. If you’re exceeding the size of pockets or small handbags, you’ll need a bag of some sort, which means you can carry pretty much anything up to a full-featured modern laptop. (Ultralight laptops are extremely capable these days.)

Smartphones dominate always with you. There are situations where people won’t carry one — besides the obvious ones like sleeping and showering, the most common one I hear is jogging — but these are few and far between, and will shrink over time as smartphones get smaller, cheaper, and more durable.

Tablets sit in an awkward portability class: they aren’t that much more useful than smartphones, but aren’t much more portable than small laptops. I think they’re still (barely) justifiable as a mass-market category because they’re not much of a burden to make and support because they’re just smartphones with larger screens — they have roughly the same hardware, software, and applications, and are better than smartphones at tasks that benefit from more screen area.

But why do we need “smart” watches or face-mounted computers like Google Glass? They have radically different hardware and software needs than smartphones, yet they don’t offer much more utility. They’re also always with you, but not significantly more than smartphones. They come with major costs in fashion and creepiness. They’re yet more devices that need to be bought, learned, maintained, and charged every night. Most fatally, nearly everything they do that has mass appeal and real-world utility can be done by a smartphone well enough or better. And if we’ve learned anything in the consumer-tech business, it’s that “good enough” usually wins.

This is why I’m down on new-hardware-category fetishism and why I’d rather Apple not overextend themselves further for a watch. We already have extremely powerful devices that we’re barely using the potential of — we don’t need to divide our attention and resources further to add new device categories to our lives that aren’t massively better in normal use than what we already have.

PCs made many other devices redundant or obsolete in the ’80s and ’90s, the web demolished many legacy businesses in the ’90s and ’00s, and smartphones have obliterated many more old products and businesses in the ’00s and ’10s.

The combination of a computer, internet connectivity, and a smartphone (and maybe a tablet) is awesome. It satisfies nearly every modern demand for personal computing hardware and still has massive untapped potential for software and services.

Maybe that’s all we really need for a while.


  1. Cameras have a similar dynamic: smartphones became everyone’s always with you camera, SLRs and SLR-like models dominate the high end, and point-and-shoots are obsolete and redundant.

    But cameras have it even harder: smartphones have compelling photo features that cameras will never get such as social apps, and the high end will likely shrink as many hobbyists and prosumers abandon their SLRs and go smartphone-only. ↩︎