Frontend Labs
⋯

SME gap analysis by domain

Domain 1 — Backend / distributed systems (largest gap)

  • No persistence anywhere. Every store (API keys, abuse counters, rate-limit buckets, ThreatIntel scores) is an in-memory map. No database/sql, no connection pooling, no transactions, no migrations, no N+1/exhaustion failure modes — the incidents that actually dominate backend on-call.
  • No gRPC/protobuf, despite HTTP/2 (its transport) being covered in depth in Week 9, and despite gRPC being explicitly named in target-domain scope.
  • No message queues / event-driven architecture — no idempotency-key patterns, no outbox pattern, no at-least-once delivery reasoning.
  • No real observability stack. expvar + hand-rolled ring-buffer tracing is taught as if it replaces Prometheus/OpenTelemetry rather than as a stepping stone toward them.
  • Testing culture arrives 81 days late. Weeks 1–11 build production-shaped code with zero _test.go files; Week 8 dedicates a full day to -race auditing with nothing to run -race against except func main().
  • ADR-003 (Week 16) explicitly chooses in-process sync.Map over Redis "because signals are ephemeral" — a deliberate, acknowledged gap that means the learner never touches a real distributed cache/coordination client.

Domain 2 — Infra / DevOps tooling

  • Kubernetes is consumer-only knowledge. Liveness/readiness/startup probes, SIGTERM drain semantics, and rollout behavior are referenced constantly as analogies — but there is no client-go, no controller-runtime, no CRDs, no informers/workqueues, no operator pattern anywhere in 120 days, despite this being one of three explicitly named target domains.
  • No CLI tooling (cobra/viper/pflag). Every tool is a bare main.go reading JSON files and OS signals, never a kubectl/docker-style CLI.
  • No containerization — no Dockerfile, multi-stage builds, or distroless images, even though "ships as one static binary" is a running theme that begs for a container story.
  • No IaC/GitOps — CI is described in prose ("require -race in CI") but never expressed as an actual pipeline file anywhere in the 17 weeks.

Domain 3 — High-performance / low-latency systems

  • Foundations exist (sync.Pool intro, pprof registration, atomics, ring buffers) but profiling is named far more than it's exercised — pprof is "served automatically" in checklists without a walked CPU/heap profile session in most weeks that mention it.
  • No GC/memory tuning (GOGC, GOMEMLIMIT, debug.SetGCPercent), no escape-analysis workflow (-gcflags=-m), no benchstat-driven optimization loop — benchmarking stays at raw ns/op/allocs/op numbers.
  • No lock-free/cache-conscious data-structure design beyond basic CAS loops in the token/leaky-bucket limiters — no false-sharing, cache-line padding, or GOMAXPROCS/scheduler-internals discussion.
  • The WAF (Week 10) is a real anti-pattern for a low-latency system: 5+ sequential regexes per request, no compiled multi-pattern matcher (Aho-Corasick), no before/after benchmark of WAF overhead despite a load-test tool being built specifically to measure it.
  • Everything stays at the net/http/stdlib-socket abstraction level — no SO_REUSEPORT, TCP_NODELAY, kernel buffer tuning, io_uring, or discussion of the microsecond-to-nanosecond budgets that trading/gaming SMEs live in. Week 16's own perf work measures the proxy at 100–500µs — a full order of magnitude looser than that floor.

Generated from real-world-projects-and-sme-gaps.md · 8 Oct 2026 16:36