Software engineering fundamentally revolves around two critical trade-offs: software quality (correctness, reliability, maintainability) and cost (development time, resources, budget). Every software engineering decision balances these competing factors. Engineering and design are activities, not core issues. Hardware and software are components, while programs and instructions are too narrow in scope.