The IEEE defines Software Engineering as "the application of a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software." Software engineering is a discipline applied throughout the entire software lifecycle, spanning the early phases of system specifications all the way to maintenance after system deployment. So why use an engineering approach to software? Quite simply, because the alternative would be to use an ad-hoc or disordered approach. An engineering approach means predictability and quantifiable results through the application of theories, methodologies, frameworks, and tools. When applied efficiently, the result is high-quality software created in a cost-effective manner.