守 Shu · Follow2016
Andela bootcamp
Following tutorials. A new language most weeks.
The rule · Someone else’s. I follow it exactly.
DWG EM-2026 · Sheets 01–04 · Tolerances
What moves me, and what I won’t bend on.
Four layers, drawn from the inside out: how I treat people and teams, what drives me, how I learn, and how I build now. The 11 tolerances I hold at ±0 sit inside them as receipts.
Sheet 01 · People and teams · the Golden Rule and Conway’s Law
Treat people the way you want to be treated. It’s why I write handoffs for the next person, why I mentored 30+ bootcamp candidates, and why I label unfinished things honestly.
Mirror · hover or tap a lineEach side is the other, reflected
Shipped to you
Shipped by me
Whatever software a team ships ends up mirroring how that team is organised. I’ve seen it in every role. Structured companies split into clean services; unstructured ones, where everybody does whatever they like, show it in the code. You can read a company’s structure from its code. I cited this in 2017, in Microservices vs monolithic applications ↗.
“Any organization that designs a system will produce a design whose structure is a copy of the organization’s communication structure.”
Org chart → code · hover or tap a teamTwo teams, drawn as org charts
T-06 ±0· People
Write it down so the next one can pick it up.
PingPong was async video for teams who were rarely online together. The Crew works the same way, through written handoff docs.
Receipt · PingPong · HANDOFF docs
T-09 ±0· People
Say it once. Point to it everywhere else.
“Held holds your money” was wrong on a dozen pages. Now each claim lives in one place and the pages point to it.
Receipt · Held
T-10 ±0· People
Design the team on purpose. The code will follow its shape.
Conway’s Law, in every role I’ve had: clear teams gave clean services, no structure gave tangled code.
Receipt · Codementor, 2017 · Microservices vs monolithic applications ↗
Sheet 02 · What drives me · Shuhari and Kaizen
Shuhari is the path I keep walking: shu, follow the form; ha, break it; ri, leave it behind because it now lives in you. I wrote it up in 2017 as SHUHARI: the path to learning anything ↗.
One ticket, three stagesShu · 2016
守 Shu · Follow2016
Following tutorials. A new language most weeks.
The rule · Someone else’s. I follow it exactly.
Kaizen is the other half. Each time something goes wrong, the lesson doesn’t stay a lesson. It becomes a rule, and the rule becomes a check. Half-written in the Logbook, Draft · Kaizen: small improvements, every day. It is also the outer ring of the Jig.
The loop · quality only ratchets upTurn 0 · 12 violations
T-03 ±0· Drivers
Go one layer lower each time.
I followed one problem all the way down: from a startup’s async video tool to a recorder where nothing ever leaves your computer. PingPong, Electron, Grain Recorder (2026, my own project), Swift, Captur in Rust, then Nzuko.
Receipt · PingPong → Nzuko
T-02 ±0· Drivers
Migrate piece by piece, and keep it running.
At Grain a rewrite had stalled for months. Shipped as a progressive migration, it landed in about a month.
Receipt · Grain
Logbook · Draft · Why Grain’s stalled rewrite shipped in a month
Sheet 03 · How I learn · Craft
I’m self-taught, so reading was never enough. To understand a thing, I make a small one with my own hands.
Flip through · swipe or use the arrows1 / 4
go-jwt · a token is two readable parts and a signature over both. I wrote the library to see it.d-engine · a 2D physics engine, to learn what one step of a simulation hides.T-01 ±0· Craft
Reading about a thing is not the same as making it.
Self-taught means learning by building: a JWT library, logic gates from NAND up, a 2D physics engine.
Receipt · go-jwt · Nand2Tetris · d-engine
Sheet 04 · How I build now · the Jig
A jig holds the work in place and guides the cutter, so every piece comes out right, whoever holds the tool. AI is the fast pair of hands. I build the jig.
“My secret to coding with LLMs is not prompting. It is constraint.”
“You never want your LLM running wild. You want to box it in.”
Constrain. Contract. Guard. Prove. Sign.
Every step loops until it can show its exit.
Constraint is the frame that frees the hand.
The contract is the promise, written before the work.
The guard is the promise, kept when no one is looking.
Proof is the question the work must answer.
Every failed answer turns the loop again, until the exit is met.
And when the proof holds, I sign.
Pick a box to open its demo, or play a ticket through.
Exit a person confirms the list
Decides · person
Decide what the work may never do.
Loop · AI suggests requirements and must-nots, a person edits, round after round. Exit · a person confirms the list. Decides · a person.
Scope Size SInside the frame
T-04 ±0· Jig · Constrain
Design for the load you have, not every load you can imagine.
I weigh complexity, time and cost. On a smaller system, Postgres already has the tooling that covers what Redis gives a big one. Ollic was never going to have that many users, so Postgres for everything was right at that scale.
Receipt · Ollic Growth District: Postgres for jobs, queues and locks · Getro → Findem: Postgres over a graph DB, 489ms → 9ms
Logbook · Draft · Postgres over a graph DB for 3.5M+ contacts
T-11 ±0· Jig · Constrain
Agents copy what they see. Make what they see consistent.
AI doesn’t just follow instructions. It copies the patterns already in the codebase, so consistent structure is what makes agent work repeatable. Every new pattern is a new way for an agent to go wrong.
Receipt · Pradini · code rules written into the agent instructions (one component per file) · Held · folder boundaries enforced by a lint tool, a 400-line cap per file · quality checks that only ratchet up
Pairs with T-10: the code copies the team; agents copy the code.
Exit nothing conflicts, or a person accepts the conflict with a reason
Decides · machine, then person
If it isn’t in the table, it isn’t in the ticket.
Loop · a promise is drafted, checked against existing promises for conflicts, redrafted. Exit · nothing conflicts, or a person accepts the conflict with a reason. Decides · the machine, then a person.
From a marketplace I built with escrow3 tests · not run
| Given | When | Then | Test |
|---|---|---|---|
| an open deal | it’s funded | state becomes funded, one event written | FundedTransition |
| the same deal | open → released is attempted | “illegal transition”, nothing written | IllegalTransitionWritesNothing |
| any transition | the reason is empty | rejected, reason required | ReasonRequired |
Tests are written first, fail for the right reason, then freeze.
Exit the check catches the planted break
Decides · machine
Prove the check before trusting the work.
Loop · write the check, plant a break, confirm it fails; restore, confirm it passes; if the break isn’t caught, improve the check. Exit · the check catches the planted break. Decides · the machine.
Rule · money is integer minor unitsA guard I haven’t seen fail is a suggestion.
—Never seen failing. Not trusted yet.
T-07 ±0· Jig · Guard
A check only counts once it’s seen failing.
Dozens of money bugs passed review while looking correct. The Guard has no model inside, and each rule is made to fail on purpose first.
Receipt · the Guard · logbook entry 002
Logbook · Draft · A guard that cannot fail is worse than no guard
Exit every guard passes on the real code
Decides · machine
Five attempts, five dollars, two hours. Then a human.
Loop · the work changes, the proven checks run, failures get fixed. Exit · every guard passes on the real code. Decides · the machine.
Ticket
Idle · one fresh agent waits for a ticket
T-05 ±0· Jig · Prove
Short-lived workers, clean context.
Every ticket gets a new agent in its own worktree. No agent carries yesterday’s context into today’s ticket. Boxed in by written rules.
Receipt · The Crew · Pradini · LinkedIn, 2026
Exit a named person signs off
Decides · person
No loop merges its own work.
Loop · a person looks, asks for changes, looks again. Exit · a named person signs off. Decides · a person.
ReviewRound 1 · waiting for a person
Every later change re-checks the proof. Gaps found after sign-off become constraints on the next ticket.
The ring · Kaizen plus keep-alive. It is the Kaizen loop from Sheet 02, wrapped around the whole jig.
Ledger · balance = sum(entries), never storedentries #0000
Balance ₦0
No entries yet.
T-08 ±0· Jig · The ring
Store the entries. Compute the balance.
A stored balance can drift from the entries under it. A derived one can only be recomputed.
Receipt · Held · Pradini ledger
Logbook · Draft · Balances derived, never stored
The building is the one step I hand to the machine. Everything else is the jig.