What we generally use on larger projects where I work seems to be effective (though it's more used in our web shop than in the broader IT projects). I start with needs analysis and requirements gathering and nothing else.
When I get through a signed-off draft of high level requirements (I'm a UX/PM guy), I'll usually have requirements that focus on what the app has to do, but I'm not the best resource to complete technical requirements so I pass it onto our development lead, who does detailed tech requirements, including pseudo-code and the like.
While those are being done, I do a first cut of wireframes and an interaction spec. I'm starting to do more lo-fi prototyping at this stage, as it allows me to get feedback from stakeholders without detailed mockups. It also allows me to revisit my wireframes and make any adjustments based on the lo-fi prototype. Once the wireframes are finalized, detailed technical design is usually getting along and we can finalize the interaction piece too.
Only at this point do we typically put the time into visual comps and only after that's signed off do we build a high fidelity prototype. The good thing is that, by this time, we've got several rounds of iterative feedback, tweaking and ultimately sign-off completed.
Our high fidelity prototype is a pretty accurate representation of how our final app will work, so building the full app is a relatively short phase. Of course, you then need potentially alpha, beta and prod testing and tweaking cycles, so ...
Hope this helps.