The fastest way to know if a deployment is fundamentally broken — a quick sanity check that runs in minutes and gates every release.
Imagine you just built a car from scratch. Before selling it, what would you test?
Think about different scenarios:
Pause and think:
Would you test these all at once?
Would you test in a specific order?
What if you only had time for one test before the customer arrives?
Just like testing a car requires multiple approaches, software testing has different types for different purposes:
Smoke Testing:
"Does it turn on?"
Functional Testing:
"Does each feature work?"
Integration Testing:
"Do parts work together?"
System Testing:
"Does the complete system work?"
API Testing:
"Do the interfaces work correctly?"
E2E Testing:
"Can a user complete their journey?"
Stress Testing:
"What breaks it?"
Chaos Testing:
"Can it survive disasters?"
Key insight: No single test type is enough! You need a testing strategy that combines different approaches at different stages!
Before diving into each type, understand how they relate:

Mental model: Like building inspections:
Smoke testing (aka sanity testing) is the quickest, most basic check to verify the software isn't fundamentally broken.
Origin of the name: When hardware engineers power on a circuit board, they check if smoke comes out. No smoke = safe to proceed with more tests!

Like checking a house before showing it to buyers:
Quick 5-minute walkthrough:
✓ Does the front door open?
✓ Do lights turn on?
✓ Is there electricity?
✓ Does water run?
If YES →
Show the house
If NO →
Fix critical issues first!
Smoke Test Suite (runs in 2 minutes):
If ALL pass → Deploy to QA environment If ANY fail → Roll back immediately!
Critical path smoke tests:
□ Homepage loads
□ Search works
□ Product page displays
□ Add to cart functions
□ Checkout button appears
If these fail, nothing else matters!
Development Pipeline:
Code Commit
Build
[Smoke Tests]
Pass? → Full Test Suite
↓
FAIL
↓
Notify developer immediately!
Don't waste time on broken build
Key characteristics: