The Three-Legged Stool
Leg Two: The Hardware
You know that system architecture is constantly evolving - that the rate of change is simply staggering. Machines have gone from 8 bit to 16 bit to 32 bit processors. System busses have changed from ISA to EISA to VLB to PCI to AGP. Nowadays your RAM is no longer synchronized to your processor bus. Your memory runs at 133 mhz, your processor at 100 mhz and your PCI bus at 33 mhz. What is a developer supposed to do? It's enough to give you whiplash!
You also have to keep your eye on hardware bugs. You remember the early FDIV flaws in the Pentium chip. Intel had gone into denial mode, but after some serious consumer outrage, they admitted the problem, recalled the chips and took a 475 million dollar charge against earnings. You remember the Pentium II problems (the Dan 0411 bug) and even the trouble they had with their memory translator hub when they tried to allow motherboards to support SDRAM instead of RDRAM. Most recently, you remember the Via 686B / Creative Labs Sound Blaster Live issue, where you had serious data corruption when files were transferred across the IDE bus. After weeks of denials and finger pointing, Via finally issued an updated 4-in-1 driver that seems to have fixed the problem. Note to self: don't lie and deny.
Leg Three: Device Drivers
You know that writing device drivers has got to be one of the hardest programming tasks ever assigned. Programmers have to figure out how to get their devices to peacefully co-exist with all the other hardware in the system, then figure out how to do so within the rules and limitations of the operating system. Universal drivers? Mini-Port drivers? DirectX? USB? FireWire? LPT? Com Port? Game Port? DMA and IRQ conflicts? IEEE - What? You can only imagine. How is any sane programmer (err - oxymoron?) supposed to be able to deal with all of these parameters without making the occasional mistake? They have to account for every single variation that could occur in a multitasking operating system that may be sharing DMA's and IRQ's like crazy! You'd think in the age of Windows ME/2000, device driver management would be the job of the hardware manufacturer, and software developers could sit back and not have to worry about compatibility. But reality settles in quickly, and you remember were that the case, you wouldn't need to download patch after patch just to fix various sound and graphical bugs.
So there you have it: your three legged stool. In order to get going, that magic Trifecta has to be in place and you have to do your best to deal with it. If you don't, that house of cards you plan to build is likely to crumble fast.