Related question: https://news.ycombinator.com/item?id=23704861
Sometimes it's a negotiation tactic to try to squeeze a freebie. Say a company commissions 10 training sessions, which by contract is paid after the 10th. They'll rush through 9 sessions in 2019 and never get around to the 10th one, saying that the previously trained team were no longer around and that the new team need some practice to get up to par.
Chasing and suing clients is simply not profitable, exhausting, time consuming. Writing better contracts is time consuming and often that time is not billable. The trick is to filter clients who won't pay, and basically handle marketing in such a way that you don't get these clients. A lot of it is spotting patterns in bad clients and sometimes refusing someone who could potentially be a profitable client just because they could also potentially be a trouble client.
Unspecified functionality/design:
My clients are often non-technical (not developers) and UI/graphic designers. So there can easily be a lack of understanding and rigorous communication if you don’t take the time to write things down and keep an updated version of that thing as you figure out the unknowns.