Brent Simmons recently did a better job of explaining this than I ever have. His summary just nails it:
This is all just to say that app-making is nothing like building a house. It’s more like building the first house ever in the history of houses, with a pile of rusty nails and your bare hands, in a non-stop tornado. It’s different every time, and it’s astonishingly complex, non-linear, and unpredictable … The only reason anything ever ships is because people just keep working until it’s ready.*emphasis mine
And if you have any doubt of the truth of this, just look at software projects that ship on a pre-defined schedule rather than when they are ready.