This explains why software development goes so awry in one quick sentence.

Because 70 percent of the cost of developing software is attributable to personnel costs, the skills, experience, and work habits of engineers largely determine the results of the software development process.

Why is that so helpful?

First -- it explains why so many managers -- and programmers! -- have unrealistic expectations on why what should happen by when in your applications. There's really nothing to "wait on" when it comes to hacking. The raw materials are all there. If you're good, you can build the largest "building" quickly. If you're not, it may never get done. If you're average, it might take you quite a while -- or not!

But it's not even that simple. Coders have good days and bad, flashes of insight and problems that will approximate arch-enemies. Remember that SAT math question where it took you seemingly forever to answer, but once it came to you what the "trick" was, you couldn't believe it'd taken you that long? What about the question you never got (on the SAT or elsewhere if you banged that test out)? Insight blocks happen when you're hacking too, and they make it difficult to schedule & estimate projects.

It's not like the truck's late or the shipment's delayed or the weather's too rainy to pour the foundation. The raw materials are there as soon as you have a laptop and a net connection. But, strangely, that doesn't mean you don't have to wait for your metaphorical ship to come in. It's hard enough to estimate how long a construction project will take, and that's often much more tangible. No wonder software projects have a reputation of being impossible to accurately estimate.