Friday July 01, 2011

Leaving Old iOS Versions Behind

Marco Arment on planning future versions of Instapaper:

There are a number of great features that I want to use in iOS 4 and 5, and compatibility with iOS 3.1.3 is starting to become an expensive burden. My code is quickly filling with special cases and duplicate implementations, and this will hinder Instapaper’s feature development, maintenance, and stability until I can eliminate 3.1.3 compatibility. My quality assurance would also improve since my testing-device count would be greatly reduced.

Deleting old code liberates you even though it hurts backward compatibility. Between Java’s well-known cling to their old APIs and Ruby’s, “let’s change this huge feature in a 0.1 update!”, it’s tough to find the right balance. Marco is in a good position because he knows that only 0.48% of his customers still run iOS 3.x.

Supporting older customers is important, but software is a living ecosystem. Platforms, standards and systems keep evolving because we’ve not come anywhere close to exhausting the possibilities of our technology. Bearing the burden of legacy support is important up to a point. But ultimately, your code will grow cancerous if there are too many if/else clauses to handle old cases.

Apple makes no apologies for abandoning old code and technologies. As I’ve said before, I think it’s one of their greatest competitive advantages.