I have been building software for clients for over a decade now and have come to one solid conclusion: deliveries suck.
Maybe I'm just the worst developer in the world and have worked with the worst teams and have had the worst clients… but I doubt it.
I have delivered early, on time, late, with more functionality, exactly the same, and in some cases less functionality (usually due to lack of funding) and still…rough deliveries.
When I say “rough deliveries”, I usually mean angry clients and stressed out developers. Maybe not angry like the hulk (though I have seen it), but at the very least, passive aggressive comments, notes of disappointment, etc…
The reason deliveries are hard is because of a misalignment of expectations. When a client has an idea in their head of how their product should look/feel/function and it's been burning in their mind forever, us developers are doomed from the get go. We can never deliver perfectly to match this magic piece of software that only exists in our client's mind.
Also, software is hard. It's especially hard to get exactly right on the very first pass. Software is a living and breathing entity that needs lots of care and feeding. It's very tricky to articulate this to someone who doesn't understand that and is paying you 10's of thousands of dollars to build their dream.
We follow a pretty strict agile process, so the client usually sees their build at every…single…stage. They also have full control to report issues, make changes, etc… during the build cycle. Still, for some reason, they are always dumbfounded when it comes time to ship.
So, if you are building for clients, cut yourself some slack. Know that deliveries will be tough and most of the time, there is nothing you can do to prevent that.