It always fills me with fear, resentment, and dread when someone talks about "An exceptionally detailed spec." I developed web software for the best part of 15 years, and pretty much without exception all the projects I did that were successful didn't have much of a spec at the start. We did what would now be called Agile, but the proper term is really "rolling-wave planning" - phasing development of a project to focus on what you have enough information to spec properly and only outlining the rest. It's hard to avoid scope creep doing things that way, but the result is a product that's a better fit for it's purpose.
It takes a decent project manager and a good understanding of what the requirements are on both the management and development sides at any given moment during the project. That's easier in-house but there's no good reason why it won't work with an outsourcing company too.
Ultimately, if the project fails/runs over budget/is late then it's due to a failing on the project management side.