Have you ever handled a Client who doesn't know anything about programming or no technical skills who doesn't even know how to turn on a Computer? What he only have is the idea, which is a great one, but doesn't know how to implement it so he hired some programmers to implement his idea.
Some over excited programmers likes the idea and eager to implement it without thinking of any possibilities that a problem might occur. Now both parties (Client and developer) have agreed on something after plotting a timeframe of the project and benifits. And then there comes the part where you are almost finish the project, and your client comes across with another idea and wants to implement it. And as a developer you know the possibilities of implementing that, and you found out that it would destroy 50% of what you've done and needs to extend the timeframe for atleast 50% of the one you agreed on.
As for the clients side, it is just a little feature that needs to be added, and because I'm nearly done with everything, he thought it is just a brick that needs to be placed on the wall, unfortunately that brick is in the middle of the wall.