The software crisis referred to the challenges that faced people in the 1960s in maintaining and building efficient and useful software. As systems became more complex, issues like poor quality code, cost overruns, and project delays began to appear due to numerous bugs and operational failures: a result of employing old and inefficient methods in fulfilling the complex demands of new software. In response to the crisis, software engineering emerged to address the challenges, officially first highlighted at the NATO software engineering conference. It aimed to introduce structured ways of building software and ensure quality.
Agile methods involve an iterative approach of breaking a project down into small pieces called sprints. Each sprint takes planning, development, testing, and review. On the other hand, Waterfall is a linear approach where development occurs in strictly-defined phases. Each phase must be completed before the next one begins, making going back difficult.
Netflix intentionally shuts its servers down randomly as part of a practice known as "chaos engineering." This approach involves deliberately introducing failures to their systems to test the robustness of their software. They do that to identify weaknesses before they lead to actual outages or performance issues in production, making tracking their software and updating it easier and less stressful.
Open-source software is software that is available for the public to view, modify, and contribute. Big companies contribute to open-source software mainly to cooperate with each other and to attract talented developers. Even if it seems counter-intuitive for commercial companies to share their products for free with the public, it's beneficial because it creates a baseline between different competitors to operate on individually. Sharing their software also ensures that it is always inspected for free by many experts for bugs and vulnerabilities.
Because shortcuts made during the development process will snowball into becoming a mystery to deal with later. As software ages, it often becomes associated with new systems and environments that weren't put into consideration during the building period. Technical debts (or design debts) resulting from poor code quality accumulate as a result, creating many obstacles to implementing new features or fixing bugs.