Skip to content

Monthly Review — Month 6: Production, Observability & Capstone

Journal index · Roadmap › this month · Release notes

🎬 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.0repo 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.Pool effort; 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.Cleanup vs defer; //go:build tag 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)"