Hard Gates & Signals¶
This file exists because the seven-rung ladder is not a menu. Two of the rungs are load-bearing in a way the others are not — miss them and the whole 13-month positioning collapses back to “generic C developer,” a market where you have ~100x more competition than in the niches this roadmap is aimed at. This document names those two rungs, states the reset protocol when they slip, and maps every rung to the specific signal it sends and the specific opportunity it unlocks.
Read this file at three moments: at the start of the year (to internalize the gates), at the end of M8 (to check Rung 5 is on trajectory), and at the end of M10 (to check Rung 6 is on trajectory). Do not read it once and file it away.
The Two Hard Gates (non-negotiable)¶
🟧 HARD GATE #1 — Rung 5 (epoll HTTP/1.1 server) must be publicly shipped by end of M9.
Public repo, benchmark graph in README, blog post published, ≥ 100k RPS reproducible from
bench/run.sh, 24h soak plot committed. All of it. By 2027-03-31.
🟧 HARD GATE #2 — Rung 6 (SIMD GEMM benchmark) must be publicly shipped by end of M11.
Public repo, roofline plot, writeup ≥ 2000 words, within 3x of OpenBLAS on documented sizes. All of it. By 2027-05-31.
Everything else on the ladder is a strong recommendation with a target month. These two are the load-bearing walls.
The “If Only Two Things Ship” Clause¶
Life happens. Your job intensifies. A family emergency swallows six weeks. A relationship changes. You catch COVID for the second time. If — despite the discipline of 13_discipline/ — you arrive at M9 and know only two rungs can ship in the remaining time, those two must be Rung 5 and Rung 6.
Not Rung 3 (NeetCode). Not Rung 7 (OSS PR).
The reason is arithmetic. Rungs 5 and 6 are the two rungs that unlock unique markets: high-performance networking (Rung 5) and ML inference (Rung 6). Every other rung is a supporting signal — desirable but replaceable. A candidate with Rung 5 + Rung 6 shipped is rare in the Indian C hiring market and legible in the global one. A candidate with Rungs 1-4 + Rung 7 but no 5/6 is a well-organized junior; the market has thousands of those.
If you are cutting scope, cut from the top and the bottom of the ladder, not from the middle. In order of what to sacrifice first:
Rung 7 (drop to “opened PR, review pending” if merge doesn’t land)
Rung 3 (drop from 75 to 40 problems, keep the harder half)
Rung 4 (drop signal handling depth; ship a simpler shell)
Rung 2 (drop to 3 data structures instead of 5)
Rung 1 (do NOT drop — it’s cheap and sets the year’s cadence)
Rungs 5 and 6 are not on this list. They cannot be cut.
Reset Protocol — When a Hard Gate Slips¶
Reset does not mean “give up.” Reset means “acknowledge reality, reallocate, ship.”
If M9 closes without Rung 5 shipped:
Do not attempt Rung 6 in M10. Reallocate M10 entirely to finishing Rung 5. This is the invocation.
Open the tracking issue in
13_discipline/and log the slip: what stopped you (technical, time, motivation), on what date, in what state.Descope Rung 5 to the minimum that clears the acceptance criteria: single-threaded, no io_uring variant, no pipelining stretch. 100k RPS + 24h soak + blog is still non-negotiable. Everything optional gets cut.
Push Rung 6 into M11-M12. Push Rung 7 into a stretch M13-M14. Accept the ladder has slipped one month and do not slip further.
If Rung 5 does not ship by end of M10, the 13-month arc has failed as a systems-role positioning play. Pivot the M13 pitch sentence — drop “multi-threaded network services” from it, keep only the ML-infra half, and race to make Rung 6 spectacular.
If M11 closes without Rung 6 shipped:
Reallocate M12 entirely to Rung 6. Rung 7 is deferred or dropped.
Descope Rung 6: pick ONE target platform (x86 XOR ARM), drop the register-blocking stretch, keep the 3x-of-OpenBLAS goal.
If Rung 6 does not ship by end of M12, the year’s ML-infra positioning has failed. The M13 pitch sentence loses its most valuable clause. Rung 7 should still ship — the OSS-PR credibility becomes the year’s headline instead.
In both cases: the reset protocol is loud. You post a LinkedIn update naming the slip and the recovery plan. That post is itself an artifact — it signals maturity to a hiring manager who has watched engineers hide their slippage. Do not hide it.
The Signal Table — Rung → Recruiter Signal → Opportunity Unlocked¶
Every rung sends a specific signal to a specific reader. This table is what a recruiter actually reads when scanning your GitHub for 90 seconds. Memorize it.
Rung |
What ships |
Signal to hiring manager |
Opportunity unlocked |
|---|---|---|---|
1 — Toolchain Journal |
Public repo M1 |
“Ships from week 1; reasons about tools” |
Nothing yet — inoculates against ‘never finishes’ pattern |
2 — libprep |
Small C library M3 |
“Can design an API; ownership & testing discipline” |
Small C libraries at product companies; hobbyist community credibility |
3 — NeetCode-75 in C |
75 problems M5 |
“DSA in C is routine; doesn’t reach for Python” |
study loops that use C-style whiteboarding |
4 — Mini-Shell |
Working shell M7 |
“Understands Unix process model” |
Container runtime, init system, build tool, process supervisor roles |
5 — epoll HTTP 🟧 |
100k RPS server M9 |
“Can build concurrency substrate of a real service” |
Cloudflare, Fastly, Neon, Redis-adjacent, networking infra roles |
6 — SIMD GEMM 🟧 |
Benchmark writeup M11 |
“Thinks like an inference-engine engineer” |
Nvidia inference, llama.cpp/ggml, Modal, Replicate, Groq, Sarvam, Krutrim, Zoho AI infra |
7 — Merged OSS PR |
PR + writeup M13 |
“Ships alongside senior maintainers” |
Senior-adjacent systems roles; the closing signal on the arc |
The two bold rows are the gates. They are the two rows where the “opportunity unlocked” column names actual companies, not job families. That specificity is what a gate buys you.
The M13 Pitch Sentence — Mapped to Rungs¶
The north-star pitch you began this roadmap with is:
“I write C that ships in production — from SIMD-accelerated ML inference kernels to multi-threaded network services — and I can debug someone else’s segfault at 2 AM without flinching.”
This is not a slogan. Every clause has a rung backing it. Every clause is falsifiable: if a rung didn’t ship, the corresponding clause is a lie you cannot defend.
Clause of the M13 pitch |
Rung that earns the right to say it |
|---|---|
“I write C that ships in production” |
Rung 7 (merged PR proves “ships”) |
“SIMD-accelerated ML inference kernels” |
Rung 6 (SIMD GEMM) — the ML-infra clause |
“multi-threaded network services” |
Rung 5 (epoll HTTP server) — the systems clause |
“I can debug someone else’s segfault” |
Rung 7 (reading unfamiliar code + Rung 1’s gdb muscle) |
“at 2 AM without flinching” |
Rung 4 (signals, zombies, race conditions) + Rung 1 (toolchain fluency) |
Notice: Rungs 5 and 6 each earn a distinct clause of the pitch. Rungs 1, 4, and 7 combine to earn the “debug at 2 AM” clause. Rungs 2 and 3 do not appear here directly — they are the supporting mass that makes the pitch defensible when a skeptic pokes at it, but they don’t earn their own clause.
If Rung 5 is missing at M13, delete “multi-threaded network services” from your pitch. If Rung 6 is missing, delete “SIMD-accelerated ML inference kernels.” The pitch is a bank account — every rung is a deposit, and you cannot spend money you didn’t deposit.
Halfway-Point Check (end of M6)¶
At the end of M6 — the ladder’s midpoint — run this three-question checkpoint. Answer in writing in 13_discipline/.
Are Rungs 1, 2, and 3 publicly shipped? If not, the cadence is broken and the year is at risk. Invoke a small reset: shrink scope on in-flight work, ship what you have.
Is Rung 4 in flight and on track for M7? If not, Rung 5 (M9) is at risk, and Rung 5 is HARD GATE #1. Pause everything else and re-plan Rung 4.
Do you have a written technical plan for Rung 5? Not “I’ll figure it out in M8” — actual design notes: which HTTP parser, what event loop shape, what benchmark methodology. If not, spend M6’s last week writing that plan.
If any of the three answers is unsatisfactory, the year is in yellow status. Two unsatisfactory answers = red status = execute the reset protocol above proactively, before M9 forces it on you.
Closing Note¶
The seven rungs are not equal. The two hard gates are not equal to each other either — Rung 5 (M9) failing has cascading damage; Rung 6 (M11) failing is a single-clause loss. But the combination of both shipped is what makes the M13 pitch sentence true, and truth is the only foundation that survives an study loop, a résumé screen, or a two-year performance conversation about whether the year was worth it.
Ship both gates. Everything else negotiates.
Return to README.md · Previous: 07_rung_7_oss_merged_pr.md