SDLC
Software Development Lifecycle
By, Akash Mehta, Co-Founder, Apice Tech
  • May 19, 2022

Before we begin, I assume that some people would come here to take their first steps into the world of Software Development. While you were researching what you need for building your first golden goose of an app, you came across the term Software Development Lifecycle or SDLC.

Let me break it down for you, as in Physics, terminology in software development is often right on the nose. For example, a Blackhole is literally a "Black" hole, a Neutron Star is made of highly condensed Neutrons, etc. Similarly, the Software Development Lifecycle is literally the different stages your software goes through from its ill-fated conception to its untimely deployment (puns intended).

The five stages of SDLC

1) Planning

Ironically, the life of your software development starts with planning all the following stages. It's much like figuring out how your 1-day old baby will pay for its college loan down the line. It's often inaccurate and doesn't account for your child's propensity to drop out of high school and become a rock star.

During planning, you must sit down with your team and stakeholders to evaluate requirements. You need to figure out all the minutia, including how much time and labour it will take to make this, which features are the most important, what will be the user flow, and finalize the high-level architecture for your product.

Here are the problems that commonly arise during the planning stage:

ProblemExplanation
Misunderstanding of requirements and changing requirements from clientClients rarely know the entire picture of what they want. And even if they do, not everyone can communicate their requirements clearly and completely. You might spend a month after the first feedback creating the product, but end up with something the client never wanted in the first place
The software team has no client interactionYour software team is the one that is building your application, but they are usually never the ones who talk to your client. It's a minefield of misunderstandings and miscommunications that leads to an explosion at every step you take.
Client Feedback is not handled properlyThe client is the boss, so if they say something has to change, logically you should do it. But many times, the feedback gets buried in busy work, forgotten comments, and miscommunications.

2) Development

This stage is the mother of all future trauma. It can be very enjoyable watching your newborn go through teething, scraping knees, underage drinking, and finally becoming big enough to go out into the world as a bright-eyed member of society. But this stage can also end up giving you a punk-haired Emo who goes around breaking the law because you didn't give it enough attention.

During development, your team builds the actual product. This is where code is written, architecture decisions are made, and dependencies are integrated. Strong communication, code reviews, and unit testing during this phase prevent massive headaches later.

Development comes with its own set of challenges:

ProblemExplanation
Inconsistencies due to lack of reviewsA person's way of coding is like a fingerprint, everyone is different. This can lead to software code that is difficult to read and buggy. Reviews help bring conformity to the code, while also catching mistakes at a very early stage.
While amending features of the code, unwanted changes might cascade to a lot of higher levelsFor example, if you change the Date format in one part of your code from mm/dd/yyyy to dd/mm/yyyy without telling the rest of your code about it, some other part of your code might start looking for the 25th month of the year!
Unit Testing is incomplete/missingUnit Testing is the responsibility of the developer. It's the most basic testing suite written in parallel to development and helps maintain a basic bug-free setting for each function. In simpler terms, if you are making a chair, at least test it by sitting on it once to make sure it doesn't break. Unfortunately, it's a very boring and time-consuming task that most developers try to avoid doing.
Duplicate work due to work allocation confusionIf you decide to allocate work to your team without properly documenting it, you might end up having two people making the same function, and you having to face the difficult decision of choosing who gets the symbolic lollipop, and whose work gets thrown out like moldy leftovers.

3) Testing

The stage your software gets figuratively punched in the gut by the experiences of growing up. It can be painful, but if you did your job right, not that bad and might even help shine your diamond in the rough.

Testing is one of the most important factors that decide the quality of your software. Your testing team works to catch vulnerabilities, edge cases, and input errors. Every test case matters. Bugs that evade testing can have serious consequences downstream.

Testing brings with it a host of complications:

ProblemExplanation
Inadequate testingTesting is not as simple as "put a name in a date column". It is an extensive list of concepts that deal with every eventuality that could hit your software in the development environment. The number of scenarios that can happen is so extensive that even Giants like Google, Facebook, and Amazon aren't free of bugs and down-times.
Complete absence of automationTesting is expensive, time-consuming, and repetitive. And as with all repetitive and time-consuming tasks, automation is the only answer.
Security Issues arise at the testers' endWhile in development, the code is rarely checked for security vulnerabilities, which means that even an update to a third-party library could introduce a security vulnerability that goes unchecked till a tester gets to it.
Multiple testing tools become confusingThere are dozens of testing tools that can be used by your team to implement the complete testing of your application. Running each one, collating the results, and gathering a complete picture is tough, to say the least.
Changes in testing requirements can cause false negativesChanges in development can often cause a change in the testing requirements. These changes need to be communicated to the testing teams, otherwise, a perfectly working code could be flagged as broken.

4) Deployment

It's finally time, your child is all grown up, lived a life, got shaped by society, and had no kids because all software is inherently sterile. It's never the right time, and you don't want to let go, but when the grim reaper (your client) comes calling, you can never say no.

Deployment is the whole reason your software exists. If deployment is manual or inconsistent, the risk is high. Automating releases keeps quality and speed aligned, and reduces the chance of human error during the handoff to production.

Deployment has its own set of critical issues:

ProblemExplanation
Application deployment to environments is cumbersomeDeployment Environments are basically different deployment steps an application goes through with the final step being deployed to production. Most companies follow a DEV → TEST → QA → PROD sequence. Keeping track of what code goes where; when is it to be released; are there any special steps involved; etc. requires a lot of attention to detail and becomes cumbersome to deal with.
Human errorMost mistakes in your SDLC, like with anything else, can usually be traced back to human error. Forgetting an environment variable, misreading the version number, or even forgetting the date, any of these can be the reason for failure.
Incompatible environmentThis error is usually for those softwares that don't operate on some form of containerization like Docker or Kubernetes. Unless exhaustively tested for every foreseeable environment, your application might just break for an unknown reason due to a stray library installed in the server.
Changes in testing requirements can cause failure to launchSimilar to the Testing Problem, if the Dev team adds an environment variable that doesn't get communicated to the Deployment team, you might end up with failures that could have easily been avoided.

5) Monitoring and Iteration

Did I say your software is like a child? Well, unfortunately, it's time to step outside of the metaphor, because, it's not. Unwanted or not, for most of us, the software development lifecycle is a never-ending cycle of reincarnation, where your deployed software is but the beginning of the next iteration when you start from stage 1 with new requirements.

Real products live in the wild. Monitoring helps you learn from users, and iteration keeps the product relevant. Every release is just the start of the next cycle. Proper monitoring ensures you catch issues before users complain, and metrics guide your product roadmap.

Monitoring and Updates

The gears must turn together

This is not to say that there are only 5 stages, some say it's 4 others say it's 7. But more or less they all boil down to adding an appendage or two to the ones mentioned above.

The point is, that implementing an effective SDLC is a major task. It takes a lot of patience to set up, but is almost always worth it. If the SDLC feels overwhelming, start by stabilizing one stage at a time. A small improvement in planning or testing often unlocks bigger gains downstream.

What can go wrong?

Poor planning leads to scope creep and missed timelines. Weak communication during development causes duplicate work and integration issues. Insufficient testing means bugs reach production. Manual deployments introduce human error. And without monitoring, you won't know about problems until your users complain.

The gears of the SDLC must turn together. If any gear slips, everything slows down. If they work together, your team ships with confidence.

"The gears of the SDLC must turn together. If any gear slips, everything slows down. If they work together, your team ships with confidence."

Drop Us a Line

Let's Connect?

Happy to connect with you. Our team is excited to start this journey with you. Please, enter your details and we will get back to you within 2 business days.

Enter your details!