Competitive advantages can look obvious in hindsight even if they aren't at the time.
Take Microsoft for instance.
Back in the 1980s, writing software was hard and Microsoft was attempting to rectify this by building an operating system. Instead of writing straight to assembly, you wrote against a set of predictable APIs that Microsoft provided to you.
Of course, assembly was still used for speed reasons but even so: companies like Lotus with its 1-2-3 software went all-in on the IBM PC / MS-DOS platform. You could only buy 1-2-3 on that platform. This saved on money immsensely, which Lotus used to make 1-2-3 the dominant player (until, well, it wasn't).
Microsoft's operating system made writing software easier. That also meant it could never break backwards compatibility. If they chose to do so, then that new compatiblity-breaking operating system could potentially cede ground to other operating systems. The reason customers kept with Microsoft was because it meant not having to rewrite all their software. Should that change, they may be inclined to look elsewhere.
All the way through to Windows 98 (and ME?) you could guarantee that your program written in MS-DOS 1.0 would still function. That's pretty remarkable from an end user point of view. Linus Torvalds has echoed this sentiment with Linux, citing that they try their best to never break user space.
This held true up until the early 2000s. By then, they were a monopoly. There was never going to be another operating system short of a paradigm shift (e.g. Linux dominants web servers, Apple dominants smartphones, etc). So there was no longer a fear of somebody else coming along. This gave them the freedom to build something new, something better...
Such as Windows NT!
Windows XP was built with the NT kernel and broke, in many fundamental ways, the underlying APIs that had guided Windows.
Joel Spolsky has written about this on his blog.. The problem is that it's not really an issue. As stated, there wasn't any hope of a competitor coming along by that point so what was the point to keep to those APIs?
It's not like Microsoft was beloved by developers who were sad to see the APIs change. Quite the opposite in fact. Bryan Cantrill has recently written about what a wasteland the early to mid '90s were for computing. MS-DOS was a pain to program for, precisely because of rushed deadlines creating premature products with wonky APIs that then had to be supported until the end of time. Heck, some are still supported.
For businesses this may have been devastating if they were still relying on MS-DOS programs that likely no longer workers. 16-bit windows applications still apparently worked under Windows XP. It's unlikely this was a terrible issue.
So I'm here to say that Joel Spolsky, in a very rare moment, was wrong.