There is an aura of excitement that flows when you spark an idea for an app and then immediately sit down to start cranking code out onto a screen.
While this is sometimes practical when cowboy-coding a small project, suppose you were instead leading a team of programmers on a large scale application; you'll want a process for creating the application in such a way that everyone can be on the same page, and the development process goes smoothly.
In the software industry, this process is called the Software Development Life Cycle.
What is the Software Development Life Cycle?
The Software Development Life Cycle (SDLC) is a framework for designing, creating, testing, and implementing a software application. SDLC follows a plan and methodology that aims to improve the quality of software and the development process.
SDLC occurs in phases, usually defined as seven stages which outline specific steps in the software development process:
<div style="width:100%; margin:auto;text-align:center;"> <img src="https://www.devmaking.com/img/topics/sdlc/SDLC_phases_01.png" alt="SLDC cycles" style="width:600px;max-width:95%;">
The planning phase allows the development team to evaluate the scope of a project, estimating the amount of time and work would be required for successful implementation. This allows developers to explore their options, evaluate any risks, and even get insights as to which SDLC model to leverage.
2. Requirement Analysis
Requirement analysis is a vital step in the process as it is the primary source of direction for the project. This phase is about gathering features that the client or team wants to see in the finished product.
The design phase attempts to make the jump from "what" to "how" by creating extensive documentation, outlining the components that make up the whole application. These documents might include functional diagrams, visual mockups, pseudo-code, and entity-relation diagrams.
Up to this point, we have been able to do without typing a single line of code. Now the time has come to go from the designs to implementing the features. Notice how what was previously a majority of the development process is now only a small part of the overall process!
Now that there is a functioning product, it enters into the testing phase. This step of the phase seeks to find out if the features were designed correctly in addition to them being implemented correctly. The core function of testing is to discover any faults in the designs or implementations, often referred to as errors, defects, deficiencies, and failures.
Once the product has reached this point, the development team is fairly confident in their creation, and the client is also happy with the end result. From here, the application can be released for use by the client.
Even with extensive testing, it is still not always possible to know that a product is free of defects. Because of this, a development team with often provide a client with post deployment fixes to maintain the software and keep it functional.
At some point in time, the product may no longer serve the purpose of a client, and as a result needs to be disposed. This is a part of the process that is not often touched on, but phasing out a piece of software is a necessary step for many applications.
When developing a software application, there is no one-size-fits-all solution that works well for every scenario. That's why there are different models of SDLC that follow the phases defined above, but might have different patterns about how and how often they are touched on.
For instance, if you were developing a well-defined, unchanging application, you might gain more from following a waterfall model than from others. In another scenario, you might be developing an application that has rolling content every few months and requires constant development. In this case it would be more practical to consider an agile model.
These are just two of the many types of popular SDLC models. Some of the most popular models are:
- Waterfall Model
- Agile Model
- V-Shaped Model
- Iterative Model
- Spiral Model
Agile development is a notable model among these in its recent popularity beyond just the scope of the software industry. In fact, the model is so widely utilized that it has sub-models for different kinds of agile development.
When to use SDLC?
SDLC and SDLC models provide a means for controlling large projects and defining requirements to keep a team on track. With this process also comes an ability to estimate the relative costs of a project and easily maintain a finished product.
Despite these points, there are scenarios where the costs of adopting an SDLC model outweigh the benefits. For example; a small project might not require the governing and documentation that comes with SDLC, and can make the project take an unnecessary amount of time to complete at a much higher cost than an alternative production method.