In continuation of our earlier post on different phases in a software development life cycle, in this post, we look at:
- System Design
- Installation and Deployment
- Maintenance and Upgrades
The prior phases of Preliminary Analysis and Concept Proposal, Requirement Analysis, and Planning and Resource Allocation have been covered in the previous post.
This phase defines the features of the solution and the objectives of each feature, how the solution will run, what the interfaces will look like and the type of coding that will be done. Business rules and processes that define how a function should run or lays down some restrictions are incorporated into the overall design.
Interactions with the client play a key role in this phase as they need to give the go-ahead with the final plan. Usually, there are changes to the first draft based on client feedback. In terms of time required, this is the only phase that has a ‘what-if’ element as internal discussions on the client side may sometimes extend the overall project lifecycle by a few weeks if not a few months. A software development company usually asks the client to revert within some pre-agreed time due to this reason.
This phase of the lifecycle involves the actual coding. Nearly all projects are developed in a modular format with each team working on a specific job. This is the longest phase of the SDLC. Some elements of this phase include:
- Conversion of the design into a series of modular sub-phases
- Acquisition and installing of the systems environment
- Development of databases
- Coding and compiling
- Running initial tests on each module
- Preparation of test case scenarios
Integration of the different elements such the systems environment and the modular codes usually occur in this phase. Some experts consider integration as a part of the testing phase since the tests start around or even before integration, i.e. with the completion of each code module or unit. However, integration can be taken as a part of development as it is the process of integrating the different units and elements to get to a final product, which is a part of development, while testing is a stage in itself that runs in parallel with most other phases.
This phase runs in parallel with development and sometimes even earlier from the requirement analysis stage and continues even after installation and deployment.
During development, it starts from the time of completion of a coding sub-phase. Testing covers every aspect of the software from finding the issues that occur at the outset to fixing the bugs when the codes have been compiled.
There are different methods of testing. Some like static testing analyses the solution without execution (of code) through reviews and inspections. Dynamic testing is done by running the programme and may be used for specific sections of the code, for the modules as well as for the entire integrated solution. Some other methods are white box testing, black box testing, visual testing, etc.
Since we offer near-comprehensive software testing solutions besides software development services, we believe this subject needs a post or two of its own instead of just a small section here. We promise to cover software testing services in more detail later.
Installation and Deployment
This phase comes after the first series of tests are done and is usually launched in beta mode on the client side. The solution is made to operate at near-full stretch and any issues or bugs that come up are removed during the beta phase.
Once the beta stage is complete, the solution is given final approval and loaded onto the servers to run full-time. It becomes a part of the day-to-day process.
Maintenance and Upgrades
The final phase of the software development life cycle is maintenance and upgrades. It is a continuing process and ensures the solution works as it was meant to do. Most IT companies offer maintenance and upgrade options along with their software development services. These ensure the software does not become obsolete as the developer keeps the solution upgraded with the most recent version of technologies used to build it.