Capstone reflection

Take a minute to zoom out. You started with a CLI that parsed a JSON file. You end with a layered, tested, event-driven, containerized, rate-limited, observable, contract-tested backend. Every module solved one real problem the last module introduced. Nothing was added for decoration.

The shape you built is the shape every modern backend in production follows: controllers at the edge, use cases in the middle, pure domain functions at the core, repositories at the data layer, a queue for async work, a cache for hot reads, websockets for push, structured logs, health checks, a published contract, and a release pipeline with canaries and rollback. Every company that ships a product like this is running some variation of it.

This workshop is portfolio gold, if you treat it like one. Push your solution to a GitHub repo with a README that explains each module. Link to it on your resume. When an interviewer asks you to walk through a backend you have built, point at this repo and walk them through the layers, the tradeoffs, and the decisions. That is the conversation that gets engineers promoted.

Quiz: Quiz

Loading practice…

Two release habits round out the picture before the final checkpoint. First, semantic versioning: a version number like 2.4.1 is a promise to consumers. Bump the patch for bug fixes, the minor for additive backwards-compatible changes, and the major for anything that breaks an existing consumer, like removing a response field. This is the same contract thinking behind the /api/v1 prefix in your URLs, expressed as a number. Second, the changelog: automated release notes list what changed commit by commit, but a hand-maintained CHANGELOG.md tells humans why it matters and how to migrate. Ship both. Operators and API consumers read the changelog, tools read the version.

Checkpoint: Release engineering checkpoint

Loading practice…