My experience is that for a lot of complex systems, there are many exception cases which need to be handled, many interpretations, gaps and sometimes contradictions in the spec. It just takes a lot of effort and a long time to handle all possible cases.
Sometimes even something which sounds really simple, isn't simple at all once you consider all the possible formats, modes of interaction and all the things which could go wrong.