Stability checklist
A Stability level says in one word how stable something is. This checklist shows what's behind that word: for each area, such as tests or security, what should be in place at each level. Clients and engineers read the same list, so both sides expect the same thing.
The checklist is what we aim for, not a gate. Every item checked is the ideal. When an item applies and isn't checked, we say so, so you can judge the risk.
Moving through the levels keeps us from spending time hardening something before we know it solves the right problem, in the right way. That's why most of the checklist arrives at Beta and GA.
- The client sees and tries the work at every level. As a rule of thumb, at least once per level, and usually several times as it changes.
- Don't go past Beta on a guess. Before GA, we should be highly confident, from the client's own use, that it solves the right problem in the right way.
Frequent client feedback is the key. It tells us when to move up, when to change direction, and when to stop. Moving between levels has an example.
The checklist
Choose how to view it, then show everything or pick one:
- By category shows each category, such as Safe, with what its sub categories need at each level.
- By stability level shows everything that should be in place at a level, such as Beta.
- By sub category shows a sub category, such as Tests, at each level.
Each level's list is complete on its own, including what carries over from the levels below. Hover over a sub category for why it matters.
The security and privacy baseline, and the commercial rules, hold at every level, which is why the security items start at Prototype. GA adds reviews and hardening on top.
- By category
- By stability level
- By sub category
Works correctly
| Prototype | Tests
Edge cases and errors
Data and migrations
Performance
|
|---|---|
| Alpha | Tests
Edge cases and errors
Data and migrations
Performance
|
| Beta | Tests
Edge cases and errors
Data and migrations
Performance
|
| GA | Tests
Edge cases and errors
Data and migrations
Performance
|
Safe
| Prototype | Security and privacy
Dependencies and integrationsNothing required yet. |
|---|---|
| Alpha | Security and privacy
Dependencies and integrations
|
| Beta | Security and privacy
Dependencies and integrations
|
| GA | Security and privacy
Dependencies and integrations
|
Runs in production
| Prototype | Logs, traces, and metricsNothing required yet. Monitoring and alertingNothing required yet. Release and rollback
Support and fixesNothing required yet. |
|---|---|
| Alpha | Logs, traces, and metrics
Monitoring and alertingNothing required yet. Release and rollback
Support and fixes
|
| Beta | Logs, traces, and metrics
Monitoring and alerting
Release and rollback
Support and fixes
|
| GA | Logs, traces, and metrics
Monitoring and alerting
Release and rollback
Support and fixes
|
Usable and lasting
| Prototype | User experience
Documentation
Code and maintainability
Breaking changesNothing required yet. |
|---|---|
| Alpha | User experience
Documentation
Code and maintainability
Breaking changes
|
| Beta | User experience
Documentation
Code and maintainability
Breaking changes
|
| GA | User experience
Documentation
Code and maintainability
Breaking changes
|
PrototypeExploratory
Works correctly
| Tests |
|
|---|---|
| Edge cases and errors |
|
| Data and migrations |
|
| Performance |
|
Safe
| Security and privacy |
|
|---|---|
| Dependencies and integrations | Nothing required yet. |
Runs in production
| Logs, traces, and metrics | Nothing required yet. |
|---|---|
| Monitoring and alerting | Nothing required yet. |
| Release and rollback |
|
| Support and fixes | Nothing required yet. |
Usable and lasting
| User experience |
|
|---|---|
| Documentation |
|
| Code and maintainability |
|
| Breaking changes | Nothing required yet. |
AlphaUnstable
Works correctly
| Tests |
|
|---|---|
| Edge cases and errors |
|
| Data and migrations |
|
| Performance |
|
Safe
| Security and privacy |
|
|---|---|
| Dependencies and integrations |
|
Runs in production
| Logs, traces, and metrics |
|
|---|---|
| Monitoring and alerting | Nothing required yet. |
| Release and rollback |
|
| Support and fixes |
|
Usable and lasting
| User experience |
|
|---|---|
| Documentation |
|
| Code and maintainability |
|
| Breaking changes |
|
BetaApproaching stability
Works correctly
| Tests |
|
|---|---|
| Edge cases and errors |
|
| Data and migrations |
|
| Performance |
|
Safe
| Security and privacy |
|
|---|---|
| Dependencies and integrations |
|
Runs in production
| Logs, traces, and metrics |
|
|---|---|
| Monitoring and alerting |
|
| Release and rollback |
|
| Support and fixes |
|
Usable and lasting
| User experience |
|
|---|---|
| Documentation |
|
| Code and maintainability |
|
| Breaking changes |
|
GAStable
Works correctly
| Tests |
|
|---|---|
| Edge cases and errors |
|
| Data and migrations |
|
| Performance |
|
Safe
| Security and privacy |
|
|---|---|
| Dependencies and integrations |
|
Runs in production
| Logs, traces, and metrics |
|
|---|---|
| Monitoring and alerting |
|
| Release and rollback |
|
| Support and fixes |
|
Usable and lasting
| User experience |
|
|---|---|
| Documentation |
|
| Code and maintainability |
|
| Breaking changes |
|
Works correctly
Tests
What's been checked, and what keeps it from breaking again.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Edge cases and errors
What happens with unusual input, and when something goes wrong.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Data and migrations
Your data stays correct, and can be recovered if something goes wrong.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Performance
It's fast enough for the work, today and at peak.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Safe
Security and privacy
Your systems and data are protected the same way at every level.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Dependencies and integrations
What it relies on, and what happens when those things change or fail.
| Prototype | Nothing required yet. |
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Runs in production
Logs, traces, and metrics
When something goes wrong, we can see what happened and why.
| Prototype | Nothing required yet. |
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Monitoring and alerting
We find out something is wrong before your users tell us.
| Prototype | Nothing required yet. |
|---|---|
| Alpha | Nothing required yet. |
| Beta |
|
| GA |
|
Release and rollback
How it reaches your users, and how quickly it can be undone.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Support and fixes
What happens when it breaks, and how fast.
| Prototype | Nothing required yet. |
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Usable and lasting
User experience
The people using it can get their work done, without surprises.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Documentation
You, your users, and the next engineer can use, run, and change it without asking the author.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Code and maintainability
It can keep changing, by any engineer, without getting harder to change.
| Prototype |
|
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
Breaking changes
What you build on it keeps working, or you hear first.
| Prototype | Nothing required yet. |
|---|---|
| Alpha |
|
| Beta |
|
| GA |
|
To change an item, propose an edit to src/data/stability-checklist.ts. The checklist on this page is generated from it.
Frequently asked questions
Does every item have to be checked before something is called a level?
No. Checking every item is what we aim for, not a requirement. When an item that applies isn't checked, the engineer says so. The exception is the security and privacy baseline, which holds at every level.
What does Beta not include?
View the checklist by stability level and compare Beta with GA. In short: alerts, end-to-end traces, tested restores, a runbook, and the promise that breaking changes only come in a new version. Those come with GA.
Why does a GA feature need GA dependencies?
A feature is only as stable as what it relies on. A GA report built on a beta API can break when that API changes, however carefully the report was built.
What do traces give us that logs don't?
Logs say what happened in one place. A trace follows one request through every service, query, and external call, with how long each step took, so it shows where something slow or broken went wrong.
Who operates the alerts a GA feature needs?
Whoever operates production. On Exalynt Managed, that's Exalynt. On Self Managed, alerts go to the client's team.