Most project have difficulty meeting their deadlines due to their voluntary work nature and the nature of developing software.
Software is a bit like 'OK if everything goes to plan, this should work' but no matter how much careful designing you did, there will always be one really really really annoying bug and obscure bug that will come up before release, usually as the result of a typo or something similar. (Think > instead of < in an if statement, which can lead to hard lockups due to infinite while loops).
Commercial organizations will either push the release back if there are a lot of showstopping bugs or they'll ask programmers to do what they can which usually results in a bunch of really nasty hacks before release.
Couple the nature of software development in general with the fact that a lot of developers do development because it is voluntary and they are in the mood usually leads to pushed back release dates. It's why giving an ETA for such things is never a good idea since it puts unnecessary pressure on you to get it done in a rush.
I always think you have to be in the mood to get some software hacking done. You're either feeling up to it or your aren't. It's weird. When you don't treat it like a chore, you'll get loads done in an instant, then move on to something else and come back to it later and get loads more done. If you treat it like a chore, nothing actually gets done.