Skip to content
Thoughtful, detailed coverage of everything Apple for 29 years
and the TidBITS Content Network for Apple professionals
35 comments

Six Reasons Why iOS 13 and Catalina Are So Buggy

iOS 13 and macOS 10.15 Catalina have been unusually buggy releases for Apple. The betas started out buggy at WWDC in June, which is not unexpected, but even after Apple removed some features from the final releases in September, more problems have forced the company to publish quick updates. Why? Based on my 18 years of experience working as an Apple software engineer, I have a few ideas.

Overloaded Feature Lists Lead to Schedule Chicken

Apple is aggressive about including significant features in upcoming products. Tight schedules and ambitious feature sets mean software engineers and quality assurance (QA) engineers routinely work nights and weekends as deadlines approach. Inevitably some features are postponed for a future release, as we saw with iCloud Drive Folder Sharing.

In a well-run project, features that are lagging behind are cut early, so engineers can devote their time to polishing the features that will actually ship. But sometimes managers play “schedule chicken” since no one wants to admit in the departmental meeting that their part of the project is behind. Instead, they hope someone else working on another aspect of that feature is running even later, so they reap the benefit of the feature being delayed without taking the hit of being the one who delayed it. But if no one blinks, engineers continue to work on a feature that can’t possibly be completed in time and that eventually gets pushed off to a future release.

Apple could address this scheduling problem by not packing so many features into each release, but that’s just not the company culture. Products that aren’t on a set release schedule, like the AirPods or the rumored Bluetooth tracking tiles, can be delayed until they’re really solid. But products on an annual release schedule, like iPhones and operating systems, must ship in September, whatever state they’re in.

Crash Reports Don’t Identify Non-Crashing Bugs

If you have reporting turned on (which I recommend), Apple’s built-in crash reporter automatically reports application crashes, and even kernel crashes, back to the company. A crash report includes a lot of data. Especially useful is the stack trace, which shows exactly where the code crashed, and more importantly, how it got to that point. A stack trace often enables an engineer to track down the crash and fix it.

A Mac crash report

Crash reports are uniquely identified by the stack trace. The same stack trace on multiple crash reports means all those users are seeing the same crash. The crash reporter backend sorts crash reports by matching the stack traces, and those that occur most often get the highest priority. Apple takes crash reports seriously and tries hard to fix them. As a result, Apple software crashes a lot less than it used to.

Unfortunately, the crash reporter can’t catch non-crashing bugs. It’s blind to the photos that never upload to iCloud, the contact card that just won’t sync from my Mac to my iPhone, the Time Capsule backups that get corrupted and have to be restarted every few months, and the setup app on my new iPhone 11 that got caught in a loop repeatedly asking me to sign in to my iCloud account, until I had to call Apple support. (These are all real problems I’ve experienced.)

Apple tracks non-crashing bugs the old-fashioned way: with human testers (QA engineers), automated tests, and reports from third-party developers and Apple support. Needless to say, this approach is as much an art as it is a science, and it’s much harder both to identify non-crashing bugs (particularly from reports from Apple support) and for the engineers to track them down.

Less-Important Bugs Are Triaged

During development, Apple triages bugs based on the phase of the development cycle and the bug severity. Before alpha, engineers can fix pretty much any bug they want to. But as development moves into alpha, and then beta, only serious bugs that block major features are fixed, and as the ship date nears, only bugs that cause data loss or crashes get fixed.

This approach is sensible. As an engineer, every time you change the code, there’s a chance you’ll introduce a new bug. Changes also trigger a whole new round of testing. When you’re close to shipping, a known bug with understood impact is better than adding a fix that might break something new that you’d be unaware of.

Bugs that generate a lot of Apple Store visits or support calls usually get fixed. After all, it costs serious money to pay enough support reps to help lots of users. It’s much cheaper to fix the bug. When I worked on Apple products, we’d get a list of the top bugs driving Apple Store visits and support calls, and we were expected to fix them.

Unfortunately, bugs that are rare or not terribly serious—those that cause mere confusion instead of data loss—are continually pushed to the back burner by the triage system.

Regressions Get Fixed. Old Bugs Get Ignored.

Apple is lousy at fixing old bugs.

Apple pays special attention to new products like the iPhone 11, looking for serious customer problems. It jumps on them quickly and generally does a good job of eradicating major issues. But any bugs that are minor or unusual enough to survive this early scrutiny may persist forever.

Remember what I said about changes causing new bugs? If an engineer accidentally breaks a working feature, that’s called a regression. They’re expected to fix it.

But if you file a bug report, and the QA engineer determines that bug also exists in previous releases of the software, it’s marked “not a regression.” By definition, it’s not a new bug, it’s an old bug. Chances are, no one will ever be assigned to fix it.

Not all groups at Apple work this way, but many do. It drove me crazy. One group I knew at Apple even made “Not a Regression” T-shirts. If a bug isn’t a regression, they don’t have to fix it. That’s why the iCloud photo upload bug and the contact syncing bug I mentioned above may never be fixed.

Automated Tests Are Used Sparingly

The software industry goes through fads, just like the fashion industry. Automated testing is currently fashionable. There are various types of automated testing: test-driven design, unit tests, user-driven testing, etc. No need to go into the details here, except to say that, apart from a few specific areas, Apple doesn’t do a lot of automated testing. Apple is highly reliant on manual testing, probably too much so.

The most significant area of automated testing is battery performance. Every day’s operating system build is loaded onto devices (iPhones, iPads, Apple Watches, etc.) that run through a set of automated tests to ensure that battery performance hasn’t degraded. (Of course, these automated tests look only at Apple code, so real-world interactions can—and often do—result in significant battery performance issues that have to be tracked down and fixed manually.)

iOS battery health

Beyond batteries, a few groups inside Apple are known for their use of automated tests. Safari is probably the most famous. Every code check-in triggers a performance test. If the check-in slows Safari performance, it’s rejected. More automated testing would probably help Apple’s software quality.

Complexity Has Ballooned

Another complication for Apple is the continually growing complexity of its ecosystem. Years ago, Apple sold only Macs. Processors had only one core. A program with 100,000 lines of code was large, and most were single-threaded.

A modern Apple operating system has tens of millions of lines of code. Your Mac, iPhone, iPad, Apple Watch, AirPods, and HomePod all talk to each other and talk to iCloud. All apps are multi-threaded and communicate with one another over the (imperfect) Internet.

Today’s Apple products are vastly more complex than in the past, which makes development and testing harder. The test matrix doesn’t just have more rows (for features and OS versions), it also has more dimensions (for compatible products it has to test against). Worse, asynchronous events like multiple threads running on multiple cores, push notifications, and network latency mean it’s practically impossible to create a comprehensive test suite.

Looking Forward

In an unprecedented move, Apple announced iOS 13.1 before iOS 13.0 shipped, a rare admission of how serious the software quality problem is. Apple has immense resources, and the company’s engineers will tame this year’s problem.

In the short term, you can expect more bug fix updates on a more frequent schedule than in past years. Longer-term, I’m sure that the higher-ups at Apple are fully aware of the problem and are pondering how best to address it. Besides the fact that bugs are expensive, both in support costs and engineer time, they’re starting to become a public relations concern. Apple charges premium prices for premium products, and lapses in software quality stand to hurt the company’s reputation.


David Shayer was an Apple software engineer for 18 years. He worked on the iPod, the Apple Watch, and Apple’s bug-tracking system Radar, among other projects.

Subscribe today so you don’t miss any TidBITS articles!

Every week you’ll get tech tips, in-depth reviews, and insightful news analysis for discerning Apple users. For 29 years, we’ve published professional, member-supported tech journalism that makes you smarter.

Registration confirmation will be emailed to you.

Comments About Six Reasons Why iOS 13 and Catalina Are So Buggy

Notable Replies

  1. I have never ever seen such a buggy macOS before. Most of the bugs I reported were fixed. But I didn’t even get a notification about the bug fix.

    And it doesn’t look like it’s going to get better. 15.1b1 foobared dragging a file on the dock. That was fixed in b2. But now the menus get foobared.

  2. So is the fact that Mail in iOS 13 no longer displays the contents of mime-attachments in mailing list email digests a regression, or “Not a Regression”?

  3. I really wish Apple would adopte a longer OS Update strategy say 2 years rather than 1. Sierra/High Sierra (and the Desktop/Documents/Photos cloud trap people fall into - Hey Ben My mac is crawling ! help ! )Mojave - Catalina has made for a fast paced modern update
    path (not to mention the phones and now the branch of iPad and watch) but it hardly allows for a user to breathe. For the first time all but one of MY machines need upgrading to meet OS standards (a bottom of the barrel Air is what i run Catalina on right now). I see a lot of issues especially with Apps not thoroughly quitting -Finder issues! Time Machine problems (which has prevented me from loading a backup of a library that got hosed by a third party vendor’s crappy programming) Photos and Music crashing. Really stupid issues could have been tested before released. I do get a boost in work when Apple dumps this crap on users who are are (imho) Bleeding edge wanna bees… but i’d rather deal with other issues. Oh and I had to delete Swift completely in Catalina because it would not download at all. I think i have to Nuke and Repave to get it to work because it isn’t happening at all.
    -> my motto -> You can’t download patience.

  4. There’s no way of knowing, but if you report it as a bug or provide feedback, at least it will get recorded.

    https://www.apple.com/feedback/mail.html

  5. Fascinating article.

    Exactly this. Why does Apple have to release a new OS every year? Who would not purchase a new Mac if they needed it because the OS is 11 months old? Especially since Apple hasn’t charged for OS upgrades in a while. I would much rather have the OS upgraded every 2 or 3 years, but be more polished.

  6. I’m also in this camp. There is no reason macOS needs a ‘major’ update every year (apart from marketing maybe).

  7. So here’s a thought. Arguably, some of the problem here is the effort of developing the core of the operating system and a vast suite of bundled apps and releasing them all at the same moment.

    What if, going forward, Apple took a page from ChromeOS and had the core of macOS update itself quietly over time without drawing attention to itself (and hopefully without impacting users in a big way now that 32-bit apps are off the table).

    Then, for apps like Safari, Photos, Mail, Messages, Calendar, Contacts, Reminders, Notes, and so on, Apple could still do a splashy release that would showcase new features that users care about. But without the core macOS stuff to develop and test at the same time, the overall project might be a lot more manageable.

    Even the splashy app release wouldn’t necessarily have to be all at once in September—Apple could bundle a few apps together into releases that would happen at different times of year in conjunction with the hardware devices that best show off those apps and features.

  8. As a late adopter of everything, I’m not impacted as much, but Apple is impacted. I won’t even buy hardware anymore until it and the software have been around at least 6 months.

    I’m so glad I got out of the coding business before the hurry up attitude took over. The stress would have killed me.

  9. For several years I’ve been helping out Apple via the AppleSeed program. Sometimes they reply to bug reports, sometimes not. Sometimes bugs are fixed at a decent pace, sometimes not until the next major release. At the moment, I’m involved with an unsettled iOS bug report that includes documentation and a workaround. The general situation is described here at Apple’s Discussions forum:

    Q: Unable to rearrange app icons in ios 13

    But Apple’s response to my bug report has been, to put it gently, nonsensical. This has lead me to consider what’s going on at Apple, and likely a lot of other coding establishments. Here are my current conclusions:

    1. Apple is indeed in a state of triage. The code clinic has to put less urgent bugs on standby.

    2. The volume of complex code has, as we expected decades ago, forced coding-by-committee. We know what that’s means. Human communication, reason, logic and emotional stability breakdown in proportion to the complexity of the task at hand.

    3. Object-oriented development means the use of ‘established’ code that’s commonly just as prone to bugs as any other. Fixing object code isn’t on anyone’s front burner. Old code lumbers on, incapable of addressing new features, new security concerns, etc.

    4. There are mounting pressures of Time and associated Money. In an age when Quality Capitalism has been overthrown by Quick and Dirty Capitalism (to put it mildly), priorities have shifted away from The Art of Coding toward: Good enough; Skip the code commenting; Feed the stockholders stat; Progress, not perfection; Skip the code verification; Skip the functionality verification; Exploitation without explication! Or as I like to simply put it: Short-term thinking leads to long-term disaster. Pick your synonym. It’s a Spirit of the Age.

    5. Modern coding tools are dinosaurian. Improvements in rapid coding have not adequately addressed the ongoing failures of coding fundamentals. Consider the term Memory Buffer and the frequent, constant, voluminous ways in which it is exploited by hackers, crackers, black hats, script kiddies. Pick your descriptor. IMHO (In My Heretical Opinion) everything C-based must go. It’s zombie coding. Let’s cut off its head and move on to the bright and promising young things, such as Swift and Rust. Let’s focus on developing so-called ‘Artificial Intelligence’ that helps us establish actual Human Intelligence in coding.

    Summary: Apple and the rest of the world’s coding community are caught in a conflict between the forces of Expectation versus Realization.

  10. That’s a very interesting take on it from the developer’s perspective. Thanks, Derek.

    I have to say I was somewhat startled by your comment on object-oriented coding. I believe in pretty much every seminar I have ever attended where the topic of OO coding came up, the concept was introduced by mentioning that OO became necessary because otherwise code would eventually no longer have been maintainable ( and/or scalable/extensible).

    Yet here we are, ~40 years later, learning that our OO code is no longer maintainable either. So maybe it’s not the type of code after all. Maybe it’s the coding environment? And as you indicate that’s both the tools and the economic environment.

  11. I hope you caught my recent edits.

    I have a biological systems perspective I find useful in understanding human systems. We humans demand simplicity amidst unfathomable natural complexity. But here we are creating our own unfathomable human complexity while attempting to force our demand for simplicity. Expectation versus Realization.

  12. I haven’t used Rust, but I’m pretty conversant in Swift. I agree it’s a big step in the right direction. Swift, along with ARC, makes it hard or impossible to make a number of basic programming mistakes.

  13. lowengard I really wish Apple would adopte a longer OS Update strategy say 2 years rather than 1.

    I think this is unlikely. Apple has a yearly product update cycle, and OS updates are part of that. Apple gets free publicity, and sells more toys, based on flashy new features. Fewer updates means fewer sales, and lower stock price.

  14. Note though that for the Mac that’s not true in general. The MBP might get an annual update. Most other Macs don’t get that level of attention these days.

  15. That’s absolutely true on the Mac side (heck, most Mac hardware changes barely get a press release these days), but all of Apple’s operating systems are so inter-related at this point that it may be tricky to decouple them enough to ship at different times.

  16. Although I do agree with most everything said in the article, I do take exception to the above. My observations are that all of the significant bugs being discussed now were well known to testers prior to release. I think there may have been a small delay in the original release date, but Apple appears to lay out an iron-clad schedule far ahead of time that is rarely violated. If there are bugs, they get shoved into the next update, as long as they aren’t known to be catastrophic.

    There have been a handful of cases of near catastrophic releases, but most of these involved a last minute change that was never provided to testers before release. I don’t feel that was the case in this instance.

  17. I watch a new release break something I use. In a subsequent release they fix that problem but something else is broken. In the next release they fix that and …

    It appeared to me people are not testing the whole application instead they are only testing the code they changed and missing the code they broke in the process. They need to test the whole application before shipping it not just the parts they think they touched/impacted.

  18. Without likely sounding like a captain obvious doofus, is there also a fundamental lack of engineering staff for all the platforms they’re trying to maintain and develop for?

    From previous stuff I’ve read, there’s two issues.

    Firstly, are there enough quality engineers to employ or is there still a mass shortage in the industry, thus making it an ever-increasing battle to acquire, and worse, actually hold onto staff.

    Secondly, aren’t Apple as a tech company supposed to be renowned for not employing enough engineering staff too (small teams, for example), so the sheer lack of people in the fight makes maintaining and gaining ground in the ever increasing battle to improve software and ever get around to squashing these “not a regression” bugs ever unlikely. I mean, do they even consider having teams that deal with these longstanding bugs, or is that too much of a financial cost pipe dream for us to expect?

    All I can say as a customer is it certainly doesn’t sound at all good, knowing these “Not a Regression” things more often than not are never fixed.

  19. From Scientific American June 2015: Why the Upgrade Cycle Will Never End
    Eventually these companies have no choice but to add features that nobody asked for. Meanwhile bloated, overwhelming technology has a very real emotional effect on us; we feel like idiots when we can’t master it. Then, as the software becomes increasingly weighed down with features, the interface must be redesigned to accommodate them all. (Such a redesign is then, of course, marketed as a new feature.) And each time you lose a few days of productivity as you learn the new layout.”

    and Douglas Adams in 1984:
    “it is very easy to be blinded to the essential uselessness of them by the sense of achievement you get from getting them to work at all. In other words - and this is the rock solid principle on which the whole of the Corporation’s Galaxy-wide success is founded - their fundamental design flaws are completely hidden by their superficial design flaws”

  20. My machine booted 3 or 4 times today. Wake on sleep is still a disaster in MacOS, so docking/undocking is a clown show. Will my machine wake up when I touch it? or will I get the apple after some time? Who knows?

    I think some of the answers here are simplistic, for sure OO is not to blame for this. Yes companies want new features, but does anyone even know what all the new features in Catalina are? I don’t think there are that many, clearly the problem is that the understanding of what can and cannot be done given an amount of time and a pool of efforters (trying not to call people resources) is become problematic.

    I too have been hoping Swift would make this problem better. SwiftUI was incredibly buggy, but by the same token, it is surprising how it was able to make a kind of finish line in a state that approaches usability.

    Apple is a lot of things. I hope it will continue to dare to improve (a la SwiftUI) and not just become a shell-shocked withering servant of the feature police.

  21. What machine is that? I’m starting to see patterns with certain models that aren’t universal.

  22. Last time? I reported a bug to Apple, they got back to me one year later when I was running the next macOS asking me to quickly test for the bug again on the old system and report back. Yeah, sure. They simply are not going to receive reports on all the bugs that they have and likely have no idea about them these days. There is really no connection at all (nearly) to customer feedback these days in any big companies. Google for example apparently did not know that they Sync (Google Drive) app did not work with offline files on the Mac when they launched it. I only once got help from Apple ever with something since the 80’s and it was (of course) an Apple-ID related issue and mainly because not having direct access to their servers. I even got blocked by Apple for a week recently because their support webpages doesn’t work as they should in Safari … .

  23. 2018 Macbook Pro with 32GBs of RAM and 1TB SSD.

  24. Appreciate the article from a dev perspective! Why Apple insists on tying major OS releases to their iPhone upgrade cycle is beyond me. Decoupling them would go miles towards ensuring quality software releases.

  25. Appreciate the article from a dev perspective! Why Apple insists on tying major OS releases to their iPhone upgrade cycle is beyond me. Decoupling them would go miles towards ensuring quality software releases.

    Releasing multiple announcements of software upgrades at the same time increases the chances of getting more column inches in the press. And since upgrades are generally a good thing, it usually means positive publicity and “how too” articles, avoiding the chance of headlines like this really recent one by Josh about a chain gang of product releases:

    “Alexa, Throw Spaghetti At The Wall And See What Sticks”

    https://tidbits.com/2019/09/27/alexa-throw-spaghetti-at-the-wall-and-see-what-sticks/

  26. FWIW, just to comment on this part, I have read an article or two since iOS 13 was released that said that Apple doubled the number of binaries over iOS 12 that were compiled from Swift code, so maybe they agree with you. (As I wen to look for them, it turns out that the articles were all based on the same blog post: https://blog.timac.org/2019/0926-state-of-swift-ios13/ )

  27. How tragic that today’s software engineers cannot be honest about their progress. I’m convinced that much of this problem is due to virtually all of Silicon Valley being run like a summer camp instead of a business with adults at the helm. If I were a manager and had been led down this road by my engineers, I’d want to fire the lot of them. “Just tell me your problems and let’s try to fix them”, would be my mantra.

  28. Can we be so certain it’s the engineer’s being dishonest? Couldn’t it just as likely be that the engineers are quite clear about their abilities and communicate that too, but management simply refuses to adjust scope/timeline accordingly?

    It’s a rather commonly found management “principle” these days to deliberately set goals too high, allocate resources too tightly, etc. in order to ensure (at least according to the proponents of this tactic) that people are always churning out at max capacity.

  29. Yeah, when the article says “making it past Apple’s internal testing and the public beta phase,” I was thinking that meant that the bug survived through those phases, not necessarily that it wasn’t identified or reported. As David said, Apple triages bugs heavily, so lots of known problems won’t be fixed intentionally because of the risk of regressions.

  30. @godrifle Why Apple insists on tying major OS releases to their iPhone upgrade cycle is beyond me. Decoupling them would go miles towards ensuring quality software releases.

    I think there are two reasons Apple combines hardware and software announcements. First, new hardware (eg: improved cameras) enable new software features. Also, the more features Apple can announce at once, the bigger the media splash, and the more publicity Apple receives.

  31. All I know as a user is that when I loaded IPadOS 13 on my 4G Mini it really introduced numerous bugs to Mail and to the text editor. It looks like e-mails are formatted for a larger screen. The subject matter consumes the trash can, new email, and move to icons. One cannot type into the bcc or cc fields as the keyboard intrudes into those spaces.

    Tapping on a word to introduce the cursor to make a change to a single letter selects the entire word. its impossible to place the cursor after a single letter, backspace to erase it and then type in a new letter…the entire word has to be retyped. This is such very basic stuff that I can hardly hold my breath to see what else is broken.

    So many of these new “features” are about half past worthless. Sidecar would be neat, but you have to have the latest hardware to use it. Using Files to connect to an external USB thumb drive would be very convenient and a huge step forwards but it’s apparently overly sensitive to what kind of media and how it’s formatted in order for it to work.

    Is all this complexity and interconnectedness really necessary? Especially when so much of it doesn’t work? Reminds me of Simon & Garfunkle’s 59th Street Bridge song, “Slow down, you’re moving too fast. Ya’ gotta make the morning last. Just kicking down the cobblestones, looking for fun and feeling groovy.”

  32. Just a point … Could there be a strong profit motive in Apple’s frenetic update schedule? Could the breakneck pace that Apple has kept, be a market dominating move? Could it force customers to follow along with whatever Apple creates, and could it keep any competitors ( 3rd parties) at bay? Is it possible that Apple knows that by keeping customers on their toes and ready for anything by giving them shiny new ‘features’ every 6 months that it also is able to rope them into new limits, and profit windows at the same time? The Apple customer base is so stunned by the pace of updates that things like App Notarization in Catalina which give Apple control over programs that don’t even use the Apple store, slip in as new ‘realities’, along side arbitrary deprication of 32bit apps. I suspect thats the ‘Apple Genius’ using the software update as an offensive business tool to push growth.

  33. I’d like to see Apple move their software releases to incremental, and unplug key apps like Mail from the OS. It will likely never happen, but I believe it would lead to more features, more refinements and more stability. The annual release schedule, based solely on marketing, is hurting them.

  34. Yes, purely for hype. It’s sad.

  35. I’m starting to feel like Apple needs to start paying beta testers…as it “feels” like Apple might be relying on public beta too much. Because if they are…obviously nobody that is detailed or actually uses the OS for real life is reporting back to Apple…other than reporters blogging stories about the “new macOS features”. :innocent:

    I’ve been finding so many obvious things in Apple’ own stable of “standard apps”, from installing to just opening the new Photos App and it crashing and having to rebuild for hours…seriously seems someone there just needs to test their own work as I cannot see how anyone could possibly miss some of these glaring problems, sure seems they would have to find many of these issues, if they tried it themselves (so it would seem). Quality control is way down! Plus, 4 iOS / iPadOS updates in a month…dang.

    So now for these other software developers…I say shame on them for both not testing there stuff and they have been warned for years and years that this was coming.

    Yet, still Catalina is a BIG change…I compare it to leap that Lion was with no more Rosetta or PPC code. Catalina is a big deal…there are going to be some pains with this gain. :crazy_face:

Join the discussion in the TidBITS Discourse forum

Participants

:)