With a software company, the first priority of management needs to be creating that abstraction for the programmers.
If a programmer somewhere is worrying about a broken chair, or waiting on hold with Dell to order a new computer, the abstraction has sprung a leak.
Good article by Joel... and I agree.
It's analagous, though at a much higher level, to my argument against Linux. It's not that I don't like Linux, it's just that I spent at least half my time preparing to use Linux. For any task I wanted to do, there was always, ALWAYS, some sequence of events that had to be done first. And unlike on my mac, it wasn't "Download file, drop into Applications folder" it was, "read about font engine, move font files, run font compiler, fail to see fonts, realize that your X-server is one minor generation out of sync with your tools and the semantics have changed, download updated everything, recompile X, realize that the video driver now won't work, download and complile video driver, fiddle with settings, build tools, compile fonts, recompile gimp, and MAYBE now fonts will work. Some of them. Sometimes."
Very similar really... a programmer in the abstracted environment joel describes is like a computer user with a good OS -- all you have to do is sit down and start working.
I'd kill for that. Alas, today I have to start the process of figuring out why my ASP.NET app won't talk to the database server even though every other application talks to the database server and the semantics are the same, and no one seems to know why or to whom I should speak to get this issue resolved. That's instead of writing code, of course.
The Development Abstraction Layer - Joel on Software