Platform operators
Needed a safe way to manage membership, see health, and know which actions were valid for each state.
Systems product design · 2026
Making a stateful infrastructure workflow understandable at a glance—without exposing users to the complexity underneath.
Confidentiality note. This case study recreates the product thinking with abstracted visuals. It contains no internal source code, customer data, or proprietary architecture.
Customers needed to rotate and manage multiple Certificate Authorities without changing their applications or interrupting certificate issuance.
The hard part was not only routing traffic. Operators also needed to understand which authorities were available, what would happen during a transition, and how to recover safely when a member was unhealthy.
How might we make a complex pool feel predictable enough that an operator can rotate infrastructure with confidence?
Needed a safe way to manage membership, see health, and know which actions were valid for each state.
Needed one stable endpoint so backend rotations would not force application configuration changes.
Needed observable transitions, explicit failures, and testable behavior across the console and service.
I treated reliability as part of the user experience. The interface had to communicate system behavior before an operator committed to a change.
I translated backend pool behavior into a task model: create a pool, add authorities, choose eligible members, rotate safely, and understand failures.
Active, draining, and disabled became visible product states. Each state explained what the system could do and which operator actions remained available.
A single issuance endpoint kept applications independent from individual Certificate Authorities. Console workflows called the same lifecycle APIs.
RDE, integration, and end-to-end tests exercised state transitions, unhealthy members, failover, and rotation without interrupting issuance.
What is healthy? Where will the next request go? What can I do next without creating downtime?
Pool membership was modeled as a small state system. The console used the same model to make routing behavior and available actions predictable.
The console could only feel trustworthy if its labels and actions matched real system behavior. I validated the complete workflow instead of treating the interface and backend as separate pieces.
Lifecycle coverageCreate, update, describe, list, and delete pool workflows.
Transition coverageActive-to-draining and draining-to-disabled behavior.
Failure coverageUnhealthy members, invalid actions, and failover paths.
End-to-end coverageConsole action through API response and final pool state.
The final system combined one issuance endpoint, explicit member states, console lifecycle workflows, and tested recovery paths. Applications stayed insulated from backend rotation while operators gained a clearer view of what the pool would do next.
Backend states become useful only when users can connect them to consequences and next actions.
Loading, recovery, invalid actions, and failure paths deserve the same design attention as the happy path.
Connecting the console to real APIs exposed assumptions early and kept the interface grounded in actual system behavior.