Monthly Review — Month 6: Production, Observability & Capstone¶
🎬 Headline¶
I can take a Go service from an empty directory to a documented, observable, tested, containerized REST+gRPC application — and I proved it by building and shipping the linkr capstone, tagged v1.0.0 (graduation).
🛠️ Skills Acquired¶
| Skill | Confidence (1-5) | Evidence (link) |
|---|---|---|
Structured logging with log/slog |
4 | examples/month-06/slog · [[day-141]] |
| Metrics (RED) + distributed tracing (W3C trace-context) | 3 | examples/month-06/tracecontext · [[day-142]] [[day-143]] |
| Health probes + correlation IDs | 4 | examples/month-06/healthcheck · [[day-144]] [[day-145]] |
| Packaging: multi-stage/distroless images, CI | 4 | [[day-148]]–[[day-151]] |
| 12-factor config, secrets, graceful shutdown | 4 | examples/month-06/graceful · [[day-152]] [[day-153]] |
Profiling, escape analysis, sync.Pool, rate limiting |
3 | examples/month-06/ratelimit · [[day-155]]–[[day-160]] |
| Ports-and-adapters architecture / dependency inversion | 4 | examples/month-06/architecture · [[day-162]] |
| REST (Go 1.22 routing/chi) + gRPC transports | 3 | examples/month-06/restapi · [[day-163]] |
| Persistence (pgx) + cache-aside (Redis) | 3 | examples/month-06/cacheaside · [[day-164]] |
| Integration testing (testcontainers + httptest) | 3 | [[day-166]] |
| Docs, ADRs, release/versioning | 4 | [[day-167]] [[day-168]] |
📦 Projects Completed¶
- linkr — a production URL shortener: REST+gRPC over a shared service, Postgres source-of-truth behind a repository port, Redis cache-aside, slog/metrics/traces stitched by one correlation id, distroless image with liveness/readiness + graceful shutdown, a unit→integration test pyramid, README/ADRs/OpenAPI, tagged
v1.0.0— repo path · key learning: the whole month composes — layering makes observability and deploy bolt on as middleware.
💡 Lessons Learned¶
- Architecture is arrow-direction discipline: the core depends on interfaces it owns, never on infrastructure. That single rule made everything else (testing, swapping adapters, adding a second transport) cheap.
- Observability, config, and shutdown are cross-cutting — they attach as middleware/lifecycle hooks and don't belong in business logic.
- Performance work (Month 6 Week 3) is measure-first: escape analysis and pprof tell you where to spend
sync.Pooleffort; guessing wastes it. - Caching is easy to add and easy to get wrong; correctness lives on the write/invalidation side.
- Shipping is its own skill set: a tiny hardened image, real health semantics, CI gates, and a clean release tag are what separate "compiles" from "runs in production."
📉 Areas for Improvement¶
- Real load-test numbers (p99, throughput, cache hit-rate) for linkr — reasoned about, not yet measured.
- gRPC interceptors and streaming RPCs — lighter coverage than the HTTP side.
- Trace sampling at scale (tail-based) and Prometheus exemplars.
🔁 Concepts to Keep Reviewing (carry into spaced repetition)¶
- Liveness vs readiness vs startup probes and what each failure triggers.
- Cache-aside read path + write invalidation; never cache failures.
- Mapping a neutral sentinel error to per-transport status codes.
t.Cleanupvsdefer;//go:buildtag syntax (blank line gotcha).- Static binary → distroless → SIGTERM drain lifecycle.
🧑💼 Interview Readiness¶
| Area | Ready? | Notes |
|---|---|---|
| Language fundamentals | ✅ | Months 1–2: types, interfaces, errors, generics solid. |
| Concurrency | ✅ | Goroutines, channels, context, race-tested code; could rehearse advanced patterns. |
| Web/DB | ✅ | REST+gRPC, pgx, cache-aside, migrations — all exercised in the capstone. |
| Observability & production | ✅ | slog, metrics, tracing, health, graceful shutdown, Docker/CI demonstrably done. |
| System design (small) | 🟨 | Can design & justify a service via ADRs; want more practice at larger scale + numbers. |
🎒 Portfolio Updates¶
- Updated project README + a scripted
make demo(and screenshots of the dashboard). - New résumé bullet: "Designed and shipped a production-grade Go URL shortener (REST+gRPC, Postgres, Redis cache-aside, slog/Prometheus/OpenTelemetry observability, Docker/CI), released v1.0.0 with ADRs and an integration test suite."
- Pinned/featured: linkr as the flagship repo; 4 ADRs document the key decisions.
- Tagged release
v1.0.0+ wrote release notes (graduation milestone).
📊 Metrics¶
| Total hours | Days completed | Exercises | Projects | Books/articles | Avg confidence |
|---|---|---|---|---|---|
| 38 | 28/28 | 11 | 1 (capstone) | 18 | 3.5/5 |
⏭️ Next Month Preview¶
The structured roadmap graduates here at v1.0.0. "Month 7" is self-directed: maintain the spaced-repetition deck, harden linkr with real load-test numbers and gRPC interceptors, ship a v1.1.0 (vanity codes + analytics), and make a first open-source contribution applying these production patterns.
Suggested commit: docs(journal): month 6 review then git tag -a v1.0.0 -m "Month 6 complete — linkr capstone (graduation)"