This cartoon is a great example of the non-technical issues in software engineering. Notice that every situation is wrong, even what the customer asked for. These issues are caused by poor communication, incorrect assumptions, cut corners, optimism, bad habits, etc. The good news is that it is possible to overcome each of these causes, but it isn’t easy and certainly doesn’t happen without a lot of effort. It takes balance, iteration, communication, insight, and good judgment. These are things that can’t be enforced.