1. Switch to using the Carbon API, and create a "carbonized" application that works on both Mac OS 9 and Mac OS X (same executable for both platforms, basically a special executable format and some restrictions on how you used various APIs)
2. Once you don't care about Mac OS 9 support, migrate to Project Builder (or at least GCC)
3. Eventually, migrate to Cocoa
The path was set up so that you could stop at any point along the way and keep shipping your application. In my personal experience, steps #1 and #3 could be difficult and labor-intensive, but step #2 was usually easy.
My understanding is that Quark got stuck and took too long to complete step #1, long enough that their customers didn't want to keep Mac OS 9 around just so they could use QuarkXPress and switched to InDesign.
Step #2 mostly involved fixing the parts of your code which used weird, non-standard C extensions that GCC did not support. Things like:
(long)*ptr = x;
Adobe got stuck on #3, which is understandable because it's an enormous amount of work with a relatively low payoff. The main drawback of not completing step #3 is that you're stuck with a 32-bit application until you complete it.That's hard to side with, when preemptive multitasking and protected memory wasn't a thing in Classic Mac OS. Those were some big sticking points when trying to Get Shit Done on a Mac, especially in the late nineties.
I agree Cocoa was amazing tech, but I don't see the sluggish migration from Carbon being because people didn't buy into it. I think it's more that Carbon worked, and there's just other things to put the expensive engineer's time to good us on.
My experience with the Mac developer community at the time was that someone new would come to the mailing lists and ask whether they should use Cocoa or Carbon for developing. These are people who don't have any legacy code and don't have a bunch of skills they've built up, working on greenfield projects.
A common response was along the lines of, "Carbon is a Serious API for developing Serious Applications, and Cocoa is a kids tool for making toys."
It took a long time for Mac developers to really buy into Cocoa, many of them saw it as a less-capable version of existing APIs rather than the future of Mac development. That viewpoint wasn’t entirely without reason, at first, but the longer you spent with Cocoa, the more clear it became that Carbon was a second-class citizen.
My other thought is that Apple didn’t just want tech, but the experience to develop it. That’s why acquisitions were at the top of the list. Apple has certainly bought a few other companies just to access their engineering talent.