Computer systems are broken from top to bottom due to changing requirements, stakeholders, resources, and environments over long projects. Technical debt grows non-linearly with large, complex projects that develop inertia. Diversity in technologies, languages, and architectures emerges from solving different problems, but also introduces maintenance issues. Well-designed software strives for minimal and simple APIs between components to reduce complexity. Craftsmanship requires focusing effort where it matters most through autonomous engineering practices, careful API design, and right-sizing architectural components for agility and maintainability.