Back to Blog
December 7, 2024Process

Dev, QA, and Prod: Understanding Environment Lifecycle

If you've ever wondered why developers talk about "pushing to staging" or "deploying to prod," you're not alone. The concept of separate environments is fundamental to professional software development, but it's often mystifying to those outside engineering.

Why Multiple Environments?

Imagine if every code change went directly to the system your customers use. A typo could crash your website. An untested feature could corrupt data. A bug could leak sensitive information.

Multiple environments create a safety net. Code moves through increasingly realistic testing stages before reaching users. Problems get caught early when they're cheap to fix.

The Cost of Bugs
A bug caught in development costs $100 to fix. The same bug caught in production costs $10,000 or more. Multiple environments exist to catch bugs early.

The Three Core Environments

Development (Dev)

The development environment is the engineer's playground. It's where code is written, tested, and iterated upon. Features get built here.

Characteristics: - Isolated: Each developer might have their own instance - Flexible: Can be reset, rebuilt, filled with test data - Unstable: Broken code is expected and acceptable - Not secure: Often uses dummy credentials and test data

Development environments prioritize speed over stability. Breaking things is part of the process.

QA / UAT (Staging)

QA (Quality Assurance) or UAT (User Acceptance Testing) sits between development and production. This is where code gets serious testing before going live.

Different names, similar purpose: - QA: Typically where the quality team tests functionality - UAT: Where business users verify the system meets requirements - Staging: A production-like environment for final validation

Characteristics: - Shared: Used by the whole team - Stable: Should generally be working - Production-like: Similar configuration to prod - Test data: Realistic but not real customer data

This is where you find out if something actually works before customers see it.

Production (Prod)

Production is the real deal. This is what customers use, where real transactions happen, where data matters.

Characteristics: - Sacred: Changes require approval and caution - Monitored: Everything is logged and watched - Backed up: Data is protected - Performant: Optimized for real workloads

The rule is simple: don't break prod.

DEVBuild & TestQA/UATVerify & ValidatePRODLive SystemCode writtenTested thoroughlyUsers interact

The Deployment Pipeline

Code moves through environments in a specific flow:

1. Developer writes code in their local or dev environment

2. Code review - Peers check the work

3. Merge to shared dev - Code joins other changes

4. Deploy to QA - Testing begins in earnest

5. QA testing - Functionality, regression, edge cases

6. UAT approval - Business stakeholders sign off

7. Deploy to production - Goes live to users

8. Monitor - Watch for issues

Each step adds confidence. By the time code reaches production, it's been reviewed by humans and tested by both automated systems and real users.

Data Considerations

Environments need data to test against, but production data is sensitive. Common approaches:

Synthetic data: Fake but realistic data generated for testing

Anonymized data: Production data with personal info scrubbed

Subset data: A small sample of production data

Production mirrors: Full copies for performance testing (careful with compliance)

Never put real customer data in development environments without proper anonymization.

Common Mistakes

Testing in production. "It works on my machine" isn't good enough. Test properly.

QA that's nothing like prod. If QA uses different configurations, you're not testing what will actually run.

Skipping environments under pressure. "Just this once" becomes "always." Resist.

No environment parity. Dev, QA, and prod should run the same software versions, not just similar.

Manual deployments. Automation reduces human error. Same process, every time.

For Data Specifically

Data teams need environments too. Your ETL pipeline, your dashboards, your ML models - they all need a place to be tested.

Dev databases: Where you build and test transformations

QA data warehouse: Where stakeholders validate reports

Production warehouse: What drives actual business decisions

Changes to data transformations should go through the same rigor as code changes. A bad transformation in production can corrupt reports that drive million-dollar decisions.

Getting Started

If you don't have separate environments yet:

1. Start with production (you probably already have this) 2. Add a staging/QA environment that mirrors production 3. Add development environments as team grows 4. Automate deployment between environments

You don't need expensive infrastructure. Cloud platforms make it easy to spin up temporary environments. The key is discipline, not dollars.

Environment management connects to Agile practices and helps prevent technical debt.

---

Sources: - Atlassian: Types of Software Testing - AWS: Software Development Lifecycle - IBM: Software Development Environments

Ready to Talk Data Strategy?

Let's discuss how we can help with your data challenges.

Book a Call