The software crisis was a term coined for when programs could not be written at a specific time to counter proportionally difficult problems efficiently. The reason this crisis occurred was because computers were getting astronomically more powerful allowing way harder problems to be able to be computed, but there was a lack of understanding and existing programming skills to code these problems.
“The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem.” - Edsger Dijkstra, The Humble Programmer (EWD340), Communications of the ACM.
To understand how this led to the creation of software engineering, one must understand what software engineering is. It is a branch of Computer Science that deals with the design, development, testing, and maintenance of software applications. Software itself is the collection of instructions, data, or computer programs that are used to run machines and carry out particular activities.
It was through this crisis that the Agile and Waterfall methods emerged to make creating software more efficient and robust. Formulating the foundation of software engineering.
The Waterfall method is an approach to software development where a certain model is followed, same with Agile. In Waterfall there are set sections of what can be done at a specific stage before moving onto the next stage, all the way until the maintenance of a software. Agile on the other hand, is an iterative model, where it is essentially Waterfall, however, every stage is run through faster, making one cycle, and then the cycle is repeated countless times until the software is complete.
Netflix employs a method they call the “Chaos Monkey,” wherein they randomly make a part of its software fail to test how the rest of the app holds up. This is beneficial because it allows the software engineers to pinpoint faults in the code and be able to correct them quickly and efficiently as well as be able to prove if the software is correctly coded or not.
Open-source software is software where its main code (source code) is visible and modifiable by anyone. Massive companies have various reasons to open source their codes, of the possible reasons some of them could be, find good developers making modifications and hire them, gain a monopoly of the product being used in the market, and ‘transparency’ with the user on how the product works.
It can be costly to maintain software as sometimes code can be written, then the owner of that code may leave the company, so there is not anyone else who fully understands how the code works, and it might take a different programmer a very long time to comprehend what the code does and how to debug it. The longer it takes to identify the bugs, the more ‘technical debt’ builds up, making the software lower quality and leading to a loss of users.