It's usually the poor time estimation and "I need this done yesterday" deadlines that undermine us. In software at least, it is somewhat difficult to say, "this problem will take 0.5 days to diagnose/resolve", or, "this feature will take 3 weeks to implement". Project managers are usually either too lazy, too incompetent, or too preoccupied with other things to follow a problem/feature through to it's logical conclusion step by step. And to accurately estimate these things, you really do have to just think them through and break them down into 1 day or less sized tasks. In my experience, giving a developer a task that takes more than 1 day to complete is a surefire way to waste time and ultimately to potential failure. There are exceptions to that, and the guys that shine usually can handle bigger tasks and divide them up just fine themselves, of course. As an analog, if I told you to go build a house, you'd probably (unless you are a general contractor) say, "I don't know how/can't get this done". But if I told you to go get your property surveyed, then to think about how many bedrooms, bathrooms you needed, and then to bring your survey to an architect with your bedroom/bathroom requirements, as well as a rough estimate of your housing budget, you'd prolly be able to do those things and be well on your way to getting your house designed/built.