Marco Arment recently posted his latest set of statistics on the iOS devices and OS versions in use amongst users of his Instapaper app (he also published previous sets of stats in August and in March).
Here’s a quick summary:
Last week, on November 30th, 2011 (when iOS 5 was 49 days old), 45.1% of Marco’s users had iOS 5+ installed, and 98.8% had iOS 4+ (across all device types: iPod touches, iPhones, and iPads). 87.3% had iOS 4.3+ (i.e. the newest version of 4.x, or later).
Back in late March this year (when iOS 4 was 9 months old), 98.2% of his users had iOS 4+ (across all device types).
You can interpret those numbers as you will, and Marco’s numbers don’t perfectly represent the iOS customer-base as a whole, but it seems clear that you probably don’t need to support more than two versions. The latest, and the previous one (specifically, I’d say the latest point-release of each: say 5.0 and 4.3 right now).
You might want to modify that strategy depending on your specific market niche (if you’re making a developer tool, congratulations: your target market is already on the latest alpha of the next major OS version), but I think the vast majority would be perfectly commercially safe just targeting those two versions.
So far, so obvious. But when people ask how many OS versions they should support in their new app (which they do, often), they’re not looking for a common-sense and at least reasonably evidence-based answer like that. Instead, they’re looking for this answer:
It’s OK to support only the newest version of the OS.
That’s what they want to hear. Honestly, I think it might even be true, but I know that we all want it to be true. So to help you to convince yourself, here are the relevant arguments conveniently collected in one place.
The solid arguments for Latest-Only
The question isn’t whether you’re going to sacrifice some potential customers - you are - but rather what you get instead of those customers. The answers are pretty convincing.
Supporting multiple primary versions of an OS is a huge pain in the trousers. Feature-testing, version-checking, soft-linking, capability-testing… it’s all horrible. It turns your code into sprawling spaghetti, and it feels just like what it is: busywork to accommodate people who haven’t kept up to date.
It might be a legitimate choice to not upgrade your OS, but it’s definitely a legitimate choice not to support people who do that.
Re-implementing something from newer standard libraries just to have feature parity on older OS versions is for chumps, and sucks up your time, energy, enthusiasm and your very soul.
An app whose minimum OS version moves with the current release is a joy to work on. You add things that actually add things, and you remove stuff that’s not needed anymore. The codebase shrinks over time (features being equal), and you always have a ready-made bullet-point in your marketing materials about supporting the newest version.
Think of it this way: how much time and effort are you saving, as a nominal percentage, by taking advantage of new APIs and not having to work with older stuff? Now put a value on that, both financial and in Sanity Points. Is that gain greater than the loss of ten percent (or whatever) of the people who might have bought your app? Probably.
I think that there’s a correlation between the kind of people who keep their OS updated, and those who are willing to actually pay for software. I don’t have any data to back that up, but it makes sense that someone who’s interested and invested enough in their device to know there’s an update and have applied that update, would be more amenable to investing in a new app or two along the way.
There’s another thing about people who are already on the latest version too: they’re a growing market. The guys stuck behind on older versions are a shrinking market, because over time more and more people update (or get a new device that ships with the latest version pre-installed). Spending more time and energy to support an ever-shrinking market is lunacy.
Your OS vendor will often promote eager-beaver apps that are built to take advantage of the new functionality in the latest version of the OS. You can piggy-back onto that, and get some free publicity, whilst seeming highly informed and up-to-date and full of the vigour of youth.
So, wonderful. Of course, that’s not the whole story - there are also a number of standard arguments against supporting just the newest OS version. For the most part, they’re valid up to a point, but equally you can take the stance that they’re nonsense. For the purposes of convincing ourselves, let’s do the latter.
The whiny non-reasons to support Ancient Versions
We’ll deal with these quickly.
Customers are entitled to updates
Bullshit. Customers are entitled to some updates, based on a mostly subjective combination of factors like:
- How recently they bought the app. More recent = more entitled.
- How much they paid. Higher price = more entitled. Less than ten bucks = you get point-updates to the current version only, and anything else is a bonus.
- How vexing their setup is. Luddite who refuses to apply even free OS updates, and/or is running bad-crazy hacked stuff = entitled to get the hell out of your email.
- How much of an arse they’re being. You can lose your entitlement quickly by being a dick.
If your app costs $500, your customers probably have a right to expect a year or more of updates, and certainly through to the next major release version (with an upgrade discount). If your app costs $2, anything you provide after purchase (other than fixes for particular egregious bugs) is essentially a courtesy. How mercenary and awful of me to say, but there you have it:
Customers are not entitled to updates unconditionally.
The OS vendor wants you to support older versions
Incredible bullshit. New stuff sells, and a great metric of the health of a platform is measured by the investment in that platform by developers - particularly how interested they are in the new stuff. OS vendors would like nothing better than to silently and automatically force everyone to always have the very newest version that their hardware is able to run. And then to silently and automatically bill their credit card for a new machine once their current one is too old.
You’re no hero to the OS vendor by supporting whatever version of Windows was around when Friends just came on the air; in fact, you’re being a huge pain. Apple doesn’t even include the iOS 3.x Simulator with the developer tools by default anymore. Just ask web developers about browser versions, and if any of them say you should spend time making things work in IE 2.0, just back away slowly because they probably have a knife.
It’s too soon to drop support for older versions
Circular, self-fulfilling bullshit. Your app is cool enough to drive OS upgrades, and your target users are cool people who have the latest shiny. Pick your market, and be opinionated about it.
Existing customers will complain if I drop support for them
OK, that’s actually true - to hell with those guys. It’s disproportionately burdensome to support them, they’re a shrinking market, they’re technological luddites, they want new stuff for free, and they’re vocal complainers. Seriously, you want to do nice things for these people? What’s wrong with you?
Next you’ll be doing a usability study and inviting only Linux contributors, or taking investment advice from whoever is RIM’s CEO on Wednesdays. Get a hold of yourself.
It’s your choice
How serious am I about the above arguments? If you read this blog and/or my Twitter feed, you could probably believe just about anything from “not at all” to “completely, in every way”. I won’t lie to you: that really tickles me.
The real answer is: as serious as you are, because you’re the developer reading this, perhaps looking to be convinced that it’s OK to go newest-only. It’s a big, complex world, and there are arguments both ways - and I think that both positions (support old, or support only new) are valid.
Look at your market, make some reasonable guesses, and be honest with yourself about what you’re gaining versus what you lose. Make a decision.
Just please, don’t sit and agonise over it - or before you know it, the new version has become old, and you’re back where you started. Tick tock.
(Interested in more like this? I’m on Twitter.)
I want to respond to a couple of replies I had on Twitter. First up, Justin Miller:
So you're saying tens of millions of people should literally throw away their 2+ year old iDevices every year?
Justin is a great guy, but his response here is a classic Straw Man. At no point did I mention anything about throwing away iOS devices, or that you should be buying new ones every couple of years (much less in such a way as to justify use of the word “literally”). If I’d meant that, I’d have said something like: “You should throw your devices away once they’re two years old. No, I mean really: throw them away. Put them in the bin. Get rid of them. Buy new ones, you peasants. What do you mean you can’t afford to?”
But I didn’t say that, and nor would I - not least because it’s not what I believe. What I did say was that, as a developer, I don’t think you need to support iOS versions other than the current one and maybe the previous one (and by extension, devices that can run those versions). Keep your old devices, running old OS versions and apps, or do whatever you want with them - you just can’t reasonably expect them to be supported once it becomes unduly onerous to do so, with diminishing returns for the effort.
I still have a first-gen iPod touch here, and a couple of iPhone 3Gs. The iPod played the music for Lauren to walk down the aisle to at our wedding last month. My dad uses one of the 3Gs, and my little sister sometimes borrows the other one. They’re still alive and serving a purpose - but I don’t expect your new app to support them.
Next, a guy who doesn’t use his real name (or has really cruel parents), has no URL and who pixellates his photo. Bad form, random and unknowable guy:
FU, pal. I depend on JB/unlock and am on 4.2.1 because no 5.0/5.0.1 JB and 4.3.3 offers me nothing over 4.2.1 but instability.
(“JB” means jailbreak, i.e. he has hacked his phone to allow him to install arbitrary non-App Store software, modify the OS, bypass app signatures or sandboxing, etc.)
So because you hack your device, putting it into a non-standard and unsupportable configuration, developers should care what apps you can run? Um, no. You’re the ultimate nobody cares example. Play by the rules, or shut up and take your chances. You’re not anyone’s target market.