Let It Snow

I’m not the first to say this. Chances are you saw Marco Arment tweeting about it earlier in the week:

The latter half of 2014 has been a disaster in terms of quality of Apple software. As I was finishing up the book, I kept an index card of all the bugs I needed to file. I ran out of room.

List of bugs to file

Some of these have caused real pain, such as the Xcode 6.1 iOS Simulator not supporting internationalization — horrible for us when the third chapter of our iOS 8 SDK Development book walks through an i18n example, and a later chapter shows how to make a third-party keyboard extension, which doesn’t work because the simulator now only supports the US English and emoji keyboards.

I also left variable row sizes for table views (via iOS 8’s estimatedRowHeight) out of the book because while it works on the device, the simulator re-lays-out the rows only after a rotation (putting a border on the cell’s layers proved to me this is what was going on), so it doesn’t work for our readers.

My iPad is laggy as heck under iOS 8, and tapping buttons often does nothing for 5-10 seconds after switching apps.

We moved the family to a new shared computer running Yosemite, and my wife is furious that sort-by-date doesn’t work for “All Mailboxes” view.

I do my CocoaConf presentations with Keynote for iPad. After upgrading to iOS 8, in Seattle and Boston the iPad screen locked and blanked the projector during the presentation, because I was using the remote mode from my iPhone to advance slides, and that apparently no longer resets the screen-lock timeout.

Also, I couldn’t post the slides from my Core Image talk, because Keynote’s PDF export (on Mac and iOS) omitted most of the text from most of my code slides, leaving the occasional [self as the only reminder there was ever any content there.

Reminders on my iPad was out of sync, I turned iCloud off and back on, and for a week it crashed at launch.

All of my iTunes LPs have broken, and Neko Case’s The Worse Things Get, the Harder I Fight, the Harder I Fight, the More I Love You has downloaded four copies of its booklet PDF, none of which will open in iTunes.

Also, iTunes will sometimes start splitting up an album into two instances while I’m listening to it, and sometimes fail to rejoin them completely, as with the Green Day album in this figure. Note that this is an album I bought from the iTunes Store.

iTunes mangled album metadata

Xcode 6.1.1 said it eliminated most causes of the “SourceKit service crashed” error when editing Swift code. Maybe so, but whatever’s left still crashes on me at least once an hour.

Oh, and Mobile Safari did this to me yesterday (no, not necessarily a defective page, it cleared up when I reloaded):

What the hell has happened? Remember two years ago when there was such an uproar over Core Data in iCloud not working? It was a hot-button issue, but very limited in scope: Core Data was still a trusted tool when used locally, and even iCloud behaved for most developers using it for documents or simple plists. It was a problem that didn’t involve a lot of collateral damage.

By comparison, what we’ve seen in the last six months is pervasive, if not ubiquitous. It’s in the developer tools, it’s in the operating system, it’s in iLife and iWork. It’s like the floor has utterly dropped out from beneath all Apple software, across the board.

It’s not like Apple lacks for talent — they keep hiring many of the best iOS developers I know. It’s more plausibly a matter of unrealistic scheduling: packing new versions of iOS and OS X, supporting them in Xcode, updates to all the iWork and iLife apps, and oh-by-the-way the first SDK for WatchKit, all into a couple months at the end of the year, looks in hindsight to have been severely over-ambitious.

And the looming release of Apple Watch compounds my concerns. There’s probably little prospect of fixing any of this until Watch 1.0 is out the door this Spring, at which point a new push for OS X 10.11 and iOS 9 will presumably be underway. Marco again:

There’s a cost to this. I recall Marco saying on some episode of ATP this summer (possibly relaying listener feedback?) that some Apple-to-Android switchers cited system updates as the reason for switching: that the new system slowed down their iOS devices, making them worse. I heard the same thing from developer/speaker pal Jeff Kelley yesterday:

Granted, the idea that Android software quality will be better than iOS is probably nuts, but it’s still clear that genuine damage has been done to Apple’s reputation, and it may well be evident in device sales before long.

Will there ever be a chance to just stop and clean up the mess? Apple’s done it before: Mac OS X 10.6, Snow Leopard, was famously pitched as having zero new end-user features. It was a fundamental modernization and fix of all of OS X’s underlying technologies: the Finder was rewritten in Cocoa, QuickTime was replaced under the hood with Core Media technologies, Grand Central Dispatch and OpenCL made their debut, etc. And it’s probably the last version of OS X that I really truly liked.

Could they do that again? We are clearly in need of “Snow” iOS, “Snow” OS X, “Snow” iWork, etc. Take 6-12 months off of the feature binge and just fix stuff. Or stop releasing iOS and OS X in tandem and let their crunch times alternate through the year instead of occurring together. Much as I’d personally like to see a “Snow” development cycle happen, it’s harder and harder to imagine in an Apple without Bertrand Serlet and Scott Forstall, an Apple where engineering reports to marketing and to design. It’s hard to see who’s left there to stand up for “it just works”.

Back to Marco’s point about Apple Watch: I had been planning on getting one, since my analog watch died a year ago, and I’ve been making do with a $10 “waterpark watch” since then. But as flaky as everything from Apple has been lately, I wonder if I’m not better off getting something like a Fitbit Charge to function as both simple watch and fitness band, and check back on Apple Watch in a few years, to wait out the 1.0 and see if they’ve gotten their act together. I’m still thinking about what to do here.

And closing on another personal note… this is the first blog I’ve posted since starting my new job at Rev, and it’s really been a significant culture change. In my contracting work, schedules, deadlines, and hours were always paramount. On my last contracting gig, we actually went pencils-down when they exhausted the allotted hours, mid-day, even with features incomplete and their server not even ready for integration testing.

At Rev, it’s like the total opposite: we own the code forever, and it’s essential for our services, so it’s quality that is the most important factor. This is like only the third time in my career that I’ve done code reviews with any genuine rigor (and the previous instances didn’t last more than a few weeks), and I find my established habits from consulting are working against me now: I’ve been typically unwilling to make fundamental changes, even if it’s the right thing to do, because of how hard it’s going to be (or how long it will take) to put things back together. But when quality is job one, then a willingness to make those kinds of radical changes is an asset, not a liability. Dates are important, but not necessarily at the cost of shipping bugs, or accumulating technical debt.

I’m trying to learn my lesson. Maybe Apple will learn theirs, in time?

Previous Post

Comment (1)

Leave a Reply

Your email address will not be published. Required fields are marked *