- Software engineering is extremely complex and expensive work, with large software systems costing more than buildings and often having high failure rates. - The two main factors that cause "runaway" software projects that exceed budgets and schedules are poor estimation done too early and unstable requirements that change frequently. - Programmers are often given impossible tasks with too much work and not enough time, leading them to produce workarounds and quick fixes rather than well-designed solutions.