He missed the biggest reason, which is that projects are often coded quickly to just "get it working" in a fast time frame.
Another one would be constantly changing requirements. So you start with something nice. Add a quick hack to do a little more. Rinse, repeat, until it becomes an unmaintainable mess.