It is estimated that there are around 23 million software developers in the world and this number is projected to grow to around 27 million in 2023. While software development remains one of the most dynamically advancing industries, the significance of a proper development paradigm has only gotten more substantial.
We at Bytecoin take this question seriously - it is challenging to develop and maintain a sophisticated software product like Bytecoin. In this article we have decided to do an overview of Software Development Life Cycle (SDLC) - a work paradigm in software development that makes products like ours possible. We wanted to focus on core activities involved in software development rather than describe different methodologies of iterative development and team collaboration, like Scrum, Kanban, DSDM, Spiral and others, that typically arrange these steps into different workflows.
There is a canonical model of software development called Software Development Life Cycle, also named the “Waterfall” method. It outlines 5 stages every software product can (and should) go through:
Requirement gathering and analysis
Here is what happens at each stage:
Requirement gathering and analysis
This is, probably, one of the most important steps of the process: thorough research and analysis will shape the hypothetical product the software will be designed to fit. In this stage developers determine who uses the product and how they use it, what data is input and output from the system, how the information gets handled, etc. The hypothetical product is then compared with prospective competition and its strengths and weaknesses are analyzed. A great deal of collaboration is essential in this step as marketers, business analysts, software engineers and designers contribute according to their areas of expertise.
As a result a requirement specification is produced. This document is what the product is designed and evaluated against. In addition, the requirement specification is what the testing team can start planning test activities with.
From a software point of view, design is the step in which the software architecture of a product is created based on the requirement specification. Software architecture is a high-level structure that outlines all component relationships in the software model. System requirements and specifications can be finalized. Modern-day software products are complicated pieces of automation that rely on different technologies, so thorough attention to all interaction cases is needed. This step is summarized in the system design document.
This is the step which, according to pop culture, constitutes actual software development: software engineers working on code. In fact, contrary to popular opinion, writing code is not the only activity involved in actual software development. Depending on development methodology and several other factors, software engineers can be involved in documentation examination, code reviews, design meetings, bug hunting, etc. All these activities contribute to the subsequent code that is efficient, safe and punctually produced. Once this stage is complete the Testing phase can begin.
Testing is one of the most underestimated stages of software development. Once the product has been constructed, it is tested against its requirement specification to determine whether it properly solves the predetermined task and whether it produces any errors. There are many kinds of testing: unit testing, integration testing, system testing regression testing, smoke testing, etc. If any issues surface, the software is sent back to the developers for a fix.
Deployment is a step that involves setting the product up for delivery to the target audience. As simple as it sounds, it can take a considerable amount of time and resources depending on where the product is deployed. It can be as simple as uploading the software to a website for everyone to download, to preparing the app for a release in app stores, like Apple’s App Store or Google’s Google Play. Preparing for app store releases requires quite a lot of complimentary work: setting up and verifying an account in the distribution store, signing the app with a digital signature, filling in an application’s page, setting up the corresponding dependencies, etc.
Once the product has been released to the world, it has to be maintained. This includes providing support for the audience of the product, updating the app with fixes and updates, and retaining its availability. The level of a manufacturer’s engagement here varies: some products are released “as is”, which is the case with a lot of open-source software, while others can be supported within a certain service-level agreement, like it happens with a majority of Enterprise-level products.
While the aforementioned methodology looks like a set of one-way finite goals, it is not intended to be such. Usually, this set of steps is repeated in one way or another with every product update. SDLC is a very common and straightforward methodology that makes communication between all parties involved in the process of product development much easier and clearer.