Day 10 - Environments
Or What my engineer means when she says: "Can you test it on Staging before I deploy it to Production?"
Or What my engineer means when she says:
Can you test it on Staging before I deploy it to Production?
We covered Git, Microservices, and DevOps. Let's add one more related concept on your journey to be a #hackerpm!
Welcome to software development environments.
Why different environments?
Between the development of software on an engineering laptop (the local environment) to the hands of users (the production environment), there are several more stages with slightly different purposes to ensure the code that is written on the "local machine" fully satisfies the requirements without breaking any other part of the product.
The most common environments in a software development lifecycle are:
Development environment
Testing environment
Staging environment
Production environment
Let's go through them one by one.
⚠️ Disclaimer: Different companies, depending on their need and restrictions might have a slightly different implementation of each environment or completely skip one.
Development Environment
The development environment is the first environment the code engineers have developed on their local machine deployed to and tested.
It's also used for:
Feature previews
Collaboration
Proof of concept for a technical implementation/library
Usually, the development environment has only dummy data and is also more open to engineers to build, deploy, and test changes independently, without waiting for someone's approval.
Testing Environment
A testing environment is where the QA team can use a variety of testing tools to run all their different tests over the application code taken from the development environment. While developers check their code for simple bugs before passing it for quality assurance, QA engineers execute more complex and time-consuming types of tests to check the compatibility of the new and old code, the correct integration of different modules, the system’s performance, etc. Types of testing that can be done in this environment are:
functional testing
integration testing
performance testing
load testing
Staging Environment
In an ideal world, a staging environment is an identical replica of the customer’s production environment, which also typically contains real production data that’s been sanitized for safety purposes. It is hosted in the same way as the production servers and involves identical setup and update operations. Therefore, testing on a staging environment offers the most reliable way to check code quality and ensure the production servers are successful.
Another name for Staging Environment is Pre-Prod Environment.
Production Environment
The production environment is the final environment in your software development process. It is the work that is ready to be publicly available, and only the most thoroughly tested code should end up here.
It's what your users see and interact with. But there are some methods to test features, especially if you want to release a very big feature or validate the need for a feature, such as Feature Flags. More on that in the coming days!
Summary
⚠️ Disclaimer: Different companies, depending on their need and restrictions might have a slightly different implementation of each environment or completely skip one.