<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Teams | Law Zava</title><link>https://lawzava.com/topics/teams/</link><description>Team structure, culture, interfaces, and the org design that determines what gets built.</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 12 Oct 2026 00:07:28 +0000</lastBuildDate><atom:link href="https://lawzava.com/topics/teams/index.xml" rel="self" type="application/rss+xml"/><item><title>The Review Queue Is Your Real Agent Limit</title><link>https://lawzava.com/blog/2026-10-05-the-review-queue-is-your-real-agent-limit/</link><pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-10-05-the-review-queue-is-your-real-agent-limit/</guid><description>Plan agent rollouts like capacity: risk-weighted review demand against effective reviewer-hours. Past the constraint, seats buy inventory, not throughput.</description><content:encoded><![CDATA[<p>The trend of the season, visible in the newsletters and in any engineering org you ask, is rising review load.  <a href="/blog/2026-09-23-the-handoff-tax/"
   
   >I&rsquo;ve argued the general mechanism already</a>
: speedups upstream of a fixed-capacity stage convert to queue, not throughput. This post is the specific machinery for the case that matters most to engineering leaders,  <a href="/blog/2025-02-03-ai-code-review/"
   
   >code review</a>
 under agent-generated change volume, because &ldquo;the handoff tax exists&rdquo; doesn&rsquo;t answer the question a VP actually faces in Q4 planning: how many agent seats can we absorb, and what do we change to absorb more? That&rsquo;s a capacity-planning question, and it deserves a capacity plan, not a sentiment.</p>
<p>The plan needs two quantities nobody currently measures. The first is offered review demand, and the unit is review-minutes, not pull requests. Counting PRs is like counting &ldquo;some vehicles&rdquo; at a bridge; a dependency bump and an authorization rewrite are different loads. Estimate minutes per change from size, surface touched, and blast radius, crudely at first, calibrated later from actuals. Note what this replaces: seat count. Seats are not demand. A seat can sit idle, can replace typing without adding submissions, or can produce changes that arrive with evidence and review faster. What hits the queue is minutes, so measure minutes. The second quantity is effective reviewer capacity: not headcount times forty hours, but the review-minutes your qualified reviewers can actually give, after meetings, on-call, and their own delivery work, measured from review activity rather than assumed.</p>
<p>Demand against capacity gives you a utilization ratio, and here queueing theory earns its keep as a warning model, no more. For a stage with high variability in job sizes, which review is, extremely, waiting times grow nonlinearly as the ratio approaches one, and the growth steepens with the variability. Don&rsquo;t quote a magic threshold; the practical rule is humbler. Track the ratio and the queue-age tail together, per risk class, and treat a rising tail as the constraint announcing itself. The classes matter because the single most effective lever isn&rsquo;t more reviewers. It&rsquo;s refusing to price all changes identically.</p>
<p>That lever is risk-tiered review, and it should come before any cap. Low-risk classes, the reversible, well-tested, non-privileged surfaces, get automated checks plus sampled human review at a stated rate, with the sample watched for escapes; the tier earns its lighter process by evidence, and loses it the same way. High-risk classes get full human review from a capacity budget reserved for them, so an authorization change never queues behind forty dependency bumps. Tiering can multiply effective capacity outright. What it can&rsquo;t do is repeal the arithmetic on the residual: the human-review tiers still have an arrival rate and a capacity, and when the first approaches the second, you cap work-in-progress. Not because Little&rsquo;s Law commands it, but because the relationship it states means bounded queues are the only way to bound cycle time. When the cap binds, the rule for agents is specific, because &ldquo;agents work on the queue&rdquo; invites a category error: an author rechecking itself is not verification. Capped agents split oversized changes, rebase stale ones, answer review comments, repair failing checks, and attach evidence (tests, eval results, stated blast radius) that shrinks a reviewer&rsquo;s minutes-per-change. Independent verification stays with an independent party, human or  <a href="/blog/2026-07-30-reliability-is-the-autonomy-ceiling/"
   
   >a separately-tasked checker</a>
, and new submissions wait.</p>
<p>Two boundaries on this program. The metrics need definitions before dashboards: attribute changes to agents at commit metadata, split queued-minutes from active-review-minutes, track p50/p95 queue age per tier, and count escapes per hundred merged changes in a fixed attribution window. Loose definitions here produce confident nonsense. And  <a href="/blog/2026-09-09-the-rung-contract/"
   
   >the apprenticeship pipeline</a>
 is a capacity investment on a months-long crossover, not a Q4 lever; budget it like one, expecting senior minutes to rise before they fall.</p>
<p>The one-sentence version for the seat-count conversation: your agent capacity is not your seat count, it&rsquo;s your verified-throughput rate, and the ratio of offered review-minutes to reviewer-minutes tells you which side of the constraint each team is on. Buy seats up to the constraint. Past it, spend the same money on the constraint itself, on tiering, evidence, and reviewers, because that&rsquo;s where throughput now lives.</p>
]]></content:encoded></item><item><title>Agent Scale Has a Company-Size Gap</title><link>https://lawzava.com/blog/2026-09-28-agent-scale-has-a-company-size-gap/</link><pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-09-28-agent-scale-has-a-company-size-gap/</guid><description>Large firms report scaling AI agents; smaller ones sit flat. A small company needs one workflow with an owner, gate, boundary, spend cap, and off switch.</description><content:encoded><![CDATA[<p>Two people at a small company are more than a year into building a gateway, a registry, and a governance council, and no agent has yet touched a customer. I&rsquo;ve watched a handful of versions of that scene over the past year, and this year&rsquo;s adoption data suggests it isn&rsquo;t rare. McKinsey&rsquo;s August survey has 40% of organizations above a billion dollars in revenue reporting that they&rsquo;re scaling AI agents, up from 27% a year ago. Below that line: 22%, flat year over year.</p>
<p>Before building on that, note what a survey rate can&rsquo;t say. A conglomerate has hundreds of workflows; one scaled agent anywhere lets its respondent answer &ldquo;scaling,&rdquo; so some of the gap is arithmetic: more workflows, more chances to report. And a smaller firm may be rationally slower. With fewer workflows whose volume justifies the evaluation, supervision, and failure costs agents carry, the correct agent count for some businesses is currently zero. Both explanations are live. The hypothesis I&rsquo;d add, from that handful (a sample, not a study), is that a real constraint sits in the gap too: scaling agents needs scaffolding, meaning  <a href="/blog/2026-07-07-agentic-systems-reliability-contract/"
   
   >evals, identity, cost control, rollback</a>
, and the reference architectures for that scaffolding ship in enterprise size only. Big companies staffed a platform team. Small companies read the same posts, correctly concluded they couldn&rsquo;t afford one, and stayed in permanent pilot. If that&rsquo;s right, the failure mode below the line isn&rsquo;t absent ambition, it&rsquo;s the miniature enterprise program: a year or more of foundation for workflows that needed a few weeks, recreating  <a href="/blog/2026-05-14-why-ai-platform-teams-become-bottlenecks/"
   
   >the bottleneck platform teams become</a>
 with none of the amortization that justifies them.</p>
<p>The correction isn&rsquo;t a smaller platform. A small company needs one workflow with an owner, a quality gate, a security boundary, a cost ceiling, and an off switch. Five entry conditions, each written as a test an executive can check, not a system to build.</p>
<p>An owner: one named person for one commercially real workflow, whose review includes the adoption and outcome numbers,  <a href="/blog/2026-08-20-the-diffusion-gap-why-pilots-dont-become-capability/"
   
   >not a side quest</a>
. Test: you can say who, and they can say what number they&rsquo;re moving. A quality gate: a few dozen real cases with pass criteria a domain expert wrote, versioned, run on every change, blocking on failure. That&rsquo;s  <a href="/blog/2026-07-16-your-benchmarks-are-lying-to-you/"
   
   >the benchmark only you can build</a>
, at minimum viable size. Test: a change that degrades the eval set cannot ship. A security boundary: the agent holds its own deny-by-default credentials scoped to that workflow&rsquo;s systems, and you have revoked them once to prove you can. Test: the revocation drill happened. A cost ceiling: the workflow&rsquo;s spend on its own billing tag, with a threshold that alerts the owner. Test: the owner saw last week&rsquo;s number. An off switch: a rehearsed way to route the workflow back to the manual path, with the detection that triggers it. Test: you&rsquo;ve run it, and the workflow survived the hour.</p>
<p>Then the discipline that makes five conditions sufficient where a platform wasn&rsquo;t necessary: the amortization rule. Scaffolding amortized across one workflow must be nearly free, so nothing generalizes until workflow two demands it. The registry arrives when two workflows share prompts, the gateway when two owners need the same boundary, the standing review when there are enough numbers to fill one. Abstractions earn existence on the second use. The go/no-go for workflow one is the same arithmetic: expected value of the workflow, against evaluation, supervision, failure, and operating cost. If nothing clears that bar, the right answer is zero agents this quarter, and none of the five conditions built on spec. That outcome is also the falsifier for my hypothesis: a company that meets the five conditions on a worthwhile workflow and still can&rsquo;t scale it is evidence the constraint lives somewhere else.</p>
<p>If you run a larger org, invert the reading. Your platform investment finally pays in exactly the coin the survey suggests, and the risk is spending the advantage on ceremony instead of  <a href="/blog/2026-06-25-ai-profit-engines-unit-economics/"
   
   >workflows that route work differently</a>
. Either side of the billion-dollar line, the unit of progress is the same, and it isn&rsquo;t a platform. It&rsquo;s one workflow, owned, gated, bounded, metered, and stoppable. Then the next one.</p>
]]></content:encoded></item><item><title>The Handoff Tax</title><link>https://lawzava.com/blog/2026-09-23-the-handoff-tax/</link><pubDate>Wed, 23 Sep 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-09-23-the-handoff-tax/</guid><description>80% report personal AI gains while EBIT impact stays flat. The handoff tax: task time down, throughput flat, queues rising at one nameable transition.</description><content:encoded><![CDATA[<p>Ask around any engineering floor and people will tell you  <a href="/blog/2025-10-13-ai-team-productivity/"
   
   >the tools made them faster</a>
. Ask the CFO whether the income statement noticed and the answer gets quieter. McKinsey&rsquo;s August survey puts numbers on both halves: 80% of respondents report individual productivity gains from AI, while 37% say AI has contributed positively to enterprise EBIT, a share essentially unchanged from last year. Four in five people say they&rsquo;re personally faster; the share of companies whose income statement can tell stayed flat.</p>
<p>Self-reports both, so start with the explanations that require no one to be wrong. Measurement lag: EBIT is a long way from task speed, and enterprise technology historically takes a year or two to show up there. Absorption: the gains are real but spent, on adoption costs, on quality, on scope growth, or competed away in pricing. Inflation: people overestimate their own speedup. All three are live, and a survey can&rsquo;t separate them. What a survey can do is tell you where to point instruments, and the instruments can separate them, because delayed conversion, spent gains, and destroyed gains leave different marks on a workflow&rsquo;s queues.</p>
<p>Here is the mechanism worth instrumenting for, named so it can be falsified. Call it the handoff tax: an individual speedup converts to enterprise throughput only if the downstream stage absorbs the extra flow, and where it doesn&rsquo;t, the gain converts to queue instead. The signature is specific. Task time down at one stage, end-to-end throughput flat, and waiting time or rework rising at a nameable transition. A developer produces changes twice as fast into a review process sized for the old arrival rate. A team drafts three proposals in the time one took, into a decision meeting that still meets weekly,  <a href="/blog/2026-06-10-decision-latency-p-and-l-variable/"
   
   >and decision latency was a P&amp;L variable</a>
 before the arrivals tripled. Output volume rises into fixed verification capacity, so either backlog grows or scrutiny quietly falls. If the tax is your problem, those queues exist and are growing. If task time fell and no downstream queue grew and throughput still didn&rsquo;t move, the tax is not your problem, and this diagnosis is wrong for your org. That&rsquo;s the test, and it cuts both ways.</p>
<p>The survey offers one more clue, to be handled with care: 47% of mid-level managers and individual contributors report at least one negative AI-related strain, against 31% of executives and senior managers. That is not evidence that the middle layer causes the gap; strain could equally measure proximity to rollout churn or distance from insulation. Treat it as a searchlight, not a verdict. The layer reporting the most friction is the layer where handoffs, reviews, and exceptions live, which is reason to put the instruments there first, and no reason to blame the people improvising unpaid pipeline rebalancing.</p>
<p>The instrument itself is one workflow, traced. Pick a single customer-valued output. Timestamp five events per item: intake, draft-ready, review-start, exception, done. Four weeks of data gives you arrival rate, service rate, queue age, and first-pass yield per stage, before-and-after if you have history. The tax, if present, is legible in one picture: the stage where AI landed shows falling task time, and some downstream transition shows rising queue age. Then run the confirming experiment. Add capacity or change policy at that one transition, whether review staffing, the WIP limit, or the decision cadence, and watch end-to-end throughput. If it moves, you found where the 80% was leaking. If it doesn&rsquo;t, reject the diagnosis and go test measurement lag, which is the serious competitor.</p>
<p>What makes this a leadership post rather than a queueing tutorial is who owns the fix. Rebalancing a pipeline after the tools changed its arrival rates is a management act: deciding where freed capacity goes, which is currently in nobody&rsquo;s job description and therefore happens by default, and the default is queue. Unallocated speedup defaults to queue. So allocate it, into the constraint stage, into  <a href="/blog/2026-07-30-reliability-is-the-autonomy-ceiling/"
   
   >verification capacity that buys trustable autonomy</a>
, into fewer things finishing sooner. The decision rule for the next QBR fits in one sentence: individual gains are inventory until the next stage absorbs them, and inventory doesn&rsquo;t show up in EBIT. Queues do.</p>
]]></content:encoded></item><item><title>Don't Book the Cut Before the Work Disappears</title><link>https://lawzava.com/blog/2026-09-18-dont-book-the-cut-before-the-work-disappears/</link><pubDate>Fri, 18 Sep 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-09-18-dont-book-the-cut-before-the-work-disappears/</guid><description>Expected AI headcount cuts outran reported ones last year. Let forecasts drive scenarios; book a saving only once the work has observably gone.</description><content:encoded><![CDATA[<p>The workforce plan that books next year&rsquo;s AI saving from a capability forecast is a common artifact: headcount down by a percentage, signed off before any workflow has been decomposed. McKinsey&rsquo;s August survey supplies the pair of numbers that should sit next to it. This year 39% of respondents expect AI-related headcount declines in the year ahead, up from 32% a year ago. Last year 32% expected declines over the following year; this year 14% report that AI actually reduced their workforce. Expectation rose seven points while reported reality came in at under half the forecast rate.</p>
<p>One year-pair from one survey proves no trend, and I won&rsquo;t pretend it does. What it provides is a warning label for that artifact. The argument for that label isn&rsquo;t the survey; it&rsquo;s the mechanism the survey is consistent with, and the mechanism is old.</p>
<p>A job is a bundle of tasks, and automation eats tasks, not bundles. The model drafts the letter; a human still decides the hard cases, works the exception queue, answers for the output, and does the coordination that never appeared in any task inventory. What disappears is a percentage of each person&rsquo;s day, scattered, and scattered percentages don&rsquo;t concentrate into a removable position by themselves. Concentrating them requires reorganizing the work, which is exactly the slow institutional labor  <a href="/blog/2026-08-20-the-diffusion-gap-why-pilots-dont-become-capability/"
   
   >pilots skip and diffusion demands</a>
. Meanwhile the same tools generate new tasks: review of machine output,  <a href="/blog/2026-07-16-your-benchmarks-are-lying-to-you/"
   
   >evals and tripwires</a>
, a new incident class. The ledger has two columns, and capability forecasts read only one.</p>
<p>Note what this does not contradict.  <a href="/blog/2026-09-01-junior-developer-cliff-is-a-leadership-problem/"
   
   >A senior driving agents can genuinely out-ship a senior and three juniors</a>
; demonstrated substitution inside a bounded workflow is real, and the arithmetic pays this quarter. The gap is between that observation and an enterprise-wide reduction inferred from it. Bounded substitution is evidence about the workflow you measured. The org-wide cut extrapolates it across bundles nobody has decomposed, and that extrapolation is the step that came in at under half.</p>
<p>Now the strongest case for the other side: staffing has lead times. Hiring pipelines, budget cycles, and attrition planning all run on forecasts, and a rule of &ldquo;no workforce planning until proof&rdquo; guarantees overstaffing in any world where the cuts eventually arrive. Right. So give the forecast the jobs forecasts can hold: scenarios, contingent requisitions, replacement-approval gates, slower backfill on roles the models plausibly thin. What the forecast doesn&rsquo;t get to govern is the irreversible acts: the layoff, and its quieter twin, the booked saving that finance builds next year on. A booked-but-unrealized reduction is corrosive in a specific way. Teams run short against savings that never materialized, absorb the new verification work uncounted, and when the number misses, the whole program wears the failure,  <a href="/blog/2026-09-01-junior-developer-cliff-is-a-leadership-problem/"
   
   >which the bench you stopped filling</a>
 then compounds. The org that cuts on forecast pays twice: once in the shortfall and once in the rebuild.</p>
<p>So write the promotion rule from scenario to plan, per workflow, decidably. Task elimination observed at representative volume: this queue or review step no longer routes to humans, measured across a full cycle&rsquo;s case mix, including the bad weeks. Service levels held against named tolerances (error rate, latency, escalation volume) over a fixed window agreed before the change, not after. And the residual netted out: total human touch-time on the workflow, including the new review, exception, and coordination work the change created, down by enough concentrated capacity to equal actual positions rather than confetti. Three tests, thresholds written in advance. A workflow that passes them supports a reduction through attrition with a clear conscience. A workflow that hasn&rsquo;t been run through them supports a scenario, and the deck should say which one it&rsquo;s holding.</p>
<p>The board will read about AI layoffs weekly and ask why yours are slower. The answer is the survey&rsquo;s own shape plus one question: expectations up seven points, reported declines at under half the forecast rate, so which side of that gap should our balance sheet be on?  <a href="/blog/2026-03-30-throughput-engineer-headcount-lagging-metric/"
   
   >Throughput, measured per workflow</a>
, will tell you when the work has actually disappeared. Until it does, the saving is a hypothesis, and hypotheses don&rsquo;t belong on the income statement.</p>
]]></content:encoded></item><item><title>The Rung Contract</title><link>https://lawzava.com/blog/2026-09-09-the-rung-contract/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-09-09-the-rung-contract/</guid><description>Competency matrices describe skills. Apprenticeship needs a contract per rung: permission, evidence, reviewer, a promotion rule two managers apply alike.</description><content:encoded><![CDATA[<p>Last week I argued that  <a href="/blog/2026-09-01-junior-developer-cliff-is-a-leadership-problem/"
   
   >cutting juniors solves this quarter&rsquo;s demand at the price of a senior famine three years out</a>
, and named the work the new apprenticeship should teach. The fair follow-up question is how to structure it. Every company already has a competency matrix, and competency matrices don&rsquo;t produce seniors. So before the what, the form.</p>
<p>A competency matrix describes skills: &ldquo;demonstrates growing judgment in reviews.&rdquo; Nobody can act on it, because it grants nothing and nothing tests it. What apprenticeship actually runs on is a contract per rung, four clauses, written where the team can read them. Permission: the real work this person may now do, with its boundaries. Supervised, dual-controlled, rollback-limited, but real. Evidence: the artifacts that show they&rsquo;re doing it well, countable ones. Reviewer: the named person whose corrections they receive, because feedback with no owner is noise. Promotion rule: a decision rule specific enough that two managers reading the same record would make the same call. Miss any clause and you don&rsquo;t have a rung, you have a vibe, and vibes are what apprenticeship consisted of when juniors learned by osmosis from work that no longer exists.</p>
<p>This is the contract I&rsquo;d write for the first rung, in full, because the format is the point. Permission: first-pass review of agent-generated changes, verdict delivered as a written rejection or approval with reasons; no merge authority. Evidence: the rejection log, and a miss rate, meaning defects the apprentice approved that their reviewer caught, measured over a sample. Reviewer: a named senior who re-reviews a fixed sample, weighted toward approvals, because the dangerous failure here is the miss, not the false alarm. Promotion rule, concretely: thirty sampled reviews across six weeks, zero critical misses, noncritical miss rate under an agreed bar, sign-off from two seniors rather than one. Numbers your org would tune. But numbers, or the rung isn&rsquo;t checkable.</p>
<p>How can juniors catch defects in code they&rsquo;ve never been able to write? Alone, they can&rsquo;t, which is why rung one has an entry gate as well as an exit gate. Before their verdicts count, the apprentice calibrates on seeded cases: changes with known defects, where the job is to find the flaw, reproduce it with a failing test, and propose the repair, shadowing a senior&rsquo;s real reviews until their recall on the seeded set clears a threshold. Review-first learning works only when someone builds the reviewer&rsquo;s mental model deliberately; the seeded set is that construction. It also answers whether this rung reduces senior load. Initially it doesn&rsquo;t, since sampled re-review plus teaching costs more senior minutes than it saves. That&rsquo;s an investment with a measurable payback: track senior review-minutes per merged change and escaped defects, and expect the crossover in months, not weeks.  <a href="/blog/2026-09-01-junior-developer-cliff-is-a-leadership-problem/"
   
   >The review queue can afford it</a>
; the bench can&rsquo;t afford its absence.</p>
<p>The later rungs get the same four-clause treatment, and their order can flex by job family. Owned failure: one production failure mode end to end (alert, runbook, rotation, postmortem) under dual control until an incident shows the senior was informed rather than needed. Defended decisions: real design calls, written with alternatives and costs, scored when made, with assumptions explicit, rollback stated, escalation named, and production outcomes used as later calibration rather than the gate, because outcomes carry luck in both directions. Authored verification: the eval set and drift tripwire for something new,  <a href="/blog/2026-07-16-your-benchmarks-are-lying-to-you/"
   
   >the benchmark only your org can build</a>
. Clearing that last contract is the crossing the whole pipeline exists to produce: unsupervised ownership, the numerator in the replacement-rate metric I argued you should track against senior attrition.</p>
<p>And write the failure clause with the same discipline, because a curriculum that can&rsquo;t fail people honestly fails them dishonestly. An apprentice stalled at a rung gets a diagnosis first (wrong rung order for their role, wrong reviewer, insufficient reps), then a changed assignment and a documented reassessment, before anyone reaches for performance machinery. The contract cuts both ways: it&rsquo;s how they know exactly what&rsquo;s asked, and how you know exactly what you owe them. Four clauses, per rung, on one page. Everything else is a vibe.</p>
]]></content:encoded></item><item><title>The Junior Developer Cliff Is a Leadership Problem</title><link>https://lawzava.com/blog/2026-09-01-junior-developer-cliff-is-a-leadership-problem/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-09-01-junior-developer-cliff-is-a-leadership-problem/</guid><description>AI eats the work juniors learned on. Rebuild apprenticeship around verification and ownership, or starve your senior bench.</description><content:encoded><![CDATA[<p>The case for cutting junior developers is sound as far as it goes. One senior driving a fleet of agents ships what a senior and three juniors used to ship, faster and cheaper. Juniors were always the slowest, most expensive way to get a CRUD endpoint written, and the agent writes it now. The spreadsheet says cut the bottom of the pyramid, and it will keep saying so next quarter. The error is not in the arithmetic. It is in what the arithmetic measures: demand for seniors this quarter, not the supply of seniors three years out. Those are different problems, and the cut answers the first by quietly worsening the second.</p>
<p>Seniors are grown, not hired, and the lead time runs three to five years. The bench drains on its own schedule whether or not you refill it. Put rough numbers on it; your own will differ, but the shape holds. Attrition, retirement, internal moves, and poaching run something like 10 to 15% a year in most engineering orgs. Hold fifty seniors and you lose about six annually just standing still. Staying flat means minting six replacements. A junior who can own a system unsupervised takes around four years to produce, and maybe half of any cohort gets there. Work it backward and a steady bench needs something like a dozen new apprentices entering every year, which means several dozen in the pipeline at any time. Cut intake to zero and nothing visible happens for two years. In year three your incident reviews route to a thinner and thinner group, and by the time the gap reaches your metrics the fix is already three years out.</p>
<p>Grant the strongest version of the counterargument: agents probably do lower how many seniors you need per unit of output. That is a claim about demand. Insolvency is a claim about supply, and a falling demand curve does not repair a severed supply line. Drop from fifty seniors to forty and you still lose five a year, and you still have to source them.</p>
<p>From a market. That is what the seniors-plus-agents story leaves out: it balances only if someone, somewhere, is still producing seniors. When every firm runs the same model and cuts its juniors, the market for proven seniors thins at the exact moment everyone turns to it. You stop growing the asset and start  <a href="/blog/2026-04-30-ai-build-vs-buy/"
   
   >buying it on a market you helped drain</a>
, as a price-taker, against everyone&rsquo;s identical bet. Buying stays cheap only while the supplier still exists.</p>
<p>Why not go further and bet that agents absorb senior judgment too, skipping the pipeline entirely? Name that wager, because it is the one you are placing, and it loses on accountability. When an agent ships a bad migration, a human signs for it to a regulator, a customer, or a board, and the signature does not delegate to a model.  <a href="/blog/2026-07-30-reliability-is-the-autonomy-ceiling/"
   
   >Reliability sets the autonomy ceiling</a>
; a human verifier sets the accountability one. You will always need people trusted to say the agent is wrong here, and that trust is earned only by doing the work on something that bites when you get it wrong.</p>
<p>That settles what juniors should be doing now that the code they used to learn on is gone. The rung moves up the value chain, onto the work the model cannot own, and that work is real and nameable: first-pass review of agent output, delivered as a written rejection with the reason; one failure mode owned end to end, on-call included; a design decision defended out loud to someone senior; the eval that proves the thing actually works. The work you automated away from juniors is now the work you have to teach them to supervise. Route the review load your seniors resent through the juniors first: the junior makes the call, the senior corrects it, and the tax becomes the curriculum. Run deliberately, this is the pipeline that mints those six replacements a year; left to chance, it is the pipeline you let lapse.</p>
<p>None of this surfaces in headcount, which  <a href="/blog/2026-03-30-throughput-engineer-headcount-lagging-metric/"
   
   >lags</a>
. Watch a ratio instead: senior replacement rate against senior attrition rate, meaning how many engineers crossed into unsupervised ownership this year against how many seniors you lost. Below one, you are spending seniority faster than you produce it, and the income statement will read excellent the entire way down. The agents pay off this quarter. What matters is whether anyone is still tracking the rate at which the bench refills, and finance will not put that number on the table on its own.</p>
]]></content:encoded></item><item><title>The Diffusion Gap: Why Pilots Don't Become Capability</title><link>https://lawzava.com/blog/2026-08-20-the-diffusion-gap-why-pilots-dont-become-capability/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-08-20-the-diffusion-gap-why-pilots-dont-become-capability/</guid><description>Most AI pilots pass the trial and then die. Closing the gap takes ownership, cadence, and incentives. Write exit criteria as operating changes.</description><content:encoded><![CDATA[<p>The money in an AI pilot rarely disappears in a crash. It goes quietly, in licenses paid and habits unchanged.</p>
<p>A claims team pilots an assistant that drafts the first-pass adjustment letter. The trial is clean: on a held-out sample it produces a usable draft for 78% of cases, and the two adjusters running it cut letter-writing time roughly in half. The deck circulates. Everyone agrees it works. Eight months later, fourteen adjusters hold a license and nine have opened the tool twice. The default is still the old template button in the case system, because that is the button that has always been there.</p>
<p>The model did not fail. What failed is the work nobody scoped: moving a proven capability from &ldquo;passes a trial&rdquo; to &ldquo;is how the job is done.&rdquo; That is the distance between a model that performs and an organization that operates differently because of it, and it is where the money went.</p>
<p>Most companies running pilots have  <a href="/blog/2026-05-19-stop-building-internal-ai-tools-no-one-uses/"
   
   >a graveyard of these</a>
. The audit is cheap: list every pilot that cleared its technical bar, then mark which daily workflow each one actually changed. The blanks are your real result, and they cluster for one reason. A pilot gets scored on whether the model works, which answers a question nobody important was asking. The question that pays is whether work will route through it next quarter.</p>
<p>Three things have to move for that to happen, and they fail as a set: ownership, cadence, and incentives.</p>
<p>The first two are org-chart edits a director can make before lunch. Ownership leaves the pilot team for a named operator whose performance review includes the adoption number. Cadence puts that number into  <a href="/blog/2026-06-10-operating-cadence-ai-leadership-interfaces/"
   
   >a standing review</a>
, so it is read on a fixed clock rather than admired once. Do only these and you get a well-governed tool nobody uses. That is the claims pilot&rsquo;s eight months exactly: a sponsor, a slide in the monthly deck, and usage in the low twenties, because the cheapest action on screen was still the old one.</p>
<p>Incentives is the lever everyone hand-waves as &ldquo;drive adoption,&rdquo; and it is the only hard one, because &ldquo;path of least resistance&rdquo; is not a mood. It is three concrete edits to the screen and the scorecard.</p>
<p>The first is to delete the old path for the cases the tool handles. The highest-leverage move is removing the legacy button: take the manual &ldquo;insert template&rdquo; action out of the case screen, so drafting through the assistant is the one-click route and the old way costs four extra clicks. That is not the same as deleting the template for the 22% the assistant can&rsquo;t draft; those cases still route to it. Adoption is a UI default before it is a culture.</p>
<p>The second is to move the measured metric. Stop scoring adjusters on raw letters closed per day and start scoring first-pass acceptance, a number the assistant moves and the manual path does not. Now the comp-relevant metric rewards the new behavior instead of being neutral to it.</p>
<p>The third is to make the old path visible when chosen. The two holdouts still writing by hand show worse handle time on that same scorecard, which is a line in the weekly review, not a policy memo.</p>
<p>Incentives gets skipped because it is the expensive lever. It means touching a scorecard people are measured on, deleting a tool they are comfortable with, and eating the complaints when the familiar button is gone.</p>
<p>So write the pilot&rsquo;s exit criteria as operating changes before it starts, not model targets after it ends:</p>
<ul>
<li>Which human task stops, and who stops doing it?</li>
<li>Who owns the capability in production, with their name on the adoption metric?</li>
<li>Which existing meeting reviews it, on what clock?</li>
<li>What is the old path, and what is the plan to remove it for the cases the tool covers?</li>
</ul>
<p>None of those mention accuracy. A pilot that cannot answer them is funding a build and assuming diffusion is free; it never is. The work that closes the gap is  <a href="/blog/2026-06-18-new-talent-stack-for-ai-organizations/"
   
   >moving a capability from impressive to load-bearing</a>
: name the owner, put the adoption number in a standing review, and remove the old step for the cases the new one covers, until the assistant is the route people actually take.</p>
]]></content:encoded></item><item><title>Unsupervised</title><link>https://lawzava.com/blog/2026-08-12-unsupervised/</link><pubDate>Wed, 12 Aug 2026 09:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-08-12-unsupervised/</guid><description>Producing the work can be handed to a machine. Answering for it cannot. What an organization values when machines do most of the making, what people are for, and four things to try this week.</description><content:encoded><![CDATA[<p>Producing plausible work has become close to free. Knowing whether it is any good
has not. Undoing it has not. Answering for it has not. Deciding what deserves to
exist has not, and never was. The scarcity moved, and practices built for the old
one keep running with nothing behind them.</p>
<p>What the machines give back is not room to ship more. It is the chance to attempt
work that used to need a company, to serve people the old cost floor priced out,
and to spend a working life on the part of the work that is worth a life. A
company that spends the surplus on volume has been handed a decade and bought a
quarter with it.</p>
<p>Everything here turns on one thing. The work is how people get made. People are
not how the work gets made.</p>
<h2 id="what-i-value">What I value</h2>
<p><strong>Verifying</strong> over producing.</p>
<p><strong>Earned autonomy</strong> over granted autonomy.</p>
<p><strong>Enforced limits</strong> over declared intent.</p>
<p><strong>Doing the work</strong> over approving it.</p>
<p><strong>Judgment that compounds</strong> over output that repeats.</p>
<p><strong>Apprenticeship</strong> over throughput.</p>
<p><strong>Problems surfaced</strong> over progress reported.</p>
<p><strong>Independent sources that can disagree</strong> over one that cannot be wrong.</p>
<p>I want the right column too. What moved is where the scarcity sits.</p>
<h2 id="how-i-work">How I work</h2>
<p>A process nobody can check is not automated. It is unsupervised. The check comes
before the thing it protects: the test before the pipeline, the alarm before the
deploy, the dry run before the announcement.</p>
<p>Verification rises with the consequence of being wrong. Produce enough to learn
from someone real, verify enough to trust an act that repeats or cannot be taken
back, and where the work decides nothing, do neither.</p>
<p>Autonomy is earned with evidence and taken back the same way. For machines it
attaches to a step. For people it widens across a domain as their judgment earns
it, and narrows at the smallest place the evidence indicts. Nobody should live
permanently on probation. And evidence expires: what earned trust last year
describes last year&rsquo;s system, and nothing announces the change.</p>
<p>Nothing is done when it works. It is done when something checks it, an owner
carries the outcome, and the way back has been walked at least once. A rollback
nobody has rehearsed is a rumour.</p>
<p>Some work has no decisive check at a price anyone will pay. Mark it, keep people
on it, and never let a number stand in for what cannot be measured.</p>
<p>Nobody is the only source of evidence that they are doing the thing, and that
includes the machine that did it. You cannot feel whether the machine helped:
work goes faster in the hand and slower on the clock, and nobody has trained that
out of anyone.</p>
<p>Producing the work can be handed to a machine. Answering for it cannot. The
machine wrote it in a second and somebody carries it for a year.</p>
<p>Deciding to kill something is not killing it. It is alive for exactly as long as
its permissions still work.</p>
<p>Measure the system in public. Measure the person in private, and publish who did
the measuring, on what evidence, and who can overturn it. Pay and promote for
judgment under uncertainty, for spreading what works, and for carrying what does
not.</p>
<h2 id="what-people-are-for">What people are for</h2>
<p>Every time a machine takes the making from someone, they are owed a harder
question and not a smaller job. If the harder question does not come with more
standing, it was a smaller job with better words.</p>
<p>Beginner&rsquo;s work is what made the expert, and it is disappearing. Give that work
to beginners anyway, because a trade that admits nobody has stopped being a
trade. A company that ships more this year and can make fewer experts than last
year has eaten capital and called it margin. No dashboard you already have will
show it, so count the people you took from beginner to independent and publish
that beside what you shipped.</p>
<p>Refuse work whose value depends on weakening the agency of the people it touches.
Such work can be profitable and perfectly controlled. Whether its success is
worth causing is the question, and it is asked before the controls and not
after. Between two things
you could build and defend, build the one that leaves people more able to act
without you.</p>
<p>Anyone a decision lands on can reach a person who can explain it and change it.
Not because the machine is often wrong, but because being processed by something
that cannot be asked is a harm at any error rate.</p>
<p>If the work is handed to you rather than by you, all of that is what somebody
owes you: work that can go wrong, a harder question when a machine takes the
making, a name and a route when a decision goes against you. Ask for them by
name. Asking is not insubordination, and if it is treated as insubordination
where you are, you have your answer on your first day instead of in your third
year.</p>
<h2 id="where-to-start">Where to start</h2>
<p>None of this needs agreeing with first. Four things are doable this week, and
each hands back its own evidence.</p>
<p>Ship one change only after a check you did not write.</p>
<p>Before you let anything run on its own, walk the way back once, by hand. You will
find a rollback or you will find a rumour.</p>
<p>Find something you declared dead last year and try its permissions. Whatever
still answers was never killed.</p>
<p>Put a name and a route on one automated decision that lands on people, and ask
the ones it went against whether they were told anything they could use.</p>
<p>Then stop doing them as an audit, because an audit is a thing you pass. Each one
is fastened to a moment in the work and comes back when the moment does: a check
you did not write, every time something ships whose failure would cost you; the
way back walked, every time something is trusted to run alone; the permissions
tried, every time something is retired; a name and a route, every time a decision
lands on a person.</p>
<h2 id="how-you-would-know-i-am-wrong">How you would know I am wrong</h2>
<p>Every line above should be a bet, and a bet that cannot lose is not a bet. A test
has to be losable by the line being wrong rather than by the world moving, so a
clause that fires when the machine improves is a timer and not a bet. These five
are mine. Where a line here has no test yet, that is a debt I owe and not a
privilege I am claiming.</p>
<p>Verifying is misplaced when the work you checked went wrong as often as the work
you let through.</p>
<p>Earning is theatre when what you trusted on sight held up as well as what you
made climb for it.</p>
<p>Apprenticeship is sentiment when people who were never given work that could go
wrong turn out able to make the same calls unaided as the people who were.</p>
<p>Refusing is posturing when the work you came closest to turning down, and built
anyway, left the people it touched more able to act than your safer work did.</p>
<p>The reachable person is a courtesy when the people who had a decision go against
them used it and said the wait was not worth it.</p>
<p>When one of these arrives, the failure counts against the line and not against
you for having believed it. Drop it and say so.</p>
<h2 id="how-this-dies">How this dies</h2>
<p>The last manifesto did not die. It won, and was hollowed out, which is worse. It
spread as vocabulary while behaviour stayed home, and its heirs made it immune,
so no failure could count against it. A method that explains every failure as
incomplete adoption has arranged never to learn.</p>
<p>So if these words arrive and no decision changes, they failed there. And if most
of this does not survive contact with your organization, it was wrong about your
organization. A manifesto that cannot be wrong is not a manifesto. It is a
liturgy.</p>
<p>Correct me rather than quote me.</p>
]]></content:encoded></item><item><title>Leading Senior Engineers in the AI Era: Autonomy, Standards, and Accountability</title><link>https://lawzava.com/blog/2026-07-14-leading-senior-engineers-ai-era/</link><pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-07-14-leading-senior-engineers-ai-era/</guid><description>Leading senior engineers on AI features: a written definition of done with an owned eval, a named failure mode, a rollback drill, and a paging threshold.</description><content:encoded><![CDATA[<p>A support assistant drafted forty refunds last quarter against a policy clause that had been retired three weeks earlier. The drafts read clean, reviewers approved most of them, and nobody could say which day the drift started. The code had passed review. The tests were green. The model did exactly what it was built to do, on context that had gone stale underneath it.</p>
<p>That is the output a senior engineer now owns: something a model produced that the owner cannot fully explain. The management question is no longer &ldquo;did you write good code.&rdquo; It is &ldquo;how do you know the thing you didn&rsquo;t write is safe to turn on.&rdquo; The owner ships when four things are true, in writing, and each carries a number they can defend.</p>
<p><strong>It clears an owned eval on the unhappy paths.</strong> Not a vibe check but 200 cases the owner curated by hand: refund requests phrased as threats, tickets in the wrong language, prompt-injection pasted from a customer email, accounts with conflicting prior promises. The bar is 95% on that adversarial set, not 99%. Above 95% on a set this small you are usually overfitting: the cases have leaked into prompts, or the team has tuned to the test. Set it where the residual failures are ones the reviewer reliably catches. And the set rots on purpose: every production escalation becomes a new case, a tenth rotate out monthly, the owner holding back cases never tuned against. A frozen eval is a demo with a number on it; closing that gap is  <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >evaluation maturity</a>
.</p>
<p><strong>Its top failure mode is named, with a detection signal.</strong> Here the mode is &ldquo;confidently drafts a refund the policy forbids.&rdquo; The signal is specific: a sampled audit comparing drafted amount against the policy ceiling, plus a flag whenever the draft cites a policy section that does not exist. If the owner cannot say what it most often gets wrong and how a dashboard would surface it, they have not found the failure mode. They have hoped there isn&rsquo;t one.</p>
<p><strong>Rollback has been exercised, not documented.</strong> Someone  <a href="/blog/2021-09-06-feature-flags-at-scale/"
   
   >flipped the flag</a>
 back to human-only handling in production last week, watched the queue drain, and confirmed nothing leaked. A rollback that has only ever lived in a runbook is a guess, and you discover it is wrong during the  <a href="/blog/2026-06-02-ai-incident-review-changes-architecture/"
   
   >incident</a>
, which is the worst possible time to learn.</p>
<p><strong>The escalation threshold is a number you can measure.</strong> Edit rate is easy: page if the reviewer rewrites more than 50% of drafts, because past half the assistant manufactures review work instead of removing it, and the unit economics have inverted. Stale context, the opening refund, is the hard one, so you instrument it rather than assert it. Every draft logs the version of each source it pulled: the policy revision, the read-time of the account record. At audit you label a draft stale when a source it relied on had already been superseded by the time the human acted: the policy version cited is no longer live. Sample a few hundred a day and you have a rate. Page at 3% over a rolling 1,000, because at a 95% review catch rate, 3% stale drafts put roughly 0.15% in front of a customer: the leak you decided you could afford. Raise the catch rate and you earn the right to raise the threshold.</p>
<p>None of this requires reading code to inspect, which makes it the board&rsquo;s lever, not the team&rsquo;s secret. Ask for the written definition-of-done for your single most important AI feature: which pass rate on which cases, which named failure mode, which rollback drill, which paging number, and the one name accountable for it. If what comes back is vague, the vagueness is not a documentation gap. It is the failure mode, still unnamed, and you have located your largest AI risk, which most oversight never does. Leading seniors is now mostly making that document exist, owned by one person, and boring, because every blank still interesting is a place the system can fail with no agreed way to know.</p>
]]></content:encoded></item><item><title>The Anti-Fragile AI Organization</title><link>https://lawzava.com/blog/2026-07-02-anti-fragile-ai-organization/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-07-02-anti-fragile-ai-organization/</guid><description>A warm LLM fallback is a standing cost that needs an owner. Price portability per feature, and turn each vendor shock into a capability you keep.</description><content:encoded><![CDATA[<p>Almost nobody runs a working fallback, and the reason is never ignorance. Strip away Taleb&rsquo;s vocabulary and the prescription underneath is thirty years old: invert your dependencies,  <a href="/blog/2024-03-18-multi-model-strategies/"
   
   >hide the vendor behind an interface</a>
, keep a fallback ready. Hexagonal architecture had a name before anti-fragility did. The engineering is not the hard part, and pretending it is wastes your time. What actually defeats the fallback is that a warm second provider is a tax somebody has to keep paying, and taxes with no owner do not get paid.</p>
<p>Keeping a provider genuinely warm is a standing cost, not a build. Your eval suite has to pass green against both providers on every prompt change. You maintain two sets of golden outputs. When one provider alters its tool-call encoding or its structured-output mode, you eat the fix to keep the boundary honest. Budget it as a fixed slice of the boundary team&rsquo;s capacity, indefinitely, plus the inference spend of the shadow runs. If that line item lives in no one&rsquo;s plan, you do not have a fallback. You have an aspiration and a grep result.</p>
<p>The boundary also leaks exactly where the value is. Constrained JSON-schema output on one provider becomes &ldquo;ask for JSON and parse defensively&rdquo; on another. Parallel tool calls on one go sequential on the other. Context limits, safety-filter behavior, and per-token economics differ enough that the same prompt yields a different product. A boundary that hides all of this can only promise the intersection, which means the price of portability is the provider-specific capability you surrendered to get it. That is a real trade, and it has a rule rather than a vibe: the critical path stays portable and dumb and carries a green fallback; a differentiating feature is allowed to depend on one provider, and in place of a fallback it carries a written number for what re-homing it would cost. Decide it per feature, on purpose, not by default.</p>
<p>Then the shock arrives. A vendor doubles the price effective next cycle. Three weeks of runway. You will not build a clean adapter across forty call sites in three weeks with a price gun to your head, and any plan that assumes otherwise is the fragile response in disguise. What three weeks actually buys is narrower and worth more: wrap the one critical path, get its fallback eval green, flip a slice of traffic, and write down the leaks you punted and what the other thirty-nine sites would cost. You solved the price problem. You also keep a swap that is now an afternoon on that path and a costed map of the rest, and the next path is cheaper because the scaffolding exists. That is the difference between robust and anti-fragile: surviving versus walking away holding a capability the shock paid for.</p>
<p>That capability never accumulates if the work sits in one team, and the reason is structural, not a lack of will. One group owns the model integration, the eval harness, the prompt registry, and the  <a href="/blog/2026-05-14-why-ai-platform-teams-become-bottlenecks/"
   
   >pager</a>
. A shock arrives, the same five people absorb it, restore service, close the ticket. That is not an organization. That is a single point of failure the org chart happens to call a department. Restoring service and  <a href="/blog/2026-06-02-ai-incident-review-changes-architecture/"
   
   >changing the architecture</a>
 so the next shock is cheaper are two different jobs, and the second needs the slack the on-call team just spent surviving the first. The conversion never happens, because the people who could do it are holding the pager.</p>
<p>So split the jobs. On-call restores service. The conversion is a tracked deliverable owned by someone off the pager that week, with the fallback&rsquo;s carrying cost funded in their plan, not scavenged from spare time. Then push the portability decision down: the boundary team owns the shared interface and harness, but each product team owns its path&rsquo;s portability budget and pays to keep that path&rsquo;s fallback green. The work spreads to the people who own the paths instead of bottlenecking on five, and the authority to flip the switch sits with the team that owns the consequence.</p>
<p>The morning after any shock, that machinery has either left something behind or it has not. You are holding a warm path you can split traffic onto, an eval that catches the failure class that just bit you, a  <a href="/blog/2026-06-09-ai-vendor-negotiation-playbook/"
   
   >renegotiated contract with an exit clause</a>
: concrete things that were not there the week before. Or you are holding none of them. &ldquo;We got through it and went back to normal&rdquo; is the second case: service restored, full freight paid, not one green eval or warm path added that lowers the price of the next hit.</p>
]]></content:encoded></item><item><title>The New Talent Stack: Product, Platform, and Applied AI Must Work as One System</title><link>https://lawzava.com/blog/2026-06-18-new-talent-stack-for-ai-organizations/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-06-18-new-talent-stack-for-ai-organizations/</guid><description>AI organizations create leverage when product, platform, and applied AI are designed as one operating system instead of three kingdoms.</description><content:encoded><![CDATA[<p>Most  <a href="/blog/2024-12-02-building-ai-teams/"
   
   >AI hiring plans</a>
 are trying to fix an interface problem with resumes. If product, platform, and applied AI are not built as one operating system, new headcount adds motion but not leverage. The constraint is usually system design rather than talent scarcity.</p>
<h2 id="recruiting-alone-cannot-fix-a-broken-stack">Recruiting Alone Cannot Fix a Broken Stack</h2>
<p>AI organizations often describe their issue as “we need stronger talent.” In many cases, they already have capable people. What they lack is a clear operating contract across teams.</p>
<p>The pattern is familiar:</p>
<ul>
<li>product optimizes for release velocity</li>
<li>platform optimizes for reliability and control</li>
<li>applied AI optimizes for model behavior and evaluation quality</li>
</ul>
<p>Each goal is rational. The breakdown happens at the handoffs.</p>
<p>When interfaces are unclear, every launch becomes a negotiation. When interfaces are explicit, the same teams produce compounding output.</p>
<h2 id="the-three-layer-talent-stack">The Three-Layer Talent Stack</h2>
<p>A healthy stack has three interlocking layers with distinct responsibilities:</p>
<ol>
<li><strong>Product</strong> owns user outcomes and business success metrics.</li>
<li><strong>Platform</strong> owns safe defaults, deployment paths, and observability.</li>
<li><strong>Applied AI</strong> owns workflow behavior, retrieval/prompting/routing choices, and evaluation quality.</li>
</ol>
<p>They are system components with different jobs.</p>
<p>If product outruns platform, quality debt accumulates.
If platform outruns product, infrastructure becomes generic overhead.
If applied AI outruns both, you get technically impressive demos that never operationalize.</p>
<h2 id="where-organizations-usually-break">Where Organizations Usually Break</h2>
<p>Most failures are boundary failures, not individual failures.</p>
<p>Common symptoms:</p>
<ul>
<li>no explicit owner for the model-to-product handoff</li>
<li>platform operating as a  <a href="/blog/2026-05-14-why-ai-platform-teams-become-bottlenecks/"
   
   >ticket queue instead of an enablement layer</a>
</li>
<li>applied AI measured by demo novelty instead of  <a href="/blog/2026-05-19-stop-building-internal-ai-tools-no-one-uses/"
   
   >adoption in live workflows</a>
</li>
<li>product committing features that infra cannot support safely</li>
</ul>
<p><strong>Org debt is usually interface debt with better branding.</strong></p>
<h2 id="design-the-stack-intentionally">Design the Stack Intentionally</h2>
<p>The fix is not “more syncs.” The fix is explicit decision rights.</p>
<ul>
<li>product owns problem selection and business tradeoffs</li>
<li>platform owns reliability guardrails and release safety</li>
<li>applied AI owns workflow performance and  <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >evaluation integrity</a>
</li>
<li>leadership owns  <a href="/blog/2026-06-10-ai-leadership-bench-roles-interfaces/"
   
   >escalation rules</a>
 when tradeoffs conflict</li>
</ul>
<p>Once this is explicit, hiring quality improves. You stop searching for mythical generalists and start  <a href="/blog/2026-05-26-hiring-operators-for-ai-teams/"
   
   >hiring operators</a>
 who can perform inside a coherent system.</p>
<h2 id="what-to-evaluate-before-adding-headcount">What to Evaluate Before Adding Headcount</h2>
<p>Before opening new roles, run this short check:</p>
<ol>
<li>Are cross-team handoffs documented and current?</li>
<li>Does each layer have clear success metrics it actually controls?</li>
<li>Are escalation paths clear when speed, reliability, and quality disagree?</li>
<li>Are teams rewarded for system outcomes rather than local optimization?</li>
</ol>
<p>If those answers are weak, fix interfaces first. New hires will scale the current operating model, good or bad.</p>
]]></content:encoded></item><item><title>The Post-Prototype AI Org: Operating Models That Survive Year Two</title><link>https://lawzava.com/blog/2026-06-10-post-prototype-ai-org/</link><pubDate>Wed, 10 Jun 2026 12:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-06-10-post-prototype-ai-org/</guid><description>Year-two AI failure usually comes from org-design mismatch, not model-quality mismatch. The handoffs are where the system slows down.</description><content:encoded><![CDATA[<p>A lot of AI orgs look healthy in month three and brittle by year two. The model usually did not fail. The operating model did. Prototype energy is easy to create; durable coordination is not. Any team can ship something exciting once. The year-two question is whether the company can keep shipping after the novelty fades.</p>
<h2 id="why-the-prototype-phase-hides-the-real-problem">Why the prototype phase hides the real problem</h2>
<p>In the early phase, AI teams often succeed because everyone is close to the work. Decisions are informal, context is shared, and the whole system fits in a few people’s heads. That stops scaling almost immediately.</p>
<p>As soon as the team grows, the same strengths turn into liabilities:</p>
<ul>
<li>knowledge becomes hidden</li>
<li>approvals multiply</li>
<li>handoffs slow down</li>
<li>nobody owns the  <a href="/blog/2026-06-10-ai-leadership-bench-roles-interfaces/"
   
   >interface boundaries</a>
</li>
</ul>
<p>What worked when the team was small no longer works when the company needs predictability.</p>
<h2 id="the-operating-model-should-be-explicit">The operating model should be explicit</h2>
<p>A post-prototype AI org needs to define how work moves.</p>
<p>The model should answer:</p>
<ul>
<li>who owns the user problem?</li>
<li>who owns the runtime?</li>
<li>who owns the quality signal?</li>
<li>who owns the  <a href="/blog/2026-05-07-ai-governance-without-bureaucracy/"
   
   >risk boundary</a>
?</li>
<li>who can stop the release?</li>
</ul>
<p>Without those answers, the team is improvising around gaps that will eventually become incidents or delays.</p>
<h2 id="handoffs-are-the-hidden-bottleneck">Handoffs are the hidden bottleneck</h2>
<p>Most  <a href="/blog/2026-05-28-ai-roadmaps-survive-reality/"
   
   >AI roadmaps</a>
 do not fail because the team lacks ideas. They fail because each handoff adds ambiguity.</p>
<p>The problem shows up in predictable places:</p>
<ul>
<li>product asks for speed, platform asks for safety</li>
<li>applied AI wants more freedom, compliance wants more proof</li>
<li>leadership wants output, the system wants more control</li>
</ul>
<p>That tension is normal. What is not normal is leaving it unresolved.</p>
<p>A good operating model turns tension into a documented interface, not a recurring crisis.</p>
<h2 id="scale-requires-fewer-heroics">Scale requires fewer heroics</h2>
<p>The post-prototype org has to depend less on heroic behavior and more on repeatable behavior.</p>
<p>That usually means:</p>
<ul>
<li>clearer ownership</li>
<li> <a href="/blog/2026-06-10-decision-latency-p-and-l-variable/"
   
   >smaller decision surfaces</a>
</li>
<li>stronger  <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >eval gates</a>
</li>
<li>visible  <a href="/blog/2026-05-14-build-the-system-the-model-cannot-break/"
   
   >rollback paths</a>
</li>
<li>fewer ambiguous exceptions</li>
</ul>
<p>This can feel slower at first, but it is the only way the org gets faster at scale.</p>
<h2 id="a-simple-test">A simple test</h2>
<p>Ask whether the AI system can survive a senior person going on vacation for two weeks.</p>
<p>If the answer is “not really,” the organization is still running on hidden tribal knowledge.</p>
<p>If the answer is “yes, with documented ownership and a stable operating model,” the company is moving from prototype to production.</p>
<p>That is the real year-two test.</p>
]]></content:encoded></item><item><title>The Operating Cadence: Turning AI Leadership Interfaces Into Predictable Output</title><link>https://lawzava.com/blog/2026-06-10-operating-cadence-ai-leadership-interfaces/</link><pubDate>Wed, 10 Jun 2026 11:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-06-10-operating-cadence-ai-leadership-interfaces/</guid><description>Leadership interfaces decay without rhythm. A weekly metrics review, monthly outcome review, and quarterly architecture audit keep AI ownership real.</description><content:encoded><![CDATA[<p>A  <a href="/blog/2026-06-10-ai-leadership-bench-roles-interfaces/"
   
   >bench with clear interfaces</a>
 is a necessary foundation, but on its own it does not compound. Without rhythm, documented ownership drifts back into informal updates, and informal updates beat formal ones right up until they don&rsquo;t. Cadence is the mechanism that keeps interfaces load-bearing.</p>
<h2 id="interfaces-without-cadence-degrade">Interfaces Without Cadence Degrade</h2>
<p>When a team documents who owns what, the clarity is real for a few weeks. Then the pace picks up, the weekly sync gets skipped once, and the product owner starts resolving platform questions directly because it is faster. The interface is still on paper. It is no longer operational.</p>
<p>This is the failure mode that connects a well-designed bench to a  <a href="/blog/2026-06-10-post-prototype-ai-org/"
   
   >year-two org</a>
 that is back to improvising. Nobody dismantled the system. They just stopped running it.</p>
<p>Formal coordination loses to informal coordination every time informal coordination has lower friction. The only fix is making the formal cadence the path of least resistance: keep it short, metric-anchored, and non-negotiable.</p>
<h2 id="the-three-cadences-that-compound">The Three Cadences That Compound</h2>
<p>Three rhythms cover the full operating surface of a scaling AI program.</p>
<p><strong>Weekly operating cadence:</strong> 30 minutes, same metrics every cycle. Latency, error rate,  <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >eval scores</a>
, blocked work. The point is signal, not status. Any metric outside its threshold triggers an owner, not a discussion. If nothing is outside threshold, the meeting ends early.</p>
<p><strong>Monthly outcome review:</strong> 90 minutes, owners present against targets set the previous month. What moved, what did not, what is at risk next month. This is where product and platform tradeoffs surface before they become incidents. Governance owner attends. Decisions are recorded with the owner and the date.</p>
<p><strong>Quarterly architecture audit:</strong> half day, forward-looking. Where is the system accumulating hidden cost? What capability investment is being deferred? What would break first if the load doubled? The audit produces a short list of bets for the next quarter, not a roadmap deck.</p>
<p>Each cadence locks in a different time horizon. Weekly locks in operational latency. Monthly locks in outcome reliability. Quarterly locks in capability investment. Together they cover the full range from &ldquo;is anything on fire today&rdquo; to &ldquo;are we building toward where the load is going.&rdquo;</p>
<h2 id="what-each-cadence-prevents">What Each Cadence Prevents</h2>
<p>The weekly cadence prevents  <a href="/blog/2025-11-10-ai-incident-management/"
   
   >alert fatigue</a>
 from becoming normalized degradation. Teams that skip it tend to discover the same problems later, at higher cost, under more pressure.</p>
<p>The monthly review prevents the gap between product ambition and platform reality from widening silently. That gap is where most  <a href="/blog/2026-05-28-ai-roadmaps-survive-reality/"
   
   >AI roadmap slippage</a>
 hides. By the time it is visible to leadership, it is already a quarter behind.</p>
<p><em>Cadence does not eliminate incidents. It shortens  <a href="/blog/2026-06-10-decision-latency-p-and-l-variable/"
   
   >the distance between a signal and a decision</a>
.</em></p>
<p>The quarterly audit prevents  <a href="/blog/2026-06-02-ai-incident-review-changes-architecture/"
   
   >incident-driven re-architecture</a>
. The single most expensive pattern in scaling AI programs is emergency redesign under production pressure. Orgs that run a quarterly audit tend to make the same architectural changes earlier, cheaper, and with less organizational disruption. The audit guarantees nothing. It forces the conversation that should happen before the crisis.</p>
<h2 id="the-predictability-test">The Predictability Test</h2>
<p>A cadence is working when the team can answer one question before the quarter ends: what is the most likely bottleneck next quarter, and who owns the intervention?</p>
<p>It is a structural test. If nobody can answer it, the cadence is collecting status but not producing foresight. The monthly reviews are not surfacing risk early enough, or the quarterly audit is not connected to the weekly signal.</p>
<p>If the team can answer it, even roughly, the cadence is compounding. The interfaces are being exercised on a predictable rhythm, and that rhythm is generating the kind of organizational memory that makes year-two scale possible without heroics.</p>
]]></content:encoded></item><item><title>Designing the AI Leadership Bench: Roles, Interfaces, and Failure Boundaries</title><link>https://lawzava.com/blog/2026-06-10-ai-leadership-bench-roles-interfaces/</link><pubDate>Wed, 10 Jun 2026 10:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-06-10-ai-leadership-bench-roles-interfaces/</guid><description>Scaling AI needs a leadership bench: named owners for product, platform, applied AI, and governance, with failure handoffs rehearsed before incidents.</description><content:encoded><![CDATA[<p> <a href="/blog/2026-05-21-ai-technical-leadership/"
   
   >AI leadership</a>
 fails when the interfaces between leaders are missing, and more senior titles do not supply them. A real leadership bench is the decision system connecting product, platform, reliability, and governance. If those seams are unclear, incidents turn into organizational confusion before they become technical recovery.</p>
<h2 id="a-bench-is-an-interface-map">A Bench Is an Interface Map</h2>
<p>Many companies think “strong bench” means “we hired senior people.” That is necessary, but not sufficient.</p>
<p>A working bench answers four questions without debate:</p>
<ul>
<li>who owns product tradeoffs</li>
<li>who owns platform reliability</li>
<li>who owns  <a href="/blog/2026-05-07-ai-governance-without-bureaucracy/"
   
   >model governance</a>
 and risk boundaries</li>
<li>who owns escalation when those priorities collide</li>
</ul>
<p>If the answers depend on who is online that day, the bench is not operational.</p>
<h2 id="core-roles-and-decision-rights">Core Roles and Decision Rights</h2>
<p>The exact titles vary. The interfaces should not.</p>
<p><strong>Product owner:</strong> accountable for business outcome and adoption targets.</p>
<p><strong>Platform owner:</strong> accountable for safe defaults,  <a href="/blog/2025-03-31-ai-observability-deep/"
   
   >observability</a>
, and deployment reliability.</p>
<p><strong>Applied AI owner:</strong> accountable for workflow behavior, routing, and  <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >evaluation quality</a>
.</p>
<p><strong>Governance owner:</strong> accountable for explicit, reviewable risk boundaries.</p>
<p>The goal is unambiguous ownership when tradeoffs are real.</p>
<h2 id="failure-boundaries-beat-hero-culture">Failure Boundaries Beat Hero Culture</h2>
<p>Healthy leadership systems plan for predictable stress cases instead of hoping for heroic response.</p>
<p>Define boundary behavior for events like:</p>
<ul>
<li>model quality degradation</li>
<li>vendor policy or terms changes</li>
<li>quiet workflow failure that evades basic monitoring</li>
<li>loss of a  <a href="/blog/2026-05-26-hiring-operators-for-ai-teams/"
   
   >key operator</a>
</li>
</ul>
<p>If those handoffs are documented and rehearsed, incidents stay technical. If not, incidents become political.</p>
<p>One reliable warning sign: one person is expected to explain the full system from memory. That is not a bench. That is a single point of organizational failure.</p>
<h2 id="how-to-build-the-bench-in-practice">How to Build the Bench in Practice</h2>
<p>Make interfaces concrete and testable:</p>
<ul>
<li>document what each owner can decide without escalation</li>
<li>define escalation thresholds for speed vs reliability vs governance conflicts</li>
<li>map core metrics to the leader who can actually move them</li>
<li>rehearse  <a href="/blog/2026-06-02-ai-incident-review-changes-architecture/"
   
   >incident handoffs</a>
 before live incidents force improvisation</li>
</ul>
<p>This is operational hygiene.</p>
<p><strong>Design boundaries before you design org charts.</strong></p>
]]></content:encoded></item><item><title>Hiring for AI Teams: The Operator Profile That Scales</title><link>https://lawzava.com/blog/2026-05-26-hiring-operators-for-ai-teams/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-05-26-hiring-operators-for-ai-teams/</guid><description>The AI hires that scale are operators who handle ambiguity, systems tradeoffs, and verification pressure. Four traits and four interview questions.</description><content:encoded><![CDATA[<p>The best AI hires are operators: people who can turn ambiguity into a system, make the failure mode legible, and keep shipping when the first answer is wrong. Narrating the model stack is a different, cheaper skill.</p>
<p>That is why judgment matters more than hype. Teams that hire for excitement get enthusiastic meetings. Teams that hire for operator discipline get leverage.</p>
<h2 id="the-operator-profile">The Operator Profile</h2>
<p>Strong AI operators usually have four traits:</p>
<ul>
<li>they can turn a vague brief into a tractable plan without waiting for perfect inputs</li>
<li>they know enough about systems tradeoffs to challenge weak assumptions early</li>
<li>they care about verification as much as output</li>
<li>they can move between engineering, product, and executive language without flattening the nuance</li>
</ul>
<p>Model trivia is cheap. Operator judgment is what survives contact with production.</p>
<p>The market is full of people who can name the newest framework. The shortage is people who can keep a system healthy when the workload changes, the vendor shifts, or the first release misbehaves.</p>
<h2 id="what-most-teams-hire-wrong">What Most Teams Hire Wrong</h2>
<p> <a href="/blog/2024-12-02-building-ai-teams/"
   
   >AI hiring</a>
 goes off the rails when teams reward signals that are easy to notice but hard to run with.</p>
<p>Teams over-index on:</p>
<ul>
<li>prompt fluency without operational discipline</li>
<li>research taste without delivery habits</li>
<li>architecture opinions without  <a href="/blog/2025-11-10-ai-incident-management/"
   
   >incident literacy</a>
</li>
<li>product instinct without measurement rigor</li>
</ul>
<p>None of those traits is bad. The problem is imbalance.</p>
<p>A strong AI team needs people who will own the boring parts:  <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >evals</a>
, fallback logic, access boundaries, cost control, and documentation precise enough that someone else can operate the system later.</p>
<p>If a candidate can talk fluently about models but cannot explain how they would debug a bad release, they are not ready to own production AI.</p>
<h2 id="the-interview-questions-that-matter">The Interview Questions That Matter</h2>
<p>You do not need a clever  <a href="/blog/2018-04-16-technical-interviewing-what-actually-works/"
   
   >hiring process</a>
. You need questions that force real evidence.</p>
<p>Ask candidates to walk through:</p>
<ol>
<li>
<p><strong>A system they had to stabilize.</strong>
What was broken, how did they know, and what changed after they touched it?</p>
</li>
<li>
<p><strong>A decision they reversed.</strong>
Strong operators do not defend bad ideas forever. They update when the evidence changes.</p>
</li>
<li>
<p><strong>A workflow they measured.</strong>
If they cannot show how they connected work to metrics, they probably did not own the outcome.</p>
</li>
<li>
<p><strong>A failure they made safer.</strong>
In AI, good operators do not eliminate failure. They bound it.</p>
</li>
</ol>
<p>A useful answer is concrete, a little messy, and grounded in actual work. The worst answer sounds polished and empty.</p>
<h2 id="hire-for-the-shape-of-the-system">Hire for the Shape of the System</h2>
<p> <a href="/blog/2026-02-16-ai-team-structures/"
   
   >AI teams</a>
 do not need the same operator profile in every context. Research-heavy, production-heavy, and regulated enterprise teams all demand different instincts.</p>
<p>If you want a research-heavy team, hire for exploration and rigor. If you want a production-heavy team, hire for stability and operational discipline. If you want a regulated enterprise team, the bar is not “exciting.” The bar is whether this person can help you ship safely, repeatedly, and without heroics.</p>
<p>That is the real operator profile:</p>
<ul>
<li>can handle uncertainty without freezing</li>
<li>can make tradeoffs explicit</li>
<li>can  <a href="/blog/2026-05-14-build-the-system-the-model-cannot-break/"
   
   >leave behind a system other people can run</a>
</li>
<li>can keep pace without turning every launch into a performance</li>
</ul>
]]></content:encoded></item><item><title>Technical Leadership in the AI Era: Throughput Over Trends</title><link>https://lawzava.com/blog/2026-05-21-ai-technical-leadership/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-05-21-ai-technical-leadership/</guid><description>Technical leadership in 2026: anchor decisions in throughput, verification, and operability instead of chasing the latest agent framework.</description><content:encoded><![CDATA[<p>AI does not change the core job of technical leadership. It changes the cost of being vague. In 2026, the best leaders still do the same three things: set direction, remove friction, and keep production systems measurable. The difference is that AI makes every weak assumption show up faster.</p>
<p>The mandate is throughput. More noise and more  <a href="/blog/2026-05-05-measure-ai-progress-without-theater/"
   
   >experimentation theater</a>
 work against it.</p>
<h2 id="the-leadership-pivot-focus-on-throughput">The Leadership Pivot: Focus on Throughput</h2>
<p>Organizations do not pay technical leaders to keep up with model releases. They pay them to improve  <a href="/blog/2026-03-30-throughput-engineer-headcount-lagging-metric/"
   
   >organizational throughput</a>
.</p>
<p>That means reducing cognitive overhead, tightening verification, and making deployment paths boring enough that teams can move without drama. If you cannot measure what an AI workflow produced, or what it cost to produce it, you do not have an operating system yet. You have a prototype with invoices.</p>
<p>The leadership question is simple: are we removing blockers faster than we are adding complexity?</p>
<h2 id="decision-making-in-practice">Decision-Making in Practice</h2>
<p>AI work gets messy when teams debate tools before they define the outcome.</p>
<p>Good leaders force the conversation back to first principles:</p>
<ul>
<li>What business metric should change if we ship this?</li>
<li>What latency budget do we actually have?</li>
<li> <a href="/blog/2026-05-14-build-the-system-the-model-cannot-break/"
   
   >What happens when the model is wrong?</a>
</li>
</ul>
<p>Those questions cut through a lot of noise. They keep the team from turning architecture meetings into opinion contests about  <a href="/blog/2023-04-03-vector-databases-explained/"
   
   >vector databases</a>
, prompt styles, or the latest agent framework.</p>
<p>If the answer to any of those questions is fuzzy, the work is not ready for serious implementation.</p>
<h2 id="define-good-enough-and-measure-it">Define “Good Enough” and Measure It</h2>
<p>Reliability covers more than accuracy: consistency, cost, and the ability to  <a href="/blog/2025-03-31-ai-observability-deep/"
   
   >catch degradation before customers do</a>
.</p>
<p>Sometimes  <a href="/blog/2024-08-05-small-models-big-impact/"
   
   >a smaller, cheaper model</a>
 is the right answer. Sometimes the frontier model is worth the price. Don&rsquo;t be religious about either option. Define the bar, test against it, and choose the system that meets it with the least operational pain.</p>
<p>Perfection isn&rsquo;t the goal. Build a system where failure is bounded, expected, and visible.</p>
<h2 id="the-cultural-shift">The Cultural Shift</h2>
<p>Technical leadership still has a change-management problem. Engineers will worry about ownership, safety, and the volatility of the ecosystem. Those concerns are real.</p>
<p>The right response is instrumentation. Debate for its own sake settles nothing.</p>
<p>Stop arguing in design docs about whether a model will work. Build the telemetry that shows whether it works. Stop treating every new framework like a strategy reset. Run small, contained experiments that either produce evidence or die cheaply.</p>
<p>The strongest teams can absorb change without losing control. Sprinting toward the newest beta API doesn&rsquo;t build that. If the team can move quickly, measure clearly, and recover cleanly, AI becomes leverage. If not, it becomes another source of drag.</p>
]]></content:encoded></item><item><title>Stop Building Internal AI Tools No One Uses</title><link>https://lawzava.com/blog/2026-05-19-stop-building-internal-ai-tools-no-one-uses/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-05-19-stop-building-internal-ai-tools-no-one-uses/</guid><description>Internal AI tools die quietly when teams optimize for launch over workflow fit, output trust, and post-launch ownership. One tool failed, one stuck.</description><content:encoded><![CDATA[<p>The demo went well. A mid-size logistics company (roughly 800 people, enough procurement complexity to  <a href="/blog/2026-04-16-ai-capital-allocation-what-to-stop-funding/"
   
   >justify the investment</a>
) had spent three months building an internal AI tool to surface contract terms during vendor negotiations. The launch Slack channel hit 40 reactions in the first hour. A VP called it the kind of thing that changes how the team operates.</p>
<p>Six weeks later, the channel had five messages in it, four of them automated. The procurement leads were still pulling PDFs manually and copying terms into a shared spreadsheet. One support engineer, who had quietly championed the project from the beginning, had reverted to her old database query because &ldquo;the tool doesn&rsquo;t know about the amendments.&rdquo; The tool was still running. Nobody had officially abandoned it. It had simply become invisible.</p>
<p>This pattern is not unusual. It is almost the default.</p>
<h2 id="what-actually-failed">What Actually Failed</h2>
<p>The postmortem conversation usually centers on the wrong things: model choice, interface design, rollout timing. Those are symptoms. The root causes are structural.</p>
<p>The contract tool was built around a narrow slice of the negotiation workflow: surfacing base terms. But procurement work is not base terms. It is base terms plus amendments plus prior history plus the relationship context the lead carries in her head. The tool knew one layer of a five-layer problem. It looked complete in a demo because demos are controlled. Real work is not controlled.</p>
<p>The output trust problem arrived fast. In week two, the tool surfaced an incorrect payment term: technically correct in the original contract, but superseded by a signed amendment it had not been given access to. The lead caught it before it caused damage, but she stopped relying on it after that. <em>One unexplained wrong answer is enough to demote a tool from co-worker to footnote.</em> The team had not  <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >built evaluation into the system</a>
, so there was no way to know how often this happened, which made the uncertainty worse.</p>
<p>Nobody owned adoption after the launch. The engineer who built it moved to a different priority. The VP who celebrated it never checked  <a href="/blog/2025-07-07-ai-product-metrics/"
   
   >sustained usage</a>
. When procurement leads developed workarounds, there was no one watching the signal and no one with a mandate to respond. The tool drifted.</p>
<h2 id="when-it-works">When It Works</h2>
<p>A different team at a professional services firm built something structurally simpler: a tool that drafted the engagement summary section of a client report, pulling from structured notes the consultant had already entered into their project management system. Narrow scope. No novel context required. One predictable output format, reviewed every time before it went anywhere.</p>
<p>The tool stuck, and it was considerably less impressive technically. It stuck because it removed a specific, recurring task that consultants genuinely disliked, it used context they were already maintaining anyway, and the output was always human-reviewed before it mattered. The failure mode was visible and safe. The value was obvious the first time you used it and every time after.</p>
<p>The team lead reviewed usage weekly for the first two months and made three small adjustments based on what she saw. That unglamorous, persistent, post-launch ownership is what made the difference.</p>
<h2 id="the-structural-difference">The Structural Difference</h2>
<p>Both companies built  <a href="/blog/2025-08-04-ai-workflow-automation/"
   
   >AI tools for internal workflows</a>
. One failed quietly, one became a habit. The model and the interface didn&rsquo;t decide it. What decided it was whether the tool was designed around how work actually moves or around  <a href="/blog/2026-05-05-measure-ai-progress-without-theater/"
   
   >what would look good in a demo</a>
.</p>
<p>Tools that survive are ones that fit a narrow, complete slice of a workflow, produce output that is either verifiable or bounded enough to trust, require no context the user does not already have, and have someone whose job it is to watch whether people are actually using them.</p>
<p>That last part is the one most teams skip. Usage is not a launch outcome. It is an operating responsibility.</p>
]]></content:encoded></item><item><title>Why Most AI Platform Teams Become the New Bottleneck</title><link>https://lawzava.com/blog/2026-05-14-why-ai-platform-teams-become-bottlenecks/</link><pubDate>Thu, 14 May 2026 10:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-05-14-why-ai-platform-teams-become-bottlenecks/</guid><description>AI platform teams become bottlenecks when they centralize decisions instead of capabilities. The warning signs, the metrics that expose it, and the fix.</description><content:encoded><![CDATA[<p>AI platform teams become bottlenecks when they start reviewing every use case instead of shipping safe defaults. Once the team needs a ticket to approve basic work, the queue is the product and the platform is just a delay with a nicer name.</p>
<p>Shrinking the team and hoping demand goes away won&rsquo;t fix it. Move decisions out of the queue and into the platform.</p>
<h2 id="a-platform-team-is-a-product-with-a-queue">A Platform Team Is a Product with a Queue</h2>
<p>A healthy  <a href="/blog/2017-12-28-building-platform-teams/"
   
   >platform team</a>
 exists to make repeated decisions disappear.</p>
<p>If every experiment needs a ticket, a Slack ping, and a weekly exception review, the platform is no longer a platform. It is a gate with a service catalog.</p>
<p>The warning signs show up fast:</p>
<ul>
<li>request backlogs that never get smaller</li>
<li>the same exception coming back under a new name</li>
<li>engineers building shadow infrastructure because the official path is too slow</li>
<li>work that should have been standardized long ago still handled by hand</li>
</ul>
<p>Once teams start routing around the platform, the default path has already lost.</p>
<h2 id="what-bottleneck-behavior-looks-like">What Bottleneck Behavior Looks Like</h2>
<p>Bottlenecks rarely announce themselves. They sound like process.</p>
<p>You hear it in the same lines over and over:</p>
<ul>
<li>“We are waiting on the platform team.”</li>
<li>“Can we make this an exception?”</li>
<li>“We built a small internal workaround.”</li>
<li>“The platform is a few weeks behind us.”</li>
</ul>
<p>None of those lines is fatal on its own. The pattern becomes a problem when they turn into the normal way work gets done.</p>
<p>A platform team becomes a bottleneck when it centralizes decisions that should have been made once, written down, and pushed into the default path.</p>
<h2 id="redesign-the-team-around-capabilities-not-control">Redesign the Team Around Capabilities, Not Control</h2>
<p>Good platform teams build  <a href="/blog/2019-03-11-building-internal-developer-platforms/"
   
   >paved roads</a>
.</p>
<p>They own the hard parts once:</p>
<ul>
<li>identity and access patterns</li>
<li> <a href="/blog/2024-03-18-multi-model-strategies/"
   
   >model routing defaults</a>
</li>
<li> <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >evaluation harnesses</a>
</li>
<li>logging and traceability</li>
<li>safe deployment templates</li>
<li>fallback behavior</li>
</ul>
<p>Then they get out of the way.</p>
<p>The wrong shape is a team that has to bless every new use case. The right shape is a team that makes the safe path easier than the unsafe one.</p>
<p>A good test: <strong>a platform team should  <a href="/blog/2026-05-14-build-the-system-the-model-cannot-break/"
   
   >remove waiting, not become a waiting room</a>
.</strong></p>
<h2 id="metrics-that-expose-a-platform-bottleneck">Metrics That Expose a Platform Bottleneck</h2>
<p>Most platform dashboards avoid the real question. You need blunt metrics.</p>
<p>Measure:</p>
<ul>
<li>time from request to usable platform support</li>
<li>exceptions granted per month</li>
<li>shadow systems discovered in production</li>
<li>hours spent waiting on platform review</li>
<li>AI workflows shipped without platform involvement</li>
</ul>
<p>Those metrics tell you whether the platform is compounding or constraining.</p>
<p>If exceptions keep rising and the team calls that “flexibility,” the default path is still too hard to use.</p>
<h2 id="what-good-looks-like">What Good Looks Like</h2>
<p>The best AI platform teams I have seen share three habits:</p>
<ol>
<li>They bias toward self-service.</li>
<li>They make safe defaults boring.</li>
<li>They track the cost of waiting as carefully as the cost of infrastructure.</li>
</ol>
<p>That last one matters. Waiting is not free. Every hour a product team spends blocked on the platform is an hour not spent learning from users.</p>
]]></content:encoded></item><item><title>Build the System the Model Cannot Break</title><link>https://lawzava.com/blog/2026-05-14-build-the-system-the-model-cannot-break/</link><pubDate>Thu, 14 May 2026 09:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-05-14-build-the-system-the-model-cannot-break/</guid><description>A manifesto for AI-native organizations: twelve tenets across strategy, architecture, economics, and people, and the one test that matters in year two.</description><content:encoded><![CDATA[<h2 id="quick-take">Quick take</h2>
<p>An AI-native company is not a company that uses AI. It is a company whose operating model (decisions, ownership, interfaces, capital, and failure boundaries) has been built so AI compounds inside it instead of evaporating around it.</p>
<p>The model will change. The system around it should not.</p>
<p>This is a manifesto. It is opinionated, deliberately. Twelve tenets, four movements, one test. Borrow what works. Argue with the rest.</p>
<hr>
<h2 id="movement-i-strategy">Movement I: Strategy</h2>
<h3 id="1-the-operating-model-is-the-strategy">1. The operating model is the strategy</h3>
<p>The model is the most expensive dependency in your stack. It is not the brain. The brain is everything you build around it: context assembly, retrieval, validation, retries, telemetry, fallback, escalation.</p>
<p>Two companies buy the same frontier model on the same Tuesday. One ships in six weeks with a deterministic fallback, a typed validator, and an eval gate on every PR. The other ships in six months with a notebook of &ldquo;good prompts&rdquo; and a Slack channel for incidents. Same model. Different company.</p>
<p>If your AI plan begins with &ldquo;which model should we buy,&rdquo; you are solving the easiest problem in the room. <strong>The moat is everything around the model.</strong></p>
<h3 id="2-capital-allocation-is-the-first-product-decision">2. Capital allocation is the first product decision</h3>
<p>Great AI teams do not start with a roadmap. They start with  <a href="/blog/2026-04-16-ai-capital-allocation-what-to-stop-funding/"
   
   >a kill list</a>
. Capital is finite. Attention is finite. Support burden is finite.</p>
<p>Three questions before any AI initiative gets funded:</p>
<ol>
<li>Does this increase <strong>margin</strong>, reduce <strong>risk</strong>, or improve <strong>speed</strong>?</li>
<li>Can we measure that effect within one to three quarters?</li>
<li>Do we own the <strong>fallback</strong> if the model or vendor changes?</li>
</ol>
<p>If the answer to all three is not yes, the default is no.</p>
<p>A common pattern in Series B to D companies that quietly stalled in 2024 and 2025: serious engineering and infra budget burned on internal copilots that never crossed adoption threshold, plus a duplicate prompt orchestration layer because two teams built one in parallel. Neither project had a measurable failure mode. Both had a sponsor.</p>
<p>A four-dimension scorecard makes the next budget meeting honest:</p>
<ul>
<li><strong>Adoption:</strong> are real users using it in a real workflow?</li>
<li><strong>Reliability:</strong> does it fail in bounded, observable ways?</li>
<li><strong>Margin:</strong> does it reduce cost or improve unit economics?</li>
<li><strong>Speed:</strong> does it shorten a real business cycle time?</li>
</ul>
<p><strong>If you cannot defend it with numbers, the project is not innovative. It is unpriced.</strong></p>
<h3 id="3-decision-latency-is-a-pl-variable">3. Decision latency is a P&amp;L variable</h3>
<p>Slow decisions look like caution. In practice, they are hidden expense. Every day a real decision sits unresolved, the business pays in delay, rework, and attention.</p>
<p>Headcount is an input.  <a href="/blog/2026-03-30-throughput-engineer-headcount-lagging-metric/"
   
   >Throughput is an outcome</a>
. Adding the tenth engineer to a system that takes nine days to approve a deploy adds nine more days of waiting, not 10% more output.</p>
<p>Track four numbers with the same seriousness as revenue:</p>
<ul>
<li>time from issue raised to decision made</li>
<li>time from decision made to action taken</li>
<li>escalations per decision class</li>
<li>decisions reopened after approval</li>
</ul>
<p><strong>Ambiguous ownership is the most expensive architecture in your company.</strong></p>
<hr>
<h2 id="movement-ii-architecture">Movement II: Architecture</h2>
<h3 id="4-build-firewalls-not-masterpieces">4. Build firewalls, not masterpieces</h3>
<p>A statistical engine cannot be expected to behave like deterministic infrastructure. If your architecture only works when the model is correct 100% of the time, it is not architecture. It is wishful thinking with a demo budget.</p>
<p>Three failure modes, three firewalls. They are not the same thing and they are not solved by the same code:</p>
<ul>
<li><strong>Inbound sanitization.</strong> What data is permitted into the prompt context. PII strippers, schema enforcers, retrieved-document trust scoring. This is also where indirect prompt injection (instructions hidden in a vendor PDF, a customer message, or a tool output) gets caught before it reaches the model.</li>
<li><strong>Outbound validation.</strong> A typed schema checker stands between the model and the operational database. Malformed JSON, out-of-range values, and policy-violating outputs are rejected at the boundary, not absorbed by downstream services.</li>
<li><strong>Operational fallback.</strong> Circuit breakers for vendor outages and rate limits. If the model returns invalid output three times in a row, the system degrades to a deterministic path instead of a stack trace in front of the user.</li>
</ul>
<p>Each of these is a separate piece of code with a separate owner, a separate test surface, and a separate failure mode. A &ldquo;kill switch&rdquo; that catches all three is a slide, not a system.</p>
<p><strong>You cannot prompt your way out of entropy. You have to architect your way out of it.</strong></p>
<h3 id="5-evaluation-is-the-spine">5. Evaluation is the spine</h3>
<p>If you cannot define an eval suite before shipping a feature, you do not understand the system well enough to ship it.</p>
<p>A  <a href="/blog/2026-04-23-ai-evaluation-maturity/"
   
   >five-level maturity ladder</a>
:</p>
<ol>
<li><strong>Vibes-based.</strong> Someone eyeballs prompts before release.</li>
<li><strong>Spreadsheet.</strong> Suite exists, runs occasionally, blocks nothing.</li>
<li><strong>CI/CD-integrated.</strong> Evals run on every PR. A failed gate stays failed.</li>
<li><strong>Continuous telemetry.</strong> Production samples scored asynchronously. Incidents become regression tests.</li>
<li><strong>Governance as moat.</strong> Evaluation shapes architecture before code. Margin, latency, and sovereignty tradeoffs are quantified, not asserted.</li>
</ol>
<p>Below Level 3 is not a production system. It is a demo with a pager.</p>
<p>Level 4 is where most organizations get stuck, and the reason is rarely effort. Judge models drift, ground truth ages, sampling bias creeps in, and your asynchronous scoring quietly stops tracking the failure mode you cared about. Mature teams hold a small, hand-labeled golden set as the anchor, treat the judge model as a versioned dependency, and re-calibrate when either changes.</p>
<p>Eval portability is a year-two survival trait. If your eval suite is hand-tuned to one model&rsquo;s tokenizer and one vendor&rsquo;s output quirks, you have not built an eval suite. You have built a benchmark for the model you are about to be unable to leave.</p>
<h3 id="6-agentic-systems-run-on-a-reliability-contract">6. Agentic systems run on a reliability contract</h3>
<p>Agents are not magical workers. They are autonomous systems with more ways to fail. The reliability discipline gets stricter, not looser.</p>
<p>Every production agent answers five questions in one meeting, without hand-waving:</p>
<ul>
<li>what is it allowed to do?</li>
<li>what is it explicitly not allowed to do?</li>
<li>what metrics prove it is healthy?</li>
<li>what happens when the model degrades?</li>
<li>who can stop it, and how fast?</li>
</ul>
<p>But the five questions are a meeting checklist. The contract is a published artifact with <strong>SLOs, blast-radius caps in dollars or rows or API calls, rollback latency targets, and a named owner per failure mode.</strong> Blast radius is the real design variable: data scope, action scope, time scope, permission scope, fallback scope.</p>
<p>Kill switches are not weakness. They are governance that can move faster than the failure. A useful test of any AI control: <strong>could an engineer follow this rule at 2 a.m. without calling a committee?</strong></p>
<p>A roadmap that ships an agent without answers to these questions is a roadmap that has shipped a liability with a product label. Every initiative names how it turns off, how it knows it is hurting, how fast it reverts, and what manual path exists when the model degrades.</p>
<p><em>Companion:  <a href="/docs/agent-reliability-contract"
   
   >Agent Reliability Contract template</a>
.  <a href="/docs/rollback-template"
   
   >Rollback document template</a>
.</em></p>
<p><strong>Autonomy without a reliability contract is just an incident waiting for a timeline.</strong></p>
<hr>
<h2 id="movement-iii-economics--externals">Movement III: Economics &amp; Externals</h2>
<h3 id="7-unit-economics-live-at-the-workflow-not-the-model-call">7. Unit economics live at the workflow, not the model call</h3>
<p>Teams fixate on tokens because tokens are visible. The real bill sits around the model: retries, context assembly, human correction, support escalation, and the work of proving the output is acceptable.</p>
<p>Route by value and by risk. Trivial work stays cheap and local. High-stakes work earns expensive inference and stronger checks. A finance-aware leader can answer, without hand-waving:</p>
<ul>
<li>what each class of request costs to serve, end to end</li>
<li>where the rework happens</li>
<li>what failure costs when the model is wrong</li>
<li>which parts of the workflow justify premium inference</li>
</ul>
<p>The cost question nobody owns until it explodes: <strong>when product ships a feature that 10x&rsquo;s tokens, who pays?</strong> If the answer is &ldquo;we&rsquo;ll figure it out,&rdquo; you have not designed an operating model. You have deferred a fight.</p>
<p>Compute placement is part of this calculation, not a separate one. For high-frequency agentic workloads, a chain of round-trips across regions and vendors compounds into real latency tax and real egress cost. Local-first, hardware-aware patterns earn their place where the workload mix justifies them, and create a worse outcome where it does not. Measure first, place compute second.</p>
<p><strong>A cheaper model that fails gracefully beats an expensive model that fails silently.</strong></p>
<h3 id="8-sovereignty-is-an-architecture-constraint">8. Sovereignty is an architecture constraint</h3>
<p> <a href="/blog/2026-04-06-sovereign-systems-privacy-non-optional/"
   
   >Privacy is not a feature you bolt on</a>
 before an enterprise contract closes. It is the shape of the system.</p>
<p>A sovereign system controls the full lifecycle of every piece of data: where it lives, who can access it, how long it persists, and what happens when someone asks you to delete it. In practice, four concrete patterns:</p>
<ul>
<li><strong>Customer-managed keys.</strong> BYOK or hold-your-own-key. If your cloud provider holds the only copy of the encryption key, &ldquo;we cannot access your data&rdquo; is a policy promise, not a verifiable claim.</li>
<li><strong>Regional routing with storage isolation.</strong> EU data does not leave EU infrastructure. The application layer handles the routing. The deployment pipeline ships multi-region.</li>
<li><strong>Scoped, short-lived access.</strong> No ambient credentials. Service-to-service tokens with explicit grants and automatic expiry.</li>
<li><strong>Immutable audit trails.</strong> Append-only, tamper-evident logging of every access, transformation, and movement.</li>
</ul>
<p>&ldquo;We use AWS&rdquo; is not an answer to &ldquo;where does my data live.&rdquo; <strong>Sovereignty is about specificity.</strong></p>
<p>The compounding bill arrives when you try to add this later. The discount arrives when you build it in early and close enterprise contracts without an architectural retrofit.</p>
<h3 id="9-the-threat-model-is-the-manifesto">9. The threat model is the manifesto</h3>
<p>An AI manifesto without a threat model is marketing copy. Four risks every operator names explicitly:</p>
<ul>
<li><strong>Indirect prompt injection.</strong> Instructions hidden in retrieved documents, tool outputs, and user uploads, not just in the user&rsquo;s direct prompt. Treat every retrieved string as potentially adversarial. Validate before it reaches the model. Strip before it reaches the agent.</li>
<li><strong>Silent quality drift.</strong> The model returns <em>slightly</em> worse reasoning. The tone shifts. The retrieval starts ignoring critical documents. There is no stack trace. Only asynchronous production scoring, anchored to a golden set, catches this before customers do.</li>
<li><strong>Vendor and model lock-in by accident.</strong> Fine-tunes, preference data calibrated to one model family, and prompts hand-tuned to a specific tokenizer compound. By year two, your &ldquo;swappable&rdquo; model is a six-month migration. Discipline preserves optionality: prompt abstraction, eval portability, vendor-neutral preference data, and a quarterly review of what would break if the vendor changed terms tomorrow.</li>
<li><strong>Agent blast radius creep.</strong> Permissions accumulate. The agent that summarizes documents quietly gains write access to your billing API because someone needed it once. Audit scope quarterly. Treat agent permissions like database credentials, not like configuration.</li>
</ul>
<p>Threat modeling is not a one-time exercise. It is the bill of materials your system runs on.</p>
<hr>
<h2 id="movement-iv-people--failure">Movement IV: People &amp; Failure</h2>
<h3 id="10-interfaces-beat-titles">10. Interfaces beat titles</h3>
<p>Most AI hiring plans try to fix an interface problem with resumes. They rarely work.</p>
<p>A working leadership system is not a roster of senior titles. It is a decision map. Four owners with explicit decision rights and explicit escalation paths:</p>
<ul>
<li><strong>Product:</strong> user outcomes, adoption, business tradeoffs.</li>
<li><strong>Platform:</strong> safe defaults, deployment paths, observability, paved roads.</li>
<li><strong>Applied AI:</strong> workflow behavior, routing, prompting, retrieval, evaluation quality.</li>
<li><strong>Governance:</strong> risk boundaries, sovereignty controls, escalation thresholds.</li>
</ul>
<p>The titles can be anything. The interfaces cannot be ambiguous. If the answers depend on who is online that day, the system is not operational.</p>
<p>The same logic governs platform teams. A platform exists to make repeated decisions disappear into the default path: identity, routing, eval harnesses, logging, safe deployment, fallback behavior. The moment platform becomes a queue that has to bless every use case,  <a href="/blog/2026-05-14-why-ai-platform-teams-become-bottlenecks/"
   
   >the queue is the product</a>
 and waiting is the cost. <strong>A platform should remove waiting, not become a waiting room.</strong></p>
<p>Hiring works after the operating contract is clear, not before. New hires scale the current operating model, good or bad. <strong>Org debt is interface debt with better branding.</strong></p>
<h3 id="11-anti-fragility-requires-portability-discipline">11. Anti-fragility requires portability discipline</h3>
<p>Resilience is surviving the shock. Anti-fragility is using the shock to remove the next one.</p>
<p>Fragility hides in the org chart and in the stack. One engineer who knows the routing. One vendor whose terms changed last week. One fine-tune that took six months to train and would take six months to migrate. That is not an organization or a system. That is a single point of failure wearing a department badge or a model card.</p>
<p>Four design choices build strength:</p>
<ul>
<li><strong>Modular ownership.</strong> No critical function depends on one person&rsquo;s memory. Deputies are named.</li>
<li><strong>Resettable interfaces.</strong> A model, vendor, or workflow can be swapped without a rewrite. This is not free. It requires prompt abstraction, eval portability, vendor-neutral preference data, and a regular drill where the team actually proves a swap is possible.</li>
<li><strong>Fast learning loops.</strong> Every failure produces a tighter eval, a better fallback, or a clearer operating boundary.</li>
<li><strong>Cross-training on the boring parts.</strong> Alerts, evals, fallback logic, access boundaries. The unglamorous work is what keeps the organization elastic.</li>
</ul>
<p>A short anti-fragility check:</p>
<ul>
<li>Can you swap a model without rewriting the product?</li>
<li>Can you lose a key engineer without losing the system?</li>
<li>Can you absorb a vendor price increase without panic?</li>
<li>Can you turn a production incident into an improved control?</li>
</ul>
<p>If any answer is no, the organization is more brittle than it thinks. The most expensive lie an AI organization tells itself is that the model is swappable when nobody has tried.</p>
<h3 id="12-the-year-two-test">12. The year-two test</h3>
<p>A lot of AI organizations look healthy in month three and brittle by year two. The model did not fail. The operating model did. Prototype energy is easy to create. Durable coordination is not.</p>
<p>The single question that separates the two:</p>
<blockquote>
<p>Can the AI system survive a senior person going on vacation for two weeks?</p>
</blockquote>
<p>If the answer is &ldquo;not really,&rdquo; the organization is still running on hidden tribal knowledge.</p>
<p>If the answer is &ldquo;yes, with documented ownership, a published reliability contract, an eval suite that blocks releases, and a fallback path the on-call engineer can execute at 2 a.m.,&rdquo; the company is moving from prototype to production.</p>
<p>That is the only year-two test that matters. Everything else in this manifesto is in service of passing it.</p>
<hr>
<h2 id="what-this-manifesto-is-not">What this manifesto is not</h2>
<p>It is not a prediction about which model wins. It is not a framework for replacing engineers with agents. It is not a defense of any vendor, any cloud, or any stack.</p>
<p>It is a statement about how serious companies organize for AI when the easy money, the demo budgets, and the hype cycles are done, and only the operating model is left to do the work.</p>
<p>The model will change.</p>
<p>The system around it should not.</p>
<hr>
<p><em>Law Zava writes about the operating model behind serious AI execution. Companion artifacts:  <a href="/docs/agent-reliability-contract"
   
   >Agent Reliability Contract template</a>
 ·  <a href="/docs/rollback-template"
   
   >Rollback document template</a>
 ·  <a href="/docs/eval-starter-kit"
   
   >Eval Suite starter kit</a>
. The canonical reading path is at  <a href="/blog"
   
   >/blog</a>
.</em></p>
]]></content:encoded></item><item><title>The CTO Communication Protocol for AI Programs</title><link>https://lawzava.com/blog/2026-05-12-cto-communication-protocol-ai-programs/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-05-12-cto-communication-protocol-ai-programs/</guid><description>AI programs fail when engineers, executives, and investors hear different definitions of success. A communication cadence that keeps one true story.</description><content:encoded><![CDATA[<p>AI programs rarely fail because one team is incompetent. They fail because the organization tells itself three different stories about the same system. Engineers hear one version of reliability, executives hear one version of commercial impact, and investors hear one version of scale. By the time those stories collide in a board meeting, the disagreement has already been baked into the program.  <a href="/blog/2026-04-14-ai-cto-perspective/"
   
   >A CTO&rsquo;s job</a>
 is to keep the story true enough that people can act on it.</p>
<h2 id="the-alignment-problem">The Alignment Problem</h2>
<p>Every layer in a company listens for a different failure.</p>
<p>Engineers ask: can we make it reliable without turning the stack into a science project?</p>
<p>Executives ask: can it matter this quarter, not someday?</p>
<p>Investors ask: can it scale without becoming a support burden, a security problem, or a  <a href="/blog/2026-04-28-margin-risk-speed-ai-strategy-metrics/"
   
   >margin leak</a>
?</p>
<p>If those questions are not coordinated, the organization drifts into avoidable conflict. Product thinks it shipped success. Engineering thinks it shipped risk. Finance thinks it shipped cost. The AI program becomes a political object instead of an operating system.</p>
<h2 id="what-each-layer-needs-to-hear">What Each Layer Needs to Hear</h2>
<p>A good communication protocol gives each audience the right level of detail and nothing more.</p>
<p><strong>Engineers</strong> need constraints, failure modes, ownership, and the exact conditions under which they should stop or escalate.</p>
<p><strong>Executives</strong> need the business outcome, the tradeoffs, the cost of delay, and the risk of waiting for a perfect answer.</p>
<p><strong>Investors or board members</strong> need the thesis, the numbers, the confidence interval around those numbers, and the reason the company believes the numbers are real.</p>
<p>The common mistake is predictable: over-share implementation detail upward and under-share operational reality downward. Leaders either talk past each other or sand off the complexity to keep the room calm. Neither habit helps. Clarity is kinder than politeness when the system is expensive.</p>
<h2 id="build-a-communication-rhythm">Build a Communication Rhythm</h2>
<p>Strong CTOs do not improvise every update. They set a rhythm that forces the same narrative to appear at predictable intervals, so the organization can spot drift before it becomes a surprise.</p>
<p>A practical cadence looks like this:</p>
<ul>
<li>weekly: operational progress, blockers, decisions made, decisions deferred</li>
<li>monthly:  <a href="/blog/2026-05-05-measure-ai-progress-without-theater/"
   
   >outcome metrics</a>
, risk posture, and what changed in the operating assumptions</li>
<li>quarterly: strategy shifts, tradeoffs, roadmap changes, and what the board should expect next</li>
</ul>
<p>That structure gives the organization memory and gives the board a clean way to compare this quarter with the last one.</p>
<p>More slides won&rsquo;t help. Keep the story consistent enough that people can challenge it on the merits.</p>
<p>Misaligned narratives are delayed incidents.</p>
<h2 id="use-the-same-three-questions-everywhere">Use the Same Three Questions Everywhere</h2>
<p>Keep asking the same three questions in every forum: what changed, what did it affect, and what happens next? Those questions work at the team level, the executive level, and the board level because they force the same discipline: outcome, consequence, next move. If a layer cannot answer them, the communication is not yet useful.</p>
<p>Alignment is not consensus. It is a shared operating picture.</p>
]]></content:encoded></item><item><title>AI Team Structures 2026: Central, Embedded, and Hybrid Models</title><link>https://lawzava.com/blog/2026-02-16-ai-team-structures/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2026-02-16-ai-team-structures/</guid><description>Central, embedded, or hybrid AI team? How to decide where AI ownership lives, with roles, tradeoffs, platform-to-product ratios, and scaling rules.</description><content:encoded><![CDATA[<p>By mid-February 2026, the org question has moved from &ldquo;should we have an AI team?&rdquo; to &ldquo;where does ownership live?&rdquo; AI work has shifted from experiments to ongoing product and operations work, and most organizations that ship AI features have converged on a small set of structures. The best ones make evaluation, cost, and incident response someone&rsquo;s job instead of a shared worry. Most teams land on a hybrid: a small enabling platform group plus embedded delivery in product teams.</p>
<p>The right choice still depends on maturity, product criticality, and how much shared infrastructure is needed. The structure also changes how teams manage  <a href="/blog/2026-02-09-ai-cost-trends/"
   
   >AI inference cost</a>
,  <a href="/blog/2026-01-26-ai-native-architecture-2026/"
   
   >AI-native architecture</a>
, and governance. This post covers structures that stay stable under real delivery pressure.</p>
<h2 id="team-models-that-hold-up">Team models that hold up</h2>
<h3 id="central-platform-team">Central platform team</h3>
<p>A central platform team builds and operates shared AI infrastructure, evaluation tooling, and common components. This model fits organizations that need consistency, strong governance, and shared reliability across many teams. It works particularly well in regulated industries where auditability and compliance require one view across all AI usage.</p>
<p>Where it breaks down is speed. When every product team routes requests through a central group, the platform team becomes a bottleneck. This is common in organizations with ten or more product teams sharing a three-person AI platform group. The queue grows, the platform team triages by business priority, and lower-priority teams either wait or build workarounds. If you choose this model, staff it generously or accept that iteration speed will be gated.</p>
<h3 id="embedded-in-product-teams">Embedded in product teams</h3>
<p>AI engineers live inside product teams and ship features end to end. This model fits products where AI is core to user experience and iteration speed matters. A team building a search product or a conversational interface benefits from having the AI engineer sit in the same standup, hear the same customer feedback, and own the same on-call rotation as the rest of the squad.</p>
<p>The risk is fragmentation. When several product teams solve the same problems independently, you end up with three prompt evaluation frameworks, two model routing strategies, and no shared understanding of cost. This model works best when you have a small number of product teams, or when AI use cases are different enough that shared infrastructure would not save much effort.</p>
<h3 id="hybrid-model">Hybrid model</h3>
<p>A small platform team provides shared foundations while product teams embed AI engineers for delivery. This is the most common model because it balances infrastructure consistency with product-team autonomy.</p>
<p>The platform team in a hybrid model typically owns inference infrastructure, model selection and routing, shared evaluation tooling, and cost observability. Product-team AI engineers own feature-level prompts, domain-specific evaluation datasets, and production behavior for their use case. The boundary between these layers matters more than the org chart. Writing down the interface contract, what the platform provides and what the product team owns, prevents most of the friction that kills hybrid models.</p>
<p>The hybrid model fails when the platform team behaves like an internal vendor rather than an enabling function. If product teams have to file tickets and wait for releases to get basic capabilities, you&rsquo;re back to the central bottleneck problem with extra steps. The platform team should ship self-serve tooling and stay close to the product engineers who use it.</p>
<h2 id="decision-criteria">Decision criteria</h2>
<p>Use the structure that matches the work, not the other way around. Three factors tend to dominate the decision.</p>
<p>First, how many teams need the same AI capabilities and standards. If the answer is two, embedded is fine. If it&rsquo;s eight, you need a platform function or you will drown in duplication.</p>
<p>Second, how frequently AI features ship and change. High iteration velocity favors embedded engineers who can move with the product team&rsquo;s sprint rhythm. Slower, more deliberate releases are easier to route through a central group.</p>
<p>Third, how much operational risk and compliance pressure exists. Regulated environments benefit from centralized governance and audit trails. Lower-risk consumer products can afford more distributed ownership.</p>
<p>Add one more that teams often forget: <strong>how expensive mistakes are</strong>. If the blast radius is high, you want tighter standards, stronger review, and explicit gating.</p>
<h2 id="roles-and-responsibilities-in-2026">Roles and responsibilities in 2026</h2>
<h3 id="ai-engineer">AI engineer</h3>
<p>Builds AI features inside product flows, owns evaluation in production, and partners with design and data for quality. The role blends software engineering with systematic testing and monitoring. In 2026, the AI engineer is distinct from the ML engineer or data scientist. An ML engineer typically focuses on model training, fine-tuning, and training infrastructure. A data scientist focuses on analysis, experiment design, and statistical rigor. The AI engineer works downstream of both: integrating models into products, building evaluation harnesses that catch regressions, and owning production behavior. Think of it as the difference between building the engine and building the car.</p>
<h3 id="ai-platform-engineer">AI platform engineer</h3>
<p>Owns shared systems like inference services, evaluation pipelines, and model routing. The focus is reliability, scale, and cost control for many teams at once. This role requires strong infrastructure engineering skills and an understanding of how product teams consume AI capabilities. Strong platform engineers pair with product-team AI engineers to understand real usage patterns rather than building abstractions in isolation.</p>
<h3 id="ai-product-manager">AI product manager</h3>
<p>Defines the use case scope, success metrics, and rollout plan. The role emphasizes rigorous tradeoffs between quality, latency, and cost, with clear ownership of user outcomes. An AI PM needs to be comfortable with probabilistic behavior and must resist the urge to promise deterministic results. They own the decision of when a feature is good enough to ship and when it needs more evaluation investment.</p>
<h2 id="team-size-and-scaling">Team size and scaling</h2>
<p>Most teams start too large. A single AI engineer embedded in a product team, supported by a lightweight shared toolkit, is enough to validate whether AI adds value to a workflow. Scaling up before validation leads to expensive teams that optimize solutions to the wrong problems.</p>
<p>For the platform function, two to three engineers can support four or five product teams if the scope is well-defined. Once you pass that ratio, the platform team needs to grow or the scope needs to shrink. A common mistake is building a platform team of six that tries to serve fifteen product teams and ends up serving none of them well.</p>
<p>When hiring, prioritize engineers who have shipped AI features into production over those with impressive research backgrounds but no operational experience. The gap between a working prototype and a reliable production system is where most AI projects stall, and that gap is an engineering problem, not a research problem.</p>
<h3 id="ai-security--governance-partner">AI security / governance partner</h3>
<p>Whether this is a dedicated role or a shared function, someone must own policy: data handling rules, permission models, logging requirements, and review gates. Teams that skip this role tend to slow down later under audit pressure.</p>
<h2 id="common-failure-modes">Common failure modes</h2>
<p>These patterns show up across teams. Platform teams that ship abstractions without enabling product speed often build elaborate internal APIs nobody asked for while product teams work around them. Product teams that skip evaluation and discover quality issues late usually treat AI features like deterministic code, then get surprised when behavior drifts after a model update. Ambiguous ownership for model behavior in production creates incidents where nobody knows whether the platform team or the product team should respond. Usually it is both, but the escalation path was never defined.</p>
<h2 id="what-this-looks-like-at-different-sizes">What This Looks Like At Different Sizes</h2>
<ul>
<li><strong>Small startup (1 to 2 AI engineers)</strong>: embed in the product, keep tooling lightweight, and use strict output validation plus a small eval set. Avoid platform work that nobody will maintain.</li>
<li><strong>Mid-size company (multiple product teams)</strong>: introduce a small platform function to own routing, eval tooling, and shared guardrails, while keeping delivery embedded in product teams.</li>
<li><strong>Large org (regulated, many teams)</strong>: platform + governance becomes non-negotiable. Embedded teams still ship features, but standards, audit trails, and permissions need central ownership.</li>
</ul>
<h2 id="operating-practices-that-matter">Operating practices that matter</h2>
<p> <a href="/blog/2024-02-19-evaluating-llm-applications/"
   
   >Evaluation</a>
 is a first-class deliverable. Teams that ship reliably treat test sets, error analysis, and monitoring as part of every release. Evaluation datasets are versioned alongside code, and regressions in evaluation scores block releases the same way failing tests would.</p>
<p>Clear service ownership and on-call rotations prevent AI incidents from becoming orphaned problems. Every AI feature in production should have a named owner who is paged when it degrades. Cost management belongs in planning, not just finance review after launch. Model inference costs can surprise you, and the time to catch a cost spike is before it compounds for a month.</p>
<h2 id="a-pragmatic-starting-point">A pragmatic starting point</h2>
<p>If the organization is early, start embedded with a lightweight shared toolkit and a small platform function. As adoption grows, formalize the platform team and tighten standards. Revisit the structure every six months, because the problem shifts as AI moves from pilot to core workflow. The structure that got you to your first production feature is rarely the structure that will support your tenth.</p>
<h2 id="faq">FAQ</h2>
<h3 id="what-is-the-best-ai-team-structure-in-2026">What is the best AI team structure in 2026?</h3>
<p>For most companies, the best default is hybrid: a small platform group owns shared infrastructure, routing, evaluation, and governance, while product teams own delivery and workflow quality.</p>
<h3 id="when-should-ai-engineers-be-embedded-in-product-teams">When should AI engineers be embedded in product teams?</h3>
<p>Embed AI engineers when iteration speed and workflow context matter more than central consistency. This works best when use cases are distinct or when the company is still validating where AI creates value.</p>
<h3 id="when-does-a-central-ai-platform-team-make-sense">When does a central AI platform team make sense?</h3>
<p>A central platform team makes sense when many product teams need the same model access, evaluation tooling, governance, and cost controls. It fails when it becomes a ticket queue.</p>
<h3 id="who-owns-ai-quality-in-production">Who owns AI quality in production?</h3>
<p>The product team should own user-facing behavior. The platform team should own shared reliability, model access, routing, observability, and guardrails. The interface between those teams must be explicit.</p>
]]></content:encoded></item><item><title>AI and Team Productivity: Shared Infrastructure Wins</title><link>https://lawzava.com/blog/2025-10-13-ai-team-productivity/</link><pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2025-10-13-ai-team-productivity/</guid><description>Individual AI speedups are a distraction. The real gains come from treating AI as team infrastructure, embedded in docs, decisions, and onboarding.</description><content:encoded><![CDATA[<p>Every few weeks someone asks me how AI is changing team productivity. My answer: less than most people think, and in different ways than expected.</p>
<p>Individual engineers using  <a href="/blog/2021-06-28-github-copilot-first-look/"
   
   >Copilot</a>
 or ChatGPT to write code faster is fine. It&rsquo;s also not the point. One person moving 20% faster doesn&rsquo;t help if the team is still bottlenecked on the same things it was bottlenecked on six months ago: stale docs, unclear decisions, and onboarding that requires cornering a senior engineer for two hours.</p>
<p>The teams I see getting real gains are the ones that treat AI as shared infrastructure. Not a personal productivity hack. Infrastructure.</p>
<h2 id="what-that-looks-like-in-practice">What that looks like in practice</h2>
<p>A shared assistant for team documentation and search that points to actual internal sources and tells you who owns what, instead of a chatbot that guesses. Automated meeting summaries that feed into the same system where the team already tracks decisions.  <a href="/blog/2022-03-21-engineering-onboarding-excellence/"
   
   >Onboarding workflows</a>
 where a new hire can get a credible first answer and a pointer to the right human, instead of posting in Slack and hoping someone responds.</p>
<p>None of these need perfect accuracy. They need consistent routing and clear expectations about when AI is advisory versus authoritative.</p>
<h2 id="the-measurement-trap">The measurement trap</h2>
<p>Most teams go wrong here. They  <a href="/blog/2020-08-31-developer-productivity-metrics/"
   
   >measure AI tool adoption</a>
. Number of prompts. Lines of code generated. That&rsquo;s like measuring how many emails your team sends and calling it productivity.</p>
<p>The only question that matters: is the team less stuck?</p>
<p>Fewer repeated questions about the same topic. A shorter gap between a decision being made and that decision being documented. Less rework because someone missed context from a meeting they weren&rsquo;t in.</p>
<p>If AI usage goes up but those numbers stay flat, you have added a toy, not infrastructure.</p>
<h2 id="docs-specifically">Docs, specifically</h2>
<p> <a href="/blog/2025-07-21-ai-documentation-systems/"
   
   >Documentation</a>
 is where AI has the most underrated impact. Generating docs from scratch produces garbage. What works: proposing small updates when code changes, flagging content that no longer matches reality, and making each update feel like a five-second approval instead of a batch project.</p>
<p>At one startup I worked at, we struggled with  <a href="/blog/2022-06-13-engineering-documentation-practices/"
   
   >doc decay</a>
 like everyone else. The trick was making updates feel like routine housekeeping, not a chore you schedule for &ldquo;next sprint&rdquo; and never do.</p>
<h2 id="start-small-stay-boring">Start small, stay boring</h2>
<p>Pick one shared workflow. Make it reliable. Expand based on evidence, not enthusiasm. A small, visible win, like meeting notes that are actually useful the next day, changes team behavior more than any broad AI rollout plan.</p>
<p>The teams getting durable gains are the ones keeping AI practical, scoped, and accountable. Boring wins. As usual.</p>
]]></content:encoded></item><item><title>Building AI Teams: Ownership and Evaluation Beat Hiring</title><link>https://lawzava.com/blog/2024-12-02-building-ai-teams/</link><pubDate>Mon, 02 Dec 2024 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2024-12-02-building-ai-teams/</guid><description>Most AI team failures come from unclear ownership and weak evaluation, not missing talent. Team structures that work, who to hire, and the operating loop.</description><content:encoded><![CDATA[<p>I&rsquo;ve spent the last few years on and around AI teams, at startups and at larger companies. One lesson keeps repeating: teams rarely fail at AI because they lack talent. They fail because nobody owns the outcome.</p>
<p>That sounds harsh. It&rsquo;s also true.</p>
<h2 id="the-ownership-gap">The Ownership Gap</h2>
<p>Here&rsquo;s how it usually goes. A company decides to &ldquo;do AI.&rdquo; They hire an ML engineer, maybe two. Those engineers build a demo. Leadership is impressed. Then someone asks, &ldquo;Who owns this in production?&rdquo; and the room goes quiet.</p>
<p>The ML engineer built the model. The product team didn&rsquo;t spec the success criteria. The data engineer wasn&rsquo;t involved. The designer has no idea what happens when the model gets it wrong. And nobody defined what &ldquo;getting it wrong&rdquo; even means.</p>
<p>I&rsquo;ve seen this exact pattern at large enterprises and small startups. The blocker is structure.</p>
<h2 id="three-models-that-work">Three Models That Work</h2>
<p>Every successful team I&rsquo;ve seen fits one of three structures, and the core tradeoff has not changed.</p>
<p><strong>Embedded.</strong> AI engineers sit inside product teams. They ship features directly, own the evaluation, and live with the consequences of their choices. This works when AI is a feature, not a platform. The downside: practices drift across teams because there&rsquo;s no central coordination.</p>
<p><strong>Platform.</strong> A central team builds shared infrastructure: model serving, evaluation harnesses, prompt management, observability. Product teams consume that platform. This works when multiple products need AI. The downside: the platform team gets pulled in every direction and loses focus on any single product.</p>
<p><strong>Hybrid.</strong> A platform team builds the core. Embedded engineers in product teams customize it. This is the most common pattern at companies that have scaled this successfully. It also requires the most coordination. Without clear ownership boundaries, it degenerates into blame-passing between platform and product.</p>
<p>Pick the model that matches your current scale, not the one you hope to need in two years.</p>
<h2 id="who-to-hire">Who to Hire</h2>
<p>The best  <a href="/blog/2024-01-08-ai-engineering-discipline/"
   
   >AI engineers</a>
 I&rsquo;ve worked with share a few traits that don&rsquo;t show up on resumes.</p>
<p>They can explain how their system fails. Not just how it works, but how it breaks and what happens when it does. This is the best interview signal I&rsquo;ve found.</p>
<p>They think in systems, not models. The model is one component. The retrieval layer, validation step, fallback path, and monitoring are just as important. A candidate who talks only about model architecture is missing the point.</p>
<p>They build evaluations before they build features. If you can&rsquo;t measure whether the thing works, you&rsquo;re guessing. The best engineers treat  <a href="/blog/2024-02-19-evaluating-llm-applications/"
   
   >eval sets</a>
 like test suites. They version them, maintain them, and refuse to ship without them.</p>
<p>They&rsquo;ve shipped something to real users. Not a notebook. Not a demo. Something people used, complained about, and forced them to iterate on. Production experience changes how you think about every design choice.</p>
<h2 id="the-operating-loop">The Operating Loop</h2>
<p>Fancy process frameworks aren&rsquo;t necessary. A tight loop between four phases covers it:</p>
<p><strong>Discovery.</strong> Define success in measurable terms. What does &ldquo;good&rdquo; look like? What are the edge cases? Is the data available? A clear definition of success is worth more than a long list of ideas.</p>
<p><strong>Prototyping.</strong> Run small experiments with real examples. Document the failures, not just the successes. Bring domain experts in early. They know the edge cases you&rsquo;ll miss.</p>
<p><strong>Development.</strong> Build the evaluation suite first. Version prompts and retrieval logic as code. Test against known failure cases whenever models or data change.</p>
<p><strong>Production.</strong> Roll out gradually. Monitor quality and cost in the same dashboard. Treat regressions as product issues with named owners, not vague &ldquo;the model changed&rdquo; explanations.</p>
<h2 id="what-goes-wrong">What Goes Wrong</h2>
<p>The problems I see most often aren&rsquo;t technical:</p>
<ul>
<li>Nobody owns evaluation for a specific feature. There&rsquo;s a shared checklist but no named person.</li>
<li>Success criteria are undefined, so feedback becomes opinion. &ldquo;This doesn&rsquo;t feel right&rdquo; isn&rsquo;t actionable.</li>
<li>The pipeline is too complex for the use case. Someone built a multi-agent system for what should have been a single prompt.</li>
<li>Knowledge stays in people&rsquo;s heads. When someone leaves, the team loses context that took months to build.</li>
</ul>
<p>Fix these four problems and you&rsquo;re ahead of most AI teams. No new tools required. No new hires. Just clarity about who owns what and how you know it&rsquo;s working.</p>
]]></content:encoded></item><item><title>Restructuring Engineering Orgs After Layoffs</title><link>https://lawzava.com/blog/2023-06-12-engineering-org-restructuring/</link><pubDate>Mon, 12 Jun 2023 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2023-06-12-engineering-org-restructuring/</guid><description>Most post-layoff reorgs redraw boxes instead of fixing ownership gaps. What worked in 2023: explicit owners, killing work, and direct communication.</description><content:encoded><![CDATA[<p>I&rsquo;ve been pulled into three different &ldquo;help us restructure after layoffs&rdquo; conversations this year. The pattern is remarkably consistent. Company does  <a href="/blog/2022-11-14-tech-layoffs-engineering-resilience/"
   
   >layoffs</a>
 in Q4 2022 or Q1 2023. The remaining engineers are spread thin. Ownership is unclear. Two or three critical systems now belong to nobody. Leadership decides a reorg will fix it.</p>
<p>It usually doesn&rsquo;t. Not because reorgs are bad, but because they&rsquo;re solving the wrong problem. If your reorg is a PowerPoint exercise to make the reduced headcount look intentional, stop. Fix ownership gaps, not org charts. The people who survived the layoffs already know what&rsquo;s broken. Ask them.</p>
<h2 id="what-actually-happened">What actually happened</h2>
<p>Here&rsquo;s the real situation at most of these companies. They cut 20-30% of engineering. The layoffs weren&rsquo;t surgical. They hit across teams, sometimes based on recency bias or cost rather than capability. The survivors are demoralized, overloaded, and wondering if they&rsquo;re next.</p>
<p>Then someone proposes a reorg. New team names, new reporting lines, maybe a shift from project teams to product teams. The slide deck looks clean. The reality is chaos.</p>
<p>What these orgs need is three things: clear ownership of the systems that still matter, explicit decisions about what to stop doing, and honest communication that doesn&rsquo;t insult people&rsquo;s intelligence.</p>
<h2 id="when-a-reorg-is-actually-justified">When a reorg is actually justified</h2>
<p>Sometimes the layoffs genuinely changed the shape of the work enough that the old structure doesn&rsquo;t make sense. Real signals:</p>
<ul>
<li>Two teams were merged but nobody decided which team&rsquo;s approach wins, so both codebases rot.</li>
<li>A critical system lost its entire owning team and it&rsquo;s being maintained by whoever has time, which is nobody.</li>
<li>The product strategy changed alongside the layoffs, and the old team boundaries don&rsquo;t align to the new priorities.</li>
<li>Dependencies between teams have become the primary blocker because the connecting-tissue people were let go.</li>
</ul>
<p>These are structural problems that structural changes can help with.</p>
<h2 id="when-its-not">When it&rsquo;s not</h2>
<p>And sometimes the reorg is cover. I&rsquo;ve seen all of these:</p>
<ul>
<li>A new VP wants to &ldquo;put their stamp&rdquo; on things. The org was fine. The VP needed to justify their hire.</li>
<li>Conflict between two directors is being &ldquo;solved&rdquo; by separating their teams instead of addressing the conflict.</li>
<li>Leadership wants to signal activity to the board. &ldquo;We restructured&rdquo; sounds better than &ldquo;we&rsquo;re still figuring it out.&rdquo;</li>
<li>Someone read the Team Topologies book on a flight and now every conversation includes the phrase &ldquo;stream-aligned.&rdquo;</li>
</ul>
<p>If the root problem is people, process, or strategy, moving boxes around won&rsquo;t help. It&rsquo;ll just add a transition tax to an already exhausted org.</p>
<h2 id="what-i-actually-recommend">What I actually recommend</h2>
<p>Based on what&rsquo;s worked across these situations, the playbook is unsexy. Which is why it works.</p>
<p><strong>Step 1: Map what&rsquo;s actually broken.</strong> Not theoretically broken. Actually broken. Talk to the ICs. They know which systems are unowned, which dependencies are blocked, and which meetings are pointless. I usually spend the first week just listening. The engineers are relieved someone is asking.</p>
<p><strong>Step 2: Make ownership explicit.</strong> Write down, for every critical system: who owns it, who&rsquo;s on-call for it, and what the plan is. &ldquo;Shared ownership&rdquo; is a euphemism for &ldquo;no ownership.&rdquo; If a system matters, one team owns it. Full stop.</p>
<p><strong>Step 3: Kill things.</strong> This is the hard one. After layoffs, you have fewer people. You can&rsquo;t do the same amount of work. Something has to stop. The reorg should make it clear what&rsquo;s being stopped, not just what&rsquo;s being reorganized. At one company, the single most impactful change was killing two internal tools that each had one user. That freed up enough capacity to actually staff the important systems.</p>
<p><strong>Step 4:  <a href="/blog/2023-02-20-engineering-leadership-uncertainty/"
   
   >Communicate like adults</a>
.</strong> The worst thing I&rsquo;ve seen is the &ldquo;exciting restructuring&rdquo; email that uses words like &ldquo;streamlined&rdquo; and &ldquo;focused&rdquo; to describe what everyone knows was a layoff aftermath. Don&rsquo;t do that. Be direct: &ldquo;We lost good people. Here&rsquo;s how we&rsquo;re adjusting. Here&rsquo;s what we&rsquo;re stopping. Here&rsquo;s what we&rsquo;re doubling down on. Questions welcome.&rdquo;</p>
<p>At a mobility startup, we went through a version of this during a pivot. Smaller scale, but the same dynamics. The team that handled it best was the one where the lead said &ldquo;I don&rsquo;t have all the answers yet, but here&rsquo;s what I know and here&rsquo;s when I&rsquo;ll know more.&rdquo; Trust went up. Attrition went down.</p>
<h2 id="the-transition-matters-as-much-as-the-design">The transition matters as much as the design</h2>
<p>Even when the new structure is right, the transition can kill it. A few things that consistently matter:</p>
<ul>
<li><strong>In-flight work needs a home.</strong> Every project that&rsquo;s mid-stream needs an explicit owner in the new structure. Not &ldquo;we&rsquo;ll figure it out.&rdquo; A name, by the end of the week.</li>
<li><strong>New teams need a charter.</strong> Not a manifesto. A one-pager: what you own, what you don&rsquo;t, what your first quarter looks like. Teams that don&rsquo;t get this spend months figuring out their boundaries through conflict.</li>
<li><strong>Give it six months.</strong> The urge to tweak the new structure after four weeks is strong. Resist it. Reorgs take a full quarter to settle and another quarter to show results. Constant adjustment destroys any chance of stability.</li>
</ul>
<h2 id="how-to-know-if-it-worked">How to know if it worked</h2>
<p>Short-term (first month): are the ownership questions answered? Do people know who to go to? Has the &ldquo;who owns this?&rdquo; Slack question frequency dropped?</p>
<p>Medium-term (one quarter): is delivery predictability improving? Are cross-team dependencies less painful? Are the right things getting built?</p>
<p>Long-term (two quarters): retention. If you&rsquo;re losing the people you wanted to keep, the reorg failed regardless of what the delivery metrics say. The engineers who stayed through layoffs and a reorg have a very low tolerance for more disruption. Respect that.</p>
<h2 id="what-the-survivors-are-watching">What the survivors are watching</h2>
<p>Reorgs after layoffs are emotional events disguised as structural ones. The people in those boxes are tired, uncertain, and watching closely to see if leadership actually has a plan or is just rearranging furniture.</p>
<p>The best restructuring I&rsquo;ve seen this year was at a company where the CTO stood up and said: &ldquo;This is hard. We&rsquo;re going to get some of it wrong. But here&rsquo;s the logic, and here&rsquo;s how we&rsquo;ll adjust.&rdquo; No spin. No excitement. Just honesty.</p>
<p>That org stabilized in eight weeks. The one that did the polished all-hands with the aspirational vision? They&rsquo;re still losing people.</p>
]]></content:encoded></item><item><title>Leading Engineering Teams Through Uncertainty</title><link>https://lawzava.com/blog/2023-02-20-engineering-leadership-uncertainty/</link><pubDate>Mon, 20 Feb 2023 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2023-02-20-engineering-leadership-uncertainty/</guid><description>Early 2023 layoffs and budget cuts brought startup-style uncertainty to every engineering team. What helps: weekly updates, explicit stops, firm standards.</description><content:encoded><![CDATA[<p>I&rsquo;ve been through this before.</p>
<p>At a mobility startup, we ran out of runway while the product was still finding its footing. At a startup I founded, I built for a market that was still finding its legs. In a founder program, half the cohort pivoted their entire thesis in the first month. Uncertainty isn&rsquo;t a 2023 thing. It&rsquo;s a startup thing that finally hit big companies too.</p>
<p>The  <a href="/blog/2022-11-14-tech-layoffs-engineering-resilience/"
   
   >layoffs</a>
, budget cuts, and strategic pivots of early 2023 feel familiar to anyone who has founded something. The difference is scale. When it&rsquo;s your five-person startup, you talk it through over coffee. When it&rsquo;s a 200-person engineering org, the communication problem compounds fast.</p>
<h2 id="what-your-team-actually-needs">What Your Team Actually Needs</h2>
<p>When things get uncertain, engineers ask the same four questions no matter the company:</p>
<p>What matters right now? How stable is the direction? Do I have any say in this? And does my daily work actually connect to something real?</p>
<p>These aren&rsquo;t complicated needs. They just become urgent when the floor is shifting. You don&rsquo;t need perfect answers. You need consistent signals.</p>
<p>At a fintech startup, when we had to make hard prioritization calls, the single most useful thing I did was be direct about what we weren&rsquo;t going to build. People can handle &ldquo;we aren&rsquo;t doing X and here is why.&rdquo; They can&rsquo;t handle silence followed by a surprise reorg.</p>
<h2 id="communication-is-the-whole-job">Communication Is the Whole Job</h2>
<p>When I was working with larger organizations, I noticed something: the engineering leaders who struggled most were the ones who communicated least. Not because they were hiding things, but because they were waiting for certainty before saying anything.</p>
<p>That&rsquo;s backwards. In uncertain times, the absence of communication is the communication. And what it communicates is &ldquo;nobody knows and nobody is in charge.&rdquo;</p>
<p>A simple pattern that works: here is what we know and why it matters, here is what we don&rsquo;t know and when we&rsquo;ll revisit it, here are the decisions that flow from this context.</p>
<p>Say it every week. Even if nothing changed. Especially if nothing changed. That consistency is what creates trust.</p>
<h2 id="stop-starting-start-stopping">Stop Starting, Start Stopping</h2>
<p>When budgets tighten, the instinct is to do more with less. That&rsquo;s wrong. The correct move is to do less, better.</p>
<p>Ask three questions about every active project: Does it protect or grow the core business? What happens if we ship it versus if we delay it? Is there a smaller version that delivers the essential outcome?</p>
<p>If the answers are weak, pause the project. Explicitly. Say &ldquo;we&rsquo;re stopping this because we need to focus&rdquo; instead of letting it die quietly of resource starvation. Teams respect that. They don&rsquo;t respect the slow fade where a project is technically alive but has no one working on it.</p>
<h2 id="the-standards-that-cant-flex">The Standards That Can&rsquo;t Flex</h2>
<p>Pressure invites shortcuts. Some shortcuts are fine. Ship with less documentation. Defer the refactor. Reduce scope on a feature.</p>
<p>But some things are non-negotiable: security practices, code review on critical paths, and operational ownership for anything in production. When you cut those, you create compounding debt that hits you exactly when you can least afford it.</p>
<p>The job is to be explicit about where quality is required and where flexibility exists.</p>
<h2 id="resilience-isnt-a-motivational-poster">Resilience Isn&rsquo;t a Motivational Poster</h2>
<p> <a href="/blog/2022-12-12-building-resilient-teams/"
   
   >Resilience is operational</a>
. Cross-train key responsibilities so a single absence doesn&rsquo;t stall the team. Keep critical knowledge written down, not just in someone&rsquo;s head. Maintain a pace that doesn&rsquo;t depend on perpetual urgency.</p>
<p>I learned this the hard way at the mobility startup. We had one person who understood the payment integration end to end. When they were out for a week, we couldn&rsquo;t debug a billing issue that was actively losing us users. Never again.</p>
]]></content:encoded></item><item><title>Resilient Engineering Teams Are Boring Teams</title><link>https://lawzava.com/blog/2022-12-12-building-resilient-teams/</link><pubDate>Mon, 12 Dec 2022 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2022-12-12-building-resilient-teams/</guid><description>The engineering teams that got through 2022 best had the least drama: no heroics, no single points of failure, sane on-call, and bad news raised early.</description><content:encoded><![CDATA[<p>I have a theory about engineering teams: the boring ones win.</p>
<p>Not boring in the sense of uninspired. Boring in the sense of predictable. When something breaks, they know who handles it. When someone leaves, the work continues. When priorities shift, they adapt without a crisis meeting. Boring means the system works without heroics.</p>
<p>This year put that theory to the test.  <a href="/blog/2022-11-14-tech-layoffs-engineering-resilience/"
   
   >Layoffs</a>
, budget cuts, reorgs, shifting priorities: 2022 threw a lot at engineering teams. The ones that stayed productive through it all shared some common traits. None of them were flashy.</p>
<h2 id="heroics-are-a-smell">Heroics Are a Smell</h2>
<p>When you hear &ldquo;Sarah stayed up until 3am and saved the release,&rdquo; that isn&rsquo;t a success story. That&rsquo;s a failure story with a happy ending. It means the system depended on one person being awake and willing to sacrifice sleep. That works once. It doesn&rsquo;t work twice.</p>
<p>At a mobility startup, we had a period where our deployment process was held together by one engineer&rsquo;s knowledge and willpower. It felt fine until that engineer took a vacation and nobody knew how to handle a rollback. We fixed it by making the process boring: documented, automated, executable by anyone on the team.</p>
<p>Resilience is the opposite of heroics. It spreads capability so that no single failure, human or technical, creates a crisis.</p>
<h2 id="psychological-safety-isnt-a-buzzword">Psychological Safety Isn&rsquo;t a Buzzword</h2>
<p>I know &ldquo;psychological safety&rdquo; sounds like something from an HR slideshow. But it&rsquo;s the most practical thing I can recommend for team resilience.</p>
<p>If people on your team can&rsquo;t say &ldquo;I don&rsquo;t understand this,&rdquo; &ldquo;I made a mistake,&rdquo; or &ldquo;I think this plan is wrong,&rdquo; you have a team that hides problems until they become incidents. I&rsquo;ve seen this play out at multiple organizations this year. The teams that recovered fastest from shocks were the ones where bad news traveled quickly because people felt safe delivering it.</p>
<p>How to tell if your team has it:</p>
<ul>
<li>People ask questions in meetings instead of nodding along.</li>
<li>Risks get raised before they become outages.</li>
<li>Postmortems discuss systems and processes, not blame.</li>
</ul>
<p>Leaders set this tone through small repeated actions, not speeches. How you react to the first mistake someone reports to you determines whether they will report the next one.</p>
<h2 id="kill-single-points-of-failure-in-your-org-chart">Kill Single Points of Failure (In Your Org Chart)</h2>
<p>Every team has them. The person who&rsquo;s the only one who understands the billing system. The engineer who always handles the deploys. The manager who&rsquo;s the only one with context on why the architecture looks the way it does.</p>
<p>These aren&rsquo;t star performers. They&rsquo;re organizational risks.</p>
<p>Rotate on-call. Pair on critical systems. Document the &ldquo;why&rdquo; behind decisions, not just the &ldquo;what.&rdquo; Make sure at least two people can deploy, debug, and recover every service that matters. This isn&rsquo;t exciting work. It&rsquo;s the work that keeps the team functional when someone is sick, leaves, or gets pulled onto a different project.</p>
<p>At a large consumer platform, the infrastructure team made a deliberate effort to rotate ownership of critical services every quarter. It was slower in the short term. It made the team dramatically more resilient in the medium term.</p>
<h2 id="on-call-that-doesnt-burn-people-out">On-Call That Doesn&rsquo;t Burn People Out</h2>
<p>On-call is where team resilience gets stress-tested, and  <a href="/blog/2021-11-29-incident-management-practices/"
   
   >incidents</a>
 are where it shows. A sustainable rotation has a few non-negotiable properties:</p>
<p><strong>Alert quality matters.</strong> If your pager fires for things that aren&rsquo;t actually urgent, people stop taking it seriously. Tune your alerts. Remove the noise. Every false alarm erodes the team&rsquo;s willingness to respond.</p>
<p><strong>Runbooks must work under stress.</strong> A runbook that requires calm reading comprehension and background knowledge isn&rsquo;t a runbook. It&rsquo;s documentation. Real runbooks work at 2am when you&rsquo;re tired and anxious: clear steps, decision trees, escalation paths.</p>
<p><strong>Recovery time is real time.</strong> If someone gets paged at 3am, they shouldn&rsquo;t be expected to perform at full capacity the next morning. Build recovery time into the rotation. Burnout is a team problem, not an individual weakness.</p>
<h2 id="two-habits-that-compound">Two Habits That Compound</h2>
<p>After working with a lot of teams, I think two practices matter more than most:</p>
<p><strong>Retrospectives that produce action items.</strong> Not retrospectives that produce feelings. Not retrospectives that produce a long list of complaints. Short, focused retrospectives that produce two or three concrete follow-ups, with owners and deadlines. Then actually do them.</p>
<p><strong>Celebrating progress.</strong> Teams under pressure tend to only talk about what&rsquo;s wrong. Acknowledging what went well, even small things, keeps momentum and morale from decaying. This sounds soft. It works.</p>
<h2 id="built-before-the-crisis">Built Before the Crisis</h2>
<p>Resilient teams aren&rsquo;t built during a crisis. They&rsquo;re built in the quiet periods before one. Shared knowledge, clear processes, honest communication, sustainable pace: none of it is exciting. All of it compounds.</p>
<p>The teams that came through 2022 in good shape didn&rsquo;t have a secret. They had discipline. And discipline, unlike heroics, scales.</p>
]]></content:encoded></item><item><title>Tech Layoffs 2022: What I Saw From the Inside</title><link>https://lawzava.com/blog/2022-11-14-tech-layoffs-engineering-resilience/</link><pubDate>Mon, 14 Nov 2022 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2022-11-14-tech-layoffs-engineering-resilience/</guid><description>What I saw during the 2022 tech layoff wave, and what helps engineering teams survive contraction without burning out.</description><content:encoded><![CDATA[<p>I&rsquo;m writing this in November 2022, and the layoff announcements are coming faster than I can track. Meta. Twitter. Stripe. Lyft. Dozens more. Having worked across different organizations, I have a strange vantage point: watching the same wave hit in different ways, seeing which ones handle it well and which ones make it worse.</p>
<p>This isn&rsquo;t a framework post. It&rsquo;s what I&rsquo;ve seen and what I think matters.</p>
<h2 id="the-shift-nobody-planned-for">The Shift Nobody Planned For</h2>
<p>Eighteen months ago, every company I talked to was hiring aggressively. &ldquo;We can&rsquo;t find enough engineers&rdquo; was the universal complaint. Now the complaint is &ldquo;we hired too fast and the math doesn&rsquo;t work.&rdquo;</p>
<p>The market shifted from rewarding growth to rewarding efficiency. That&rsquo;s a legitimate economic correction. But the speed of the pivot is brutal. Teams that were told to scale fast are now being told to do more with less, sometimes by the same leadership that set the original targets.</p>
<h2 id="what-ive-seen-go-wrong">What I&rsquo;ve Seen Go Wrong</h2>
<p>The worst layoffs I&rsquo;ve watched (and I&rsquo;ve watched a few this year) share common traits.</p>
<p><strong>Multiple waves.</strong> Nothing destroys trust faster than a &ldquo;one-time reduction&rdquo; followed by another one six weeks later. If leadership doesn&rsquo;t know the full scope of cuts, they should say so honestly rather than promise stability they can&rsquo;t guarantee.</p>
<p><strong>Silence from above.</strong> At one organization I worked with, the engineering org learned about layoffs from Twitter before they heard from their own leadership. That isn&rsquo;t a communication problem. That&rsquo;s a respect problem.</p>
<p><strong>Pretending the plan didn&rsquo;t change.</strong> After cutting 20% of engineering, one organization kept the same roadmap and the same deadlines. The remaining team burned out within two months. Three more people left voluntarily. The original cost savings evaporated.</p>
<p><strong>Knowledge walking out the door.</strong> I saw a team lose the only person who understood their payment processing pipeline. No  <a href="/blog/2022-06-13-engineering-documentation-practices/"
   
   >documentation</a>
, no pairing history, no runbooks. Three months later they were still reverse-engineering their own system.</p>
<h2 id="what-ive-seen-go-right">What I&rsquo;ve Seen Go Right</h2>
<p>The organizations that handled this well did a few things consistently.</p>
<p>They were honest about the business reason. Not corporate-speak, not &ldquo;rightsizing for the future.&rdquo; Honest: &ldquo;Revenue is down, burn rate is too high, and we need to cut costs to survive.&rdquo; People can handle hard truths. They can&rsquo;t handle feeling manipulated.</p>
<p>They treated departing people with real dignity. Generous severance where possible. Genuine references. Time to say goodbye. The remaining team watches how you treat the people who leave. It tells them everything about what they can expect.</p>
<p>They immediately rescoped. Smaller team means smaller roadmap. Full stop. The best leader I watched through this process cancelled three initiatives within a week of the layoff, told the team &ldquo;we&rsquo;re doing these two things well, nothing else,&rdquo; and stuck to it. That team stabilized faster than any other I saw.</p>
<h2 id="for-the-people-who-remain">For the People Who Remain</h2>
<p>Survivor guilt is real and poorly understood. You kept your job, so you should be grateful, right? Except your friend got walked out, your workload doubled, and nobody has told you whether more cuts are coming. &ldquo;Grateful&rdquo; isn&rsquo;t the word that comes to mind.</p>
<p>What actually helps:</p>
<p><strong>Acknowledge the loss.</strong> Don&rsquo;t skip past it. The people who left were colleagues, mentors, friends. Pretending everything is normal is insulting and counterproductive.</p>
<p><strong>Reset expectations explicitly.</strong> What are we building? What are we not building? Who owns what now? If these questions aren&rsquo;t answered within a week, anxiety fills the vacuum.</p>
<p><strong>Protect sustainable pace.</strong> A smaller team carrying a larger roadmap is a team in the process of losing more people. Voluntary attrition after layoffs is the hidden second wave that leadership never budgets for.</p>
<h2 id="distribute-knowledge-before-you-have-to">Distribute Knowledge Before You Have To</h2>
<p>The best insurance against knowledge loss is rotation, even more than documentation. Pair on critical systems. Rotate on-call. Make sure at least two people can deploy, debug, and recover every service that matters.</p>
<p>I keep coming back to this: resilience means building systems, human systems included, that can absorb shocks without collapsing. That means shared ownership, documented decisions, and deliberately avoiding single points of failure in your org chart.</p>
<h2 id="for-leaders">For Leaders</h2>
<p>You can&rsquo;t control the macro environment. You can control how clearly you communicate, how honestly you scope, and how consistently you protect your team&rsquo;s focus.</p>
<p>Watch for burnout signals: declining code quality, slower response times, people going quiet in meetings who used to speak up. These are leading indicators of the next round of attrition: the voluntary kind that hurts even more because it&rsquo;s your best people who leave first.</p>
<p>Advocate upward for realistic expectations. If leadership expects the same output from a smaller team, push back with data. &ldquo;We can deliver A and B by Q1, or A, B, and C by Q2. Pick one.&rdquo; That isn&rsquo;t defiance. That&rsquo;s responsible leadership.</p>
<h2 id="a-personal-note">A Personal Note</h2>
<p>Having founded a company through a founder program, I know what it&rsquo;s like to make hard calls about scope when the money is running out. It&rsquo;s never clean. But the difference between organizations that recover and organizations that spiral comes down to honesty and scope discipline.</p>
<p>Heroics don&rsquo;t scale. Discipline does. The teams that will come out of this cycle stronger are the ones that cut scope honestly, protected their people&rsquo;s energy, and resisted the temptation to pretend nothing changed.</p>
]]></content:encoded></item><item><title>Engineering Documentation: Owners, Doc Types, Docs as Code</title><link>https://lawzava.com/blog/2022-06-13-engineering-documentation-practices/</link><pubDate>Mon, 13 Jun 2022 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2022-06-13-engineering-documentation-practices/</guid><description>Engineering docs get ignored because nobody can find them, trust them, or tell what they are for. Owners, separate doc types, and docs as code fix it.</description><content:encoded><![CDATA[<p>Every team I&rsquo;ve been part of, from a fintech startup to a large consumer platform, had a Confluence graveyard. Hundreds of pages. Nobody reading any of them. The onboarding guide references a deploy process that changed eight months ago. The architecture doc describes a system that was replaced last quarter. A new engineer follows the getting-started page and hits a dead end on step three.</p>
<p>This isn&rsquo;t a tooling problem. Notion, Confluence, GitHub wikis, markdown in the repo: the tool doesn&rsquo;t matter if nobody owns the content.</p>
<h2 id="why-nobody-reads-your-docs">Why Nobody Reads Your Docs</h2>
<p>It&rsquo;s always the same reasons:</p>
<p><strong>They can&rsquo;t find them.</strong> Docs live in three different places, none of them searchable in the way engineers actually search. Slack threads become the real documentation, and Slack threads expire.</p>
<p><strong>They don&rsquo;t trust them.</strong> One bad experience with an outdated runbook and the engineer stops checking docs entirely. Rational behavior. If the doc might be wrong, it&rsquo;s faster to ask a human.</p>
<p><strong>They&rsquo;re written for the wrong audience.</strong> A tutorial mixed with reference material mixed with architectural rationale. The reader can&rsquo;t tell what kind of doc they&rsquo;re looking at, so they close the tab.</p>
<h2 id="the-fix-is-boring">The Fix Is Boring</h2>
<p>Separate your doc types. This is the Divio framework and it works:</p>
<ul>
<li><strong>Tutorials</strong>: learning-oriented, for newcomers. &ldquo;Follow these steps and you&rsquo;ll have a running service.&rdquo;</li>
<li><strong>How-to guides</strong>: task-oriented, for people who already know the basics. &ldquo;How to rotate database credentials.&rdquo;</li>
<li><strong>Explanations</strong>: understanding-oriented. &ldquo;Why we chose event sourcing for the payment system.&rdquo;</li>
<li><strong>Reference</strong>: information-oriented. API specs, config options, environment variables.</li>
</ul>
<p>When you mix these, you get a doc that&rsquo;s too long for lookup and too shallow for learning. Pick one purpose per page.</p>
<h2 id="structure-that-earns-trust">Structure That Earns Trust</h2>
<p>Readers scan. They decide in five seconds whether to keep reading. Help them:</p>
<ul>
<li>State the purpose and audience in the first line.</li>
<li>List prerequisites up front.</li>
<li>One action per step. Expected output after each step.</li>
<li>A troubleshooting section for the two or three things that always go wrong.</li>
<li>An owner name and a &ldquo;last verified&rdquo; date.</li>
</ul>
<p>That last one matters more than people think. A doc with &ldquo;Last verified: 2022-06-01 by @law&rdquo; tells the reader someone is paying attention. A doc with no date and no owner tells the reader nobody is.</p>
<h2 id="ownership-is-the-whole-game">Ownership Is the Whole Game</h2>
<p>At a large consumer platform, we started requiring that every doc in our team&rsquo;s wiki had exactly one owner. Not a team. A person. That person got a quarterly reminder to verify or archive.</p>
<p>The result: we deleted about 40% of our docs in the first quarter. That was a good thing. The remaining 60% were accurate, and engineers started trusting them again.</p>
<p>No owner means no maintenance. No maintenance means the doc will lie to you. A lying doc is worse than no doc.</p>
<h2 id="docs-as-code">Docs as Code</h2>
<p>Put docs in the repo. Require doc updates in PRs when behavior changes. Run link checks in CI. It&rsquo;s the same review process you already use for code. If the deploy process changes and the PR doesn&rsquo;t update the runbook, the reviewer should block it.</p>
<p>I know this sounds heavy. It&rsquo;s lighter than answering the same question in Slack every week.</p>
<h2 id="stop-measuring-page-views">Stop Measuring Page Views</h2>
<p>Page views tell you nothing useful. A doc that gets 500 views might be getting 500 confused visitors who leave after ten seconds.</p>
<p>Better signals: How many support questions come in on topics you have documented? How long does  <a href="/blog/2022-03-21-engineering-onboarding-excellence/"
   
   >onboarding</a>
 take? How often do incidents get extended because the runbook was wrong?</p>
<p>If the answer to &ldquo;where is the doc for X&rdquo; is always &ldquo;ask Sarah,&rdquo; your docs have failed regardless of how many pages you have.</p>
<p>Documentation is a product. Ship it or kill it.</p>
]]></content:encoded></item><item><title>Engineering Onboarding: Ship a Real PR by Day Three</title><link>https://lawzava.com/blog/2022-03-21-engineering-onboarding-excellence/</link><pubDate>Mon, 21 Mar 2022 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2022-03-21-engineering-onboarding-excellence/</guid><description>Most engineering onboarding wastes the first week on access requests and context overload. The fix is simple: ship a real PR by day three.</description><content:encoded><![CDATA[<p>The single best metric for onboarding quality is time to first merged PR. Not time to complete a training module. Not time to attend all the introductory meetings. Time to ship real code into a real codebase. I made the case for  <a href="/blog/2019-10-07-engineering-onboarding/"
   
   >a day-one PR back in 2019</a>
.</p>
<p>At a mobility startup, we got this down to day two for most new hires. Not because we had some elaborate onboarding program. Because we had a checklist, a buddy system, and a backlog of small tasks tagged &ldquo;good first issue.&rdquo; The new engineer&rsquo;s first PR was reviewed and merged before they finished reading the architecture docs. That&rsquo;s the order it should happen in. Ship first, context second.</p>
<h2 id="why-most-onboarding-stalls">Why most onboarding stalls</h2>
<p>Most onboarding programs are designed around what the company wants to communicate, not around what the new hire needs to be productive. Day one becomes a parade of slides: company history, org chart, values, benefits, security training. The engineer sits through hours of content they won&rsquo;t remember, and by the end of the day they still can&rsquo;t push to the repo because their access request is pending.</p>
<p>Every hour spent in orientation that could have been spent writing code is a signal that the company values process over output. New hires pick up on that fast.</p>
<h2 id="week-one-access-a-real-task-a-buddy">Week one: access, a real task, a buddy</h2>
<p><strong>Access on day one.</strong> Laptop, accounts, repo access, dev environment: all of it should be working before the engineer opens Slack for the first time. If access provisioning takes more than a day, your onboarding is already behind. Automate it. Test the automation quarterly by running it against a clean machine.</p>
<p><strong>A real first task.</strong> Not a tutorial. Not &ldquo;read the docs.&rdquo; A real bug fix or small feature that touches the production codebase. It should be small enough to finish in a day, scoped enough to not need deep context, and assigned to a specific reviewer who will prioritize the review.</p>
<p>The first merge matters more than any presentation. It proves the workflow works, the environment is set up correctly, and the engineer can contribute. Everything after that is momentum.</p>
<p><strong>A buddy, not a babysitter.</strong> The buddy answers the dumb questions. &ldquo;Where do I find the staging URL?&rdquo; &ldquo;Who reviews changes to this service?&rdquo; &ldquo;How do I get a test database?&rdquo; The buddy isn&rsquo;t responsible for the new hire&rsquo;s career development or performance evaluation. That&rsquo;s the manager&rsquo;s job. Keep the roles separate.</p>
<h2 id="stop-over-documenting-start-pairing">Stop over-documenting, start pairing</h2>
<p>I&rsquo;ve seen teams spend months building elaborate onboarding wikis that nobody maintains. They go stale within a quarter. A 30-minute pairing session where the buddy walks through the deploy pipeline is worth more than a 20-page document about the deploy pipeline.</p>
<p>Keep documentation focused on what changes slowly: architecture overview, service map, on-call runbook. For everything else, pair. New hires should be encouraged to update docs when they find gaps. Fresh eyes catch stale content better than any scheduled review.</p>
<h2 id="the-30-day-check">The 30-day check</h2>
<p>By the end of month one, a new engineer should be able to pick up a ticket, implement it, get it reviewed, and deploy it without asking how. If they can&rsquo;t, something in the onboarding failed. Treat it as a systems problem, not a people problem. Did they get enough context on the codebase? Was the first month&rsquo;s work well-scoped? Did the buddy actually check in?</p>
<p>Measure this with two signals: time to first solo PR (without buddy assistance on the workflow) and the new hire&rsquo;s own confidence level. Ask them directly. &ldquo;Do you feel productive? What&rsquo;s still blocking you?&rdquo; The answers will tell you more than any dashboard.</p>
<p>Onboarding compounds. Every new hire who has a good first week becomes someone who can onboard the next person. Every broken onboarding creates someone who spends their first month confused and frustrated, and that frustration echoes through their entire tenure.</p>
]]></content:encoded></item><item><title>SRE Team Structures: Stop Renaming Your Ops Team</title><link>https://lawzava.com/blog/2021-11-08-sre-team-structures/</link><pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2021-11-08-sre-team-structures/</guid><description>Centralized, embedded, or platform SRE: how each model fails, the engagement tiers and entry criteria I use, and why renaming ops to SRE changes nothing.</description><content:encoded><![CDATA[<p>I have a test I run when I walk into a new organization. I ask the SRE team lead: &ldquo;When was the last time you gave a service back to a product team because they met their reliability bar?&rdquo; If the answer is never, they don&rsquo;t have an SRE team. They have an ops team with a trendy name.</p>
<p>SRE is fundamentally about incentives and ownership. Not tooling. Not Prometheus dashboards. The org structure you choose determines whether reliability work gets prioritized or gets dumped on a small group of people who burn out.</p>
<h2 id="the-three-models-that-actually-exist">The Three Models That Actually Exist</h2>
<p><strong>Centralized SRE</strong> is one team supporting many services. It works early on when you&rsquo;re establishing standards and building your first incident response muscle. I recommend it for companies under 200 engineers with shared infrastructure.</p>
<p>The failure mode is predictable. The SRE team becomes a ticket queue. Product teams throw things over the wall. SREs lose context on individual services. On-call burden grows faster than headcount. I&rsquo;ve seen centralized SRE teams where every member was on call every other week. That isn&rsquo;t sustainable. That&rsquo;s a resignation factory.</p>
<p><strong>Embedded SRE</strong> puts reliability engineers inside product teams. Strong domain knowledge. Clear ownership. I like this model for complex services where the operational profile is unique: payment processing, real-time data pipelines, anything where the SRE needs to understand the business logic to debug production.</p>
<p>The failure mode here is fragmentation. Every team invents their own monitoring stack. Incident learnings don&rsquo;t spread. SREs get treated as &ldquo;the person who does the ops stuff&rdquo; instead of a partner. And career growth gets weird because the SRE reports to a product manager who doesn&rsquo;t understand their work.</p>
<p><strong>Platform/Enablement SRE</strong> is the model I push most organizations toward, eventually. A central team builds reliability tooling, templates, and automation. Product teams own their own operations. The SRE team makes reliability easy instead of doing reliability for everyone.</p>
<p>This only works if the platform is good. If your self-service tooling is bad, product teams can&rsquo;t actually own their operations and everything escalates back to the same five experts. I&rsquo;ve watched this fail spectacularly at companies that tried to jump straight here without building the self-service layer first.</p>
<h2 id="what-i-actually-recommend">What I Actually Recommend</h2>
<p>Most organizations over 300 engineers should run a hybrid. Central platform work for the shared layer. Embedded support for the three to five most critical services. Everything else gets the self-service platform and advisory engagement.</p>
<p>The key is having explicit engagement levels. Not every service deserves dedicated SRE attention. I use three tiers:</p>
<ul>
<li><strong>Advisory:</strong> Architecture reviews and SLO guidance. Minimal operational involvement. This is for most services.</li>
<li><strong>Partner:</strong> Joint SLOs, shared incident response, regular reliability reviews. This is for important services with active reliability investment.</li>
<li><strong>Full support:</strong> Dedicated SRE ownership of production and on-call. This is for your revenue-critical, customer-facing, &ldquo;if this breaks the CEO calls someone&rdquo; services.</li>
</ul>
<p>Scale engagement up as criticality increases. Scale it back as the product team matures. The goal is always to make the SRE team less needed, not more.</p>
<h2 id="the-entry-criteria-nobody-wants-to-set">The Entry Criteria Nobody Wants to Set</h2>
<p>Here is where I get unpopular. I tell organizations to require teams to meet a baseline before they get dedicated SRE support. Defined  <a href="/blog/2019-05-20-effective-slos/"
   
   >SLOs</a>
. Monitoring that reflects user impact. Up-to-date runbooks. Automated deployments with rollback. Participation in postmortems.</p>
<p>If a product team can&rsquo;t be bothered to define an SLO, they aren&rsquo;t ready for an SRE partner. They want someone to carry their pager. That&rsquo;s a different thing.</p>
<h2 id="sizing">Sizing</h2>
<p>The &ldquo;1 SRE per 10 developers&rdquo; ratio gets thrown around a lot. It&rsquo;s a fine starting point but it means nothing without context. A team of 10 developers running a single stateless API needs less SRE support than a team of 10 running a distributed database cluster.</p>
<p>What matters more: can you sustain your on-call rotations? You need at least 5-6 people per rotation to avoid burnout. If you can&rsquo;t staff that, you either have too many services or too few SREs. Probably both.</p>
<h2 id="the-anti-patterns-i-see-everywhere">The Anti-Patterns I See Everywhere</h2>
<p><strong>Renaming ops to SRE.</strong> Same people, same work, new title. Nobody adopted  <a href="/blog/2018-04-30-site-reliability-engineering-principles/"
   
   >error budgets</a>
. Nobody does blameless postmortems. Nobody is writing automation to replace toil. Just a title change and a conference talk about &ldquo;our SRE journey.&rdquo;</p>
<p><strong>SRE as deployment gatekeeper.</strong> If every deploy needs SRE approval, you&rsquo;ve built a bottleneck and called it reliability. Deployments should be automated and safe by default. SRE shouldn&rsquo;t be in the approval chain for routine changes.</p>
<p><strong>SRE as permanent firefighter.</strong> If your SRE team spends 80% of their time on incident response and 20% on prevention, the math never gets better. Google&rsquo;s original guidance was a 50% cap on operational work. I&rsquo;ve never seen an enterprise hit exactly 50%, but the principle is right. If there&rsquo;s no time for prevention, you&rsquo;re just managing decline.</p>
<p>The best SRE team I&rsquo;ve worked with was at a mid-sized fintech. Six people. They supported the whole company not by owning every service, but by building such good tooling and templates that product teams could own their own reliability. The SRE team&rsquo;s backlog was mostly platform improvements. Incidents were handled by the teams that owned the services. SREs showed up for the big ones and ran the postmortems.</p>
<p>That&rsquo;s what good looks like. SRE as a leverage point, not a fire department.</p>
]]></content:encoded></item><item><title>Most 'Technical Debt' Is Just Decisions You Disagree With Now</title><link>https://lawzava.com/blog/2021-09-20-technical-debt-management/</link><pubDate>Mon, 20 Sep 2021 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2021-09-20-technical-debt-management/</guid><description>Most &amp;amp;rsquo;technical debt&amp;amp;rsquo; is code that aged, not debt. How to spot real debt by its costs (incidents, delivery, security, hiring) and get fixes funded.</description><content:encoded><![CDATA[<p>I&rsquo;m tired of the phrase &ldquo;technical debt.&rdquo;</p>
<p>Not the concept. The concept is real and useful. I&rsquo;m tired of how it&rsquo;s used. Every codebase I inherit, someone pulls me aside and says &ldquo;we have a lot of technical debt.&rdquo; What they mean is: there&rsquo;s code they don&rsquo;t like. There are decisions they didn&rsquo;t make. There&rsquo;s a system that was designed for a different stage of the company.</p>
<p>That&rsquo;s not debt. That&rsquo;s software aging. And calling everything &ldquo;debt&rdquo; makes it impossible to prioritize the things that actually need fixing.</p>
<h2 id="what-technical-debt-actually-is">What technical debt actually is</h2>
<p>Ward Cunningham&rsquo;s original 1992 metaphor was specific: shipping first-time code is like going into debt. A little debt speeds development, as long as it&rsquo;s paid back promptly with a rewrite. The danger is debt that never gets repaid, where every minute spent on not-quite-right code counts as interest.</p>
<p>That&rsquo;s useful framing. It implies intent and a plan to repay.</p>
<p>What most people call &ldquo;tech debt&rdquo; is something else entirely:</p>
<ul>
<li>Code written by someone who left, in a style nobody likes anymore</li>
<li>An architecture that was right for 10 users but not for 10,000</li>
<li>A framework choice that fell out of fashion</li>
<li>A service that works but is hard to understand</li>
<li>An API that&rsquo;s ugly but functional</li>
</ul>
<p>None of that&rsquo;s debt in the Cunningham sense. It&rsquo;s just&hellip; code that aged. Software entropy. The natural consequence of building something over years with changing teams, changing requirements, and changing fashions.</p>
<p>The distinction matters because debt implies you should pay it back. And a lot of the stuff people label as &ldquo;tech debt&rdquo; doesn&rsquo;t need fixing. It needs acceptance.</p>
<h2 id="when-it-actually-matters">When it actually matters</h2>
<p>Real debt, the kind worth tracking and paying down, has measurable costs:</p>
<p><strong>It causes incidents.</strong> If the same component is behind repeated production issues, that&rsquo;s not aesthetic displeasure. That&rsquo;s a reliability risk with a price tag.</p>
<p><strong>It blocks delivery.</strong> If adding a feature to a specific area takes 3x longer than it should because of tangled dependencies or missing tests, you&rsquo;re paying interest on every sprint.</p>
<p><strong>It creates security risk.</strong> Outdated dependencies with known vulnerabilities. Auth systems with gaps. Unencrypted data stores. This is debt with existential consequences.</p>
<p><strong>It prevents hiring from working.</strong> If new engineers can&rsquo;t contribute meaningfully for months because the codebase is impenetrable, that&rsquo;s a real cost.</p>
<p>If none of those apply, you probably don&rsquo;t have a debt problem. You have a preference problem. And that&rsquo;s fine. But don&rsquo;t burn engineering capacity rewriting a working system because someone doesn&rsquo;t like the coding style.</p>
<h2 id="the-rewrite-it-trap">The &ldquo;rewrite it&rdquo; trap</h2>
<p>The most expensive form of fake debt management is the rewrite. I&rsquo;ve seen it at three different companies. The pitch is always the same: &ldquo;The current system is unmaintainable. We need to rewrite it from scratch. It&rsquo;ll take 6 months.&rdquo;</p>
<p>It never takes 6 months. It takes 18. The new system ships with half the features of the old one. The old system keeps running in parallel because the migration is never complete. Now you have two systems to maintain.</p>
<p>At my infrastructure startup, I almost fell into this with my own billing system. It was ugly. It was a monolith. I hated working on it. But it worked. It processed payments correctly. It handled every edge case I had hit so far.</p>
<p>Instead of rewriting, I  <a href="/blog/2019-07-01-microservices-migration-strategy/"
   
   >strangled it</a>
. Extracted one capability at a time into new services. Kept the old system running for the parts I hadn&rsquo;t migrated yet. It took longer than a rewrite would have, but there was never a period where billing was half-working.</p>
<h2 id="how-to-actually-manage-it">How to actually manage it</h2>
<p>If you have real debt (the kind that causes incidents, blocks delivery, or creates security risk), track it explicitly.</p>
<p>I keep a  <a href="/blog/2018-12-10-tech-debt-tracking-and-prioritization/"
   
   >simple registry</a>
. Each entry has: what the debt is, who owns it, what the impact is, and what the decision is (fix now, fix later, accept permanently).</p>
<p>The key is that last field. Some debt you accept. Permanently. The system works. The cost of fixing it exceeds the cost of living with it. That&rsquo;s a valid decision. Write it down and move on.</p>
<p>For debt you do want to fix, allocate a steady percentage of capacity. I recommend 15-20%. Not in a dedicated &ldquo;debt sprint&rdquo; once a quarter; that never works because it gets deprioritized. Bake it into every sprint. Every team, every sprint, some debt work alongside feature work.</p>
<h2 id="make-the-business-case">Make the business case</h2>
<p>The worst thing you can do is use &ldquo;tech debt&rdquo; as a catch-all complaint. When everything is debt, nothing is. When you bring a list of 50 items labeled &ldquo;tech debt&rdquo; to a planning meeting, leadership tunes out. Reasonably.</p>
<p>Instead: &ldquo;This component caused 3 incidents last quarter and adding the subscription feature will take 4 extra weeks because of its coupling to the payment module. Fixing the coupling first saves net time and reduces incident risk.&rdquo;</p>
<p>That&rsquo;s a business case. That gets funded.</p>
<p>&ldquo;The auth service is old and ugly&rdquo; isn&rsquo;t a business case. If it works, it works. Spend your credibility on the things that actually hurt.</p>
]]></content:encoded></item><item><title>Remote Work for Engineering Teams: Benefits and Dangers</title><link>https://lawzava.com/blog/embracing-remote-work/</link><pubDate>Fri, 04 Jun 2021 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/embracing-remote-work/</guid><description>Years of running distributed engineering teams: what remote work gives you, where it hurts (isolation, blurred boundaries, eroding trust), and what works.</description><content:encoded><![CDATA[<p>Remote work is great for focused engineering work, hiring across borders, and reclaiming your commute hours. It&rsquo;s also bad for loneliness, blurred boundaries, and the slow erosion of team trust when you stop being intentional about it.</p>
<h3 id="why-i-care-about-this-topic">Why I care about this topic</h3>
<p>I&rsquo;ve been working remotely in some form for most of my career. That was no accident: I kept building teams that were distributed by default. When you&rsquo;re hiring engineers across multiple countries, &ldquo;remote-first&rdquo; stops being a philosophy and starts being a logistics problem you solve every week.</p>
<p>So when the pandemic hit and every company suddenly discovered remote work, I watched the discourse with a mix of amusement and frustration. Amusement because most of the &ldquo;tips&rdquo; being shared were things distributed teams had figured out years ago. Frustration because the loudest voices were often people who had been remote for six months and were already writing definitive guides about it.</p>
<p>This is what I&rsquo;ve learned from doing it for years, including the parts that nobody puts in their LinkedIn posts.</p>
<h3 id="the-benefits">The benefits</h3>
<p><strong>Deep work actually happens.</strong> This is the biggest one and it isn&rsquo;t even close. In an office, your calendar gets colonized by meetings, drive-by questions, and the guy who wants to tell you about his weekend every Monday at 9:15. At home, I can put on headphones, close Slack, and write code or review architecture for three hours straight. That kind of focus is rare in an open office. It&rsquo;s the default when you work remotely.</p>
<p><strong>You hire from everywhere.</strong> When I stopped requiring people to live near an office, the talent pool didn&rsquo;t just grow. It changed completely. Some of the best engineers I&rsquo;ve worked with lived in cities I had never heard of. When you&rsquo;re a smaller company that can&rsquo;t compete with FAANG salaries, being remote-friendly is one of the most powerful recruiting advantages you can have.</p>
<p><strong>No commute is life-changing.</strong> I know this sounds obvious but people underestimate it. Getting back one to two hours per day isn&rsquo;t a minor convenience. It&rsquo;s the difference between exercising or not, cooking a real meal or ordering delivery, spending time with family or showing up already exhausted. Over a year, that&rsquo;s hundreds of hours. I&rsquo;ve never met anyone who went back to commuting and said they were happier.</p>
<p><strong>Autonomy breeds better engineers.</strong> Remote work forces people to be more self-directed. You can&rsquo;t tap someone on the shoulder to ask a question, so you learn to read the docs, check the logs, and form a hypothesis before escalating. Teams I&rsquo;ve managed remotely tend to develop stronger individual problem-solving habits over time. Not everyone thrives in that environment, but the ones who do become significantly better engineers.</p>
<h3 id="the-dangers">The dangers</h3>
<p><strong>Loneliness isn&rsquo;t a joke.</strong> I&rsquo;m not going to sugarcoat this. Working from home alone, day after day, can be isolating. The casual human interactions that happen in an office (grabbing coffee, complaining about the build system, eating lunch together) disappear. You don&rsquo;t notice it at first because you&rsquo;re enjoying the quiet. Then six months in you realize you haven&rsquo;t had a real conversation with a colleague that wasn&rsquo;t about a Jira ticket. This hits people harder than they expect.</p>
<p><strong>Work never ends unless you end it.</strong> When your office is your living room, there&rsquo;s no physical act of &ldquo;leaving work.&rdquo; The laptop is right there. The PR review can happen after dinner. The Slack message at 10pm gets a reply because you saw the notification. I&rsquo;ve caught myself multiple times checking deployment dashboards at midnight not because anything was on fire, but because the boundary between &ldquo;on&rdquo; and &ldquo;off&rdquo; had completely dissolved. This is the fastest path to burnout I&rsquo;ve seen in remote teams.</p>
<p><strong>Trust erodes silently.</strong> In an office, you see people working. You see them stuck on a problem, you see them helping a colleague, you see them at their desk deep in thought. Remotely, you see none of that. What you see is Slack status, commit history, and meeting attendance. Managers who don&rsquo;t trust their teams start tracking mouse movements and requiring cameras on. Engineers who feel watched start performing visibility instead of doing actual work. This dynamic is toxic and it happens gradually.</p>
<p><strong>Junior engineers suffer the most.</strong> This one took me a while to fully appreciate. Senior engineers have the context, the network, and the confidence to thrive remotely. Junior engineers need to absorb how a team thinks, how decisions get made, how to ask for help without feeling stupid. In an office, a lot of that happens through osmosis. Remotely, you have to build explicit systems to replace what used to happen naturally, and most teams don&rsquo;t bother.</p>
<h3 id="what-works">What works</h3>
<p><strong>Have a shutdown ritual.</strong> &ldquo;Set boundaries&rdquo; is useless advice. I mean a specific, repeatable action that signals &ldquo;work is done.&rdquo; For me, it&rsquo;s closing the laptop lid, putting it in a drawer, and going for a walk. It sounds silly, but your brain needs a physical transition when there&rsquo;s no commute to provide one. Find yours and do it every day.</p>
<p><strong>Write everything down.</strong> This is non-negotiable for remote teams. Decisions made in a call that aren&rsquo;t documented didn&rsquo;t happen. Use written proposals for anything important. Record the outcome of every meeting. Make your team&rsquo;s memory searchable. I&rsquo;ve  <a href="/blog/2020-04-13-async-communication-practices/"
   
   >written about async communication before</a>
 and I stand by it: writing-first culture is the single most important habit for distributed teams.</p>
<p><strong>Create space for non-work interaction.</strong> Not forced fun, not mandatory virtual happy hours. Just space. A Slack channel for random conversation. Occasional calls with no agenda. Optional video coffee chats. The key word is optional. The moment you mandate socializing, it stops being social and starts being another meeting.</p>
<p><strong>Over-invest in onboarding.</strong> When a new engineer joins a remote team, their first two weeks determine whether they will thrive or quietly disengage.  <a href="/blog/2020-09-28-distributed-team-practices/"
   
   >Onboarding is the stress test</a>
 for the whole system. Pair them with someone. Give them a small, completable task on day one. Have their manager check in daily, not weekly. Write an onboarding guide that actually reflects how the team works, not the aspirational version.</p>
<p><strong>Default to async, escalate to sync.</strong> Start with a written message or document. If the thread is going in circles, jump on a call. After the call, write down what was decided. This flow protects focus time while still allowing real-time collaboration when it&rsquo;s actually needed.</p>
<h3 id="intentionality-is-the-difference">Intentionality is the difference</h3>
<p>What separates teams that make remote work stick from teams that suffer through it is intentionality: about communication, about culture, about the human side of staring at a screen alone for eight hours a day.  <a href="/blog/2021-05-03-hybrid-work-engineering/"
   
   >Hybrid setups</a>
 make that harder, not easier.</p>
<p>I&rsquo;m still a strong believer in remote-first teams. But I&rsquo;m a much more clear-eyed one than I was five years ago.</p>
]]></content:encoded></item><item><title>Hybrid Work for Engineering Teams Is Harder Than Full Remote</title><link>https://lawzava.com/blog/2021-05-03-hybrid-work-engineering/</link><pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2021-05-03-hybrid-work-engineering/</guid><description>Hybrid engineering teams drift into a two-tier system unless you run them remote-first: written decisions, async defaults, outcome-based reviews.</description><content:encoded><![CDATA[<p>Last month I was on a call with an engineering team. Eight people. Five in a conference room, three on video. The five in the room were having a conversation among themselves: body language, side comments, whiteboard sketches. The three on video were watching a slightly out-of-focus camera pointed at the whiteboard, hearing about half of the side conversations, and contributing maybe 10% of the ideas.</p>
<p>After the call, one of the remote engineers messaged me privately: &ldquo;I have no idea what we decided.&rdquo;</p>
<p>That&rsquo;s hybrid work in one sentence.</p>
<h2 id="the-worst-of-both-worlds">The worst of both worlds</h2>
<p>I&rsquo;ve been fully remote for years. I&rsquo;ve led  <a href="/blog/2020-09-28-distributed-team-practices/"
   
   >distributed teams</a>
. I worked with remote engineers at the fintech startup. Remote works because everyone operates under the same constraints. Nobody has hallway access. Nobody has a whiteboard advantage. All context lives in written artifacts because it has to.</p>
<p>Hybrid breaks that symmetry. Some people are in the room. Some aren&rsquo;t. And the people in the room have massive advantages they don&rsquo;t even notice.</p>
<p>Decisions happen in hallway conversations after the meeting ends. Context gets shared over lunch. Feedback happens in passing (&ldquo;hey, nice work on that PR&rdquo;), which sounds trivial until you realize the remote people never hear it.</p>
<p>The office people aren&rsquo;t doing this maliciously. It&rsquo;s just how humans work when they share physical space. Information flows through proximity. Hybrid means some people get that flow and some don&rsquo;t.</p>
<h2 id="remote-first-is-the-only-fix">Remote-first is the only fix</h2>
<p>If you&rsquo;re going hybrid, you have to operate as remote-first. Not &ldquo;remote-friendly.&rdquo; Not &ldquo;we have good video conferencing.&rdquo; Remote-first.</p>
<p>That means: if one person in a meeting is remote, everyone joins from their own device. Even the five people sitting in the same conference room. Yes, it feels awkward. Yes, it works. Because now everyone has the same audio quality, the same view, and the same ability to participate.</p>
<p>That means: decisions are documented in writing. Not &ldquo;we&rsquo;ll share notes later.&rdquo; The notes are the decision. If it&rsquo;s not written down, it didn&rsquo;t happen. This was already true for remote teams. Hybrid teams need to adopt it explicitly because the temptation to rely on in-person context is strong.</p>
<p>That means:  <a href="/blog/2020-04-13-async-communication-practices/"
   
   >async communication</a>
 is the default for status updates, progress sharing, and non-urgent questions. Sync time is reserved for things that genuinely benefit from real-time interaction: architecture discussions, debugging sessions, retrospectives.</p>
<h2 id="what-the-office-is-actually-good-for">What the office is actually good for</h2>
<p>I&rsquo;m not anti-office. The office is great for specific things. Onboarding new engineers who need face time to build relationships. Design workshops where you need a whiteboard and rapid iteration. Team retrospectives where emotional nuance matters. Pairing sessions on hard problems.</p>
<p>The office is terrible for status meetings. It&rsquo;s terrible for solo focus work. It&rsquo;s terrible for anything that could be a written update but instead becomes a 30-minute calendar block because someone wanted &ldquo;face time.&rdquo;</p>
<p>If your team&rsquo;s office days are filled with meetings that could have been documents, you&rsquo;re using the office wrong.</p>
<h2 id="the-meeting-problem">The meeting problem</h2>
<p>Meetings are where hybrid equity dies. I have a strict rule for the teams I advise:</p>
<p>Every meeting needs a written agenda shared before the meeting starts. If there&rsquo;s no agenda, there&rsquo;s no meeting. Every meeting gets notes published within an hour of ending. Action items have names and dates. Follow-up conversations that happen in the hallway get summarized in the notes channel.</p>
<p>This is annoying. It&rsquo;s also the minimum viable process for making hybrid fair. Without it, the remote engineers are always operating on incomplete information and always a step behind.</p>
<h2 id="performance-management-by-green-dot">Performance management by green dot</h2>
<p>What makes me angry about how some organizations do hybrid is that they evaluate performance by presence. Who is in the office. Who responds fastest on Slack. Who is &ldquo;always available.&rdquo;</p>
<p>That&rsquo;s not measuring performance. That&rsquo;s measuring proximity. And it systematically disadvantages remote engineers, parents with caregiving responsibilities, anyone in a different time zone, and anyone who does their best work in focused blocks without interruption.</p>
<p>Measure outcomes. Code shipped. Problems solved. Systems improved. Incidents handled. If the work is good, I don&rsquo;t care where the person was sitting when they did it.</p>
<h2 id="why-this-is-harder-than-full-remote">Why this is harder than full remote</h2>
<p>Full remote forces discipline. You have to write things down because there&rsquo;s no alternative. You have to make meetings inclusive because everyone is remote. You have to trust people to manage their time because you can&rsquo;t see them.</p>
<p>Hybrid lets you be lazy. The in-office group gets context through osmosis and assumes everyone else has it too. Meetings are &ldquo;inclusive&rdquo; because there&rsquo;s a camera in the conference room. The written documentation is &ldquo;good enough&rdquo; because the office people fill in the gaps verbally.</p>
<p>That laziness creates a two-tier system. And it compounds over months. The remote engineers gradually lose context. They get passed over for projects that start with in-person conversations. They burn out from constantly feeling behind.</p>
<p>I&rsquo;ve seen this happen at three different organizations this year alone.</p>
<p>If you&rsquo;re going hybrid, commit to remote-first practices. Or go full remote and skip the hardest coordination problem in engineering management. For most teams, that&rsquo;s the better call.</p>
]]></content:encoded></item><item><title>Distributed Engineering Teams: What Works Six Months In</title><link>https://lawzava.com/blog/2020-09-28-distributed-team-practices/</link><pubDate>Mon, 28 Sep 2020 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2020-09-28-distributed-team-practices/</guid><description>Remote-first since before COVID, I watched everyone else scramble. What works for distributed engineering teams six months in, and what still doesn&amp;amp;rsquo;t.</description><content:encoded><![CDATA[<p>Last Tuesday one of my engineers pinged me at 11pm his time to ask about a deployment flag. I was asleep. He figured it out from our runbook, shipped it, and left a note in the PR. I found out about the whole thing over morning coffee.</p>
<p>That&rsquo;s a distributed team working. No drama. No blocked work. No meeting about it afterward.</p>
<p>I&rsquo;ve worked remote-first since before the pandemic made it fashionable. So when March hit and every company on Earth suddenly became &ldquo;distributed,&rdquo; I had a front-row seat to a lot of people reinventing wheels. Badly.</p>
<p>Six months in, the panic phase is over. But most teams are still stuck in this weird middle ground where they&rsquo;re doing office work over Zoom and calling it remote. It&rsquo;s not. And that gap is where the pain lives.</p>
<h2 id="writing-is-the-job-now">Writing is the job now</h2>
<p>This is the single biggest adjustment and most teams still haven&rsquo;t made it. In an office, you can be sloppy with communication because you&rsquo;ll bump into someone at lunch and clear it up. Distributed? That ambiguity sits there rotting until someone makes the wrong assumption.</p>
<p>On the teams I lead, we  <a href="/blog/2020-04-13-async-communication-practices/"
   
   >write everything down</a>
. Nobody loves documentation. We do it because the alternative is having the same conversation three times across two time zones and a Slack thread that&rsquo;s 200 messages deep.</p>
<p>When someone proposes a change, they write it up. Context, options, recommendation. It takes maybe 20 minutes. It saves hours of meetings that would&rsquo;ve happened otherwise. The people who push back on this the hardest are usually the ones who are used to winning arguments by talking louder in a room. That doesn&rsquo;t work in a Google Doc.</p>
<h2 id="meetings-should-hurt-to-schedule">Meetings should hurt to schedule</h2>
<p>Hot take: if your remote team is in more meetings than your office team was, you&rsquo;ve failed. The whole point of going distributed is that async is the default. Meetings are the exception.</p>
<p>We have a few standing syncs. Short ones. Everything else requires an agenda shared beforehand and a written outcome after. If you can&rsquo;t write an agenda, you don&rsquo;t need a meeting. You need to think more about what you actually want.</p>
<p>The time zone thing makes this easier. When you only have a four-hour overlap with half your team, you get very precious about those hours. Pairing sessions, hard design problems, the stuff where real-time back-and-forth actually matters. Everything else goes async.</p>
<h2 id="onboarding-is-where-you-find-out-if-your-system-works">Onboarding is where you find out if your system works</h2>
<p>New hires are the stress test. If your distributed setup actually works, a new person should be able to get productive without scheduling fifteen &ldquo;intro calls.&rdquo; If they can&rsquo;t, your  <a href="/blog/2019-10-07-engineering-onboarding/"
   
   >onboarding</a>
 and documentation are bad. Full stop.</p>
<p>We give every new hire a buddy, a setup guide, and a small ticket that ships in the first week. The shipping part matters. Nothing builds confidence like seeing your code in production on day four. Compare that to spending your first week in orientation decks learning about the company values. Please.</p>
<h2 id="the-green-dot-problem">The green dot problem</h2>
<p>I talk to other engineering leads and the thing that makes me angry is the surveillance stuff. Screen monitoring. Activity tracking. Checking who&rsquo;s online at what time.</p>
<p>Stop it. You&rsquo;re measuring presence, not output. I don&rsquo;t care if someone takes a two-hour break at 2pm to go for a run. I care if the work ships. If you can&rsquo;t evaluate your engineers without watching their screen, that&rsquo;s a management problem. The same goes for  <a href="/blog/2020-08-31-developer-productivity-metrics/"
   
   >activity metrics</a>
.</p>
<p>On my teams we&rsquo;re explicit about this: here&rsquo;s what we expect this sprint, here&rsquo;s how we check in, here&rsquo;s what &ldquo;done&rdquo; looks like. That clarity is the actual work of management. It&rsquo;s harder than installing monitoring software, which is exactly why most people don&rsquo;t do it.</p>
<h2 id="what-still-sucks">What still sucks</h2>
<p>I&rsquo;m not going to pretend it&rsquo;s all figured out. Some things about distributed work are worse.</p>
<p>Catching burnout is harder. In an office you can see someone looking tired or disengaged. Over Slack, people just go quiet, and by the time you notice, they&rsquo;re already job hunting. I still don&rsquo;t have a great answer for this beyond frequent 1:1s and actually paying attention.</p>
<p>Spontaneous collaboration is basically gone. Those hallway conversations where two people accidentally solve a problem? They don&rsquo;t happen on Zoom. We&rsquo;ve tried virtual coffee chats and random pairing. It&rsquo;s fine. It&rsquo;s not the same.</p>
<p>And onboarding senior people into leadership roles remotely is rough. Building the trust and political capital that lets you make big calls takes longer when you can&rsquo;t read a room.</p>
<h2 id="remote-work-exposes-old-dysfunction">Remote work exposes old dysfunction</h2>
<p>None of this is complicated. Most teams struggle with remote work because distributed work is less forgiving of the dysfunction they were already getting away with in the office. Tools and process docs don&rsquo;t change that. Bad communication, unclear ownership, meetings that should&rsquo;ve been emails: all of that was survivable when everyone sat in the same building. Remove the building, and it falls apart.</p>
<p>Fix the fundamentals and the rest follows. Or don&rsquo;t, and keep blaming Zoom fatigue. Up to you.</p>
]]></content:encoded></item><item><title>Remote Overnight: The First Two Weeks for Engineering Teams</title><link>https://lawzava.com/blog/2020-03-16-rapid-remote-work-transition/</link><pubDate>Mon, 16 Mar 2020 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2020-03-16-rapid-remote-work-transition/</guid><description>COVID sent engineering teams home overnight. What matters in the first two weeks: working access, decent hardware, three enforced norms, and new hires.</description><content:encoded><![CDATA[<p>Half the CTOs I know are scrambling right now. Offices closed Friday, everyone&rsquo;s home Monday, and nobody has a plan. I&rsquo;ve been fielding calls all weekend.</p>
<p>I&rsquo;ve worked remote-first for years, and my cloud infrastructure startup has been fully remote since day one. Not as a pandemic response. By design. So I&rsquo;m not theorizing here.</p>
<p>You don&rsquo;t need a 40-page remote work policy. You need to unblock your team this week and set three or four norms that prevent chaos. That&rsquo;s it.</p>
<h2 id="week-one-just-unblock-people">Week one: just unblock people</h2>
<p>Nothing else matters if your engineers can&rsquo;t access the systems they need from home. This is your only priority for the first few days.</p>
<ul>
<li><strong>VPN or zero-trust access.</strong> Test it. Half your team has never used it outside the office.</li>
<li><strong>MFA on everything critical.</strong> If you haven&rsquo;t done this yet, now&rsquo;s the time. Security doesn&rsquo;t get a pass because things are hectic.</li>
<li><strong>Make sure people have decent hardware.</strong> Laptop, headset, stable internet. Ship monitors to anyone who needs one. Don&rsquo;t be cheap about this. A $300 monitor pays for itself in a week of productivity.</li>
<li><strong>Set up a single support channel</strong> for &ldquo;I can&rsquo;t access X&rdquo; problems. Staff it. The first week will be a flood of small blockers. Clear them fast.</li>
</ul>
<h2 id="set-three-norms-and-actually-enforce-them">Set three norms and actually enforce them</h2>
<p>You don&rsquo;t need a communication manifesto. You need these three things:</p>
<p><strong>1.  <a href="/blog/2017-12-11-async-communication-makes-better-engineering-teams/"
   
   >Async by default</a>
.</strong> Write your updates so someone in a different timezone (or just eating lunch) can read them and act without scheduling a call. A daily standup message in Slack is worth more than a 30-minute video call where half the team zones out.</p>
<p><strong>2. Meetings need agendas.</strong> No agenda, no meeting. This was good practice before. Now it&rsquo;s survival. I&rsquo;ve watched teams fill every hour with Zoom calls within three days of going remote. The result is zero deep work and everyone&rsquo;s exhausted by Wednesday.</p>
<p><strong>3. It&rsquo;s okay to not respond instantly.</strong> This is the one most managers get wrong. They see someone&rsquo;s Slack dot go grey and panic. Stop. Measure output, not presence. If your engineers are shipping, leave them alone.</p>
<h2 id="the-stuff-people-forget">The stuff people forget</h2>
<p><strong>PRs become your main communication channel.</strong> Treat them that way. Good descriptions, clear context on <em>why</em> something changed, how to test it. Hallway conversations don&rsquo;t exist anymore. The PR is where knowledge transfer happens now.</p>
<p><strong>People will burn out faster than you expect.</strong> Working from home isn&rsquo;t a vacation. The boundary between work and life evaporates. I&rsquo;ve seen it. Encourage your team to set hard stop times. Lead by example. Don&rsquo;t send messages at midnight and expect nobody to notice.</p>
<p><strong>New hires are the most vulnerable.</strong> They can&rsquo;t lean over and ask someone a question.  <a href="/blog/2019-10-07-engineering-onboarding/"
   
   >Onboarding</a>
 that was shaky in the office gets worse remotely. Assign them a buddy. Give them a small, well-scoped first task. Check in daily for the first two weeks. This is where remote-first companies either win or lose.</p>
<h2 id="one-more-thing">One more thing</h2>
<p>Stop trying to recreate the office over Zoom. You&rsquo;re not going to replicate the whiteboard or the water cooler. That&rsquo;s fine. Remote work is a different mode with its own habits.</p>
<p>The teams that accept this and build new habits around async communication, written decisions, and trust-based management will come out of this stronger. The teams that spend all day on video calls trying to simulate an open floor plan will burn out in a month.</p>
<p>I&rsquo;ve been doing this for years. It works. But only if you commit to it instead of treating it as a temporary inconvenience.</p>
]]></content:encoded></item><item><title>Engineering Onboarding: First PR on Day One</title><link>https://lawzava.com/blog/2019-10-07-engineering-onboarding/</link><pubDate>Mon, 07 Oct 2019 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2019-10-07-engineering-onboarding/</guid><description>Most engineering onboarding is a polite abandonment ritual. What I&amp;amp;rsquo;ve learned across startups about getting new engineers shipping fast.</description><content:encoded><![CDATA[<p>My first day at a fintech startup, I was handed a laptop with Ubuntu pre-installed, pointed at a Confluence page titled &ldquo;Getting Started (OUTDATED - see Dave)&rdquo;, and told Dave was on holiday. The Confluence page referenced a Docker Compose setup that hadn&rsquo;t worked since the previous quarter. By 4pm I&rsquo;d cloned six repos, broken my local Postgres twice, and shipped exactly nothing.</p>
<p>I ended up as tech lead at that company, and the first thing I fixed was onboarding.</p>
<p>Not because it was the sexiest problem. Because it was the most expensive one nobody was measuring. Stop treating onboarding as &ldquo;show them the wiki and hope for the best.&rdquo; Script the dev setup to three commands, pair new hires with a buddy who has fresh context, give them real work that touches production in week one, then ask them what was broken and fix it.</p>
<h2 id="the-real-cost-nobody-tracks">The Real Cost Nobody Tracks</h2>
<p>Building my infrastructure startup in my founder-program cohort this year has reminded me how little time a startup has to waste. At a startup, a slow ramp-up isn&rsquo;t an inconvenience. It&rsquo;s an existential threat. But even at larger places, the math is brutal: a senior engineer who takes eight weeks to ship independently instead of three just cost you five weeks of salary for zero output. Multiply that by every hire per year.</p>
<p>The usual excuse is &ldquo;our codebase is complex.&rdquo; No. Your onboarding is lazy. Complexity is a reason to invest <em>more</em> in onboarding, not less.</p>
<h2 id="what-good-onboarding-looks-like">What Good Onboarding Looks Like</h2>
<p>I&rsquo;ve onboarded engineers at the fintech startup and at a mobility startup. Different products, different stacks, different countries. The pattern that works is boringly consistent.</p>
<p><strong>Day one: the new engineer opens a PR.</strong> Not a meaningful one. Not a feature. A typo fix, a config tweak, a test improvement. The point is they&rsquo;ve touched the full cycle (clone, build, branch, change, test, review, merge, deploy) before they go home. If your setup takes longer than a morning, it&rsquo;s broken.</p>
<p><strong>Week one: they own a real bug fix.</strong> Something with a clear repro, a limited blast radius, and enough context that they learn the codebase by reading the code that matters, not by reading a stale architecture doc.</p>
<p><strong>Month one: they&rsquo;re independently picking up work.</strong> They know who to ask, where the bodies are buried, and how deploys actually work (not how the wiki says they work).</p>
<p>That&rsquo;s it. No elaborate 90-day plans. No onboarding &ldquo;program&rdquo; with a PowerPoint deck. Just a tight loop of ship, learn, ship.</p>
<h2 id="make-setup-or-go-home"><code>make setup</code> Or Go Home</h2>
<p>At the mobility startup, we ran Go services talking to a handful of microservices. When I joined (before eventually leading the engineering), the local dev setup involved seventeen manual steps spread across a README that contradicted itself in three places. I rewrote it as a Makefile, the kind of  <a href="/blog/2019-08-12-developer-experience-platform/"
   
   >ad-hoc tooling that beats a platform</a>
 at that size.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git clone git@github.com:company/app.git
</span></span><span style="display:flex;"><span>make setup
</span></span><span style="display:flex;"><span>make dev
</span></span></code></pre></div><p>Three commands. If it takes more than three commands to go from zero to a running local environment, you have a setup problem, not a complexity problem. Script it, containerize the dependencies, seed the database automatically. The new hire&rsquo;s laptop is a test of your infrastructure&rsquo;s maturity. If you can&rsquo;t reproduce your dev environment reliably, production probably isn&rsquo;t any better.</p>
<p>When I set up the dev environment at my infrastructure startup, I literally timed it. Fifteen minutes from <code>git clone</code> to running tests. If it crept past that, I treated it as a bug.</p>
<h2 id="the-buddy-system-done-right">The Buddy System (Done Right)</h2>
<p>Every new engineer gets a buddy. Not their manager. Not the tech lead. Someone close enough to the codebase to answer &ldquo;where does this thing live?&rdquo; questions but not so senior that the new hire feels stupid asking.</p>
<p>The buddy&rsquo;s job is simple: be interruptible for the first two weeks. That&rsquo;s the whole job description. They don&rsquo;t need to teach. They need to unblock.</p>
<p>At the fintech startup, I paired each new hire with whoever had last touched the area of code they&rsquo;d be working in. Not because that person was the best teacher, but because they had the freshest context. Onboarding is a transfer of context, not knowledge. The knowledge is in the code. The context (why this weird pattern exists, which service is actually deprecated but still running, where the real config lives) is in people&rsquo;s heads.</p>
<h2 id="starter-tasks-that-arent-insulting">Starter Tasks That Aren&rsquo;t Insulting</h2>
<p>The worst onboarding pattern is the &ldquo;starter project&rdquo; that&rsquo;s actually a garbage task nobody else wanted to do. New engineers can smell it. It tells them their time isn&rsquo;t valued.</p>
<p>Good starter work has three properties:</p>
<ol>
<li><strong>It touches production.</strong> The whole point is building confidence that they can ship safely.</li>
<li><strong>It has a clear definition of done.</strong> Not &ldquo;explore the payment service and propose improvements.&rdquo; That&rsquo;s a research project disguised as onboarding.</li>
<li><strong>It teaches something specific about your system.</strong> A bug in the notification service teaches them about the event pipeline. An error message improvement teaches them about the API contract.</li>
</ol>
<p>Keep a backlog of tagged issues specifically for this. Not fake work. Real bugs and improvements that were scoped to one or two days and came with enough context that someone new could pick them up without a forty-minute walkthrough.</p>
<h2 id="documentation-less-is-more">Documentation: Less Is More</h2>
<p>I&rsquo;ve seen onboarding wikis with fifty pages of architecture history, org charts, and &ldquo;philosophy&rdquo; documents. Nobody reads them. The new hire skims the first two, gets overwhelmed, and asks their buddy anyway.</p>
<p>What new engineers need written down:</p>
<ul>
<li>How to set up their machine (the Makefile)</li>
<li>How to deploy and how to roll back</li>
<li>How to ask for help and who reviews what</li>
<li>A one-page system overview with a data flow diagram</li>
</ul>
<p>That&rsquo;s four documents. Keep them short. Update them every time someone joins and finds something wrong. The onboarding docs should be the most maintained docs in your entire company, because they&rsquo;re the only ones that get tested regularly by people who have no prior context.</p>
<h2 id="the-feedback-loop-most-teams-skip">The Feedback Loop Most Teams Skip</h2>
<p>What separates decent onboarding from great onboarding: you ask the new hire what was broken.</p>
<p>Every new engineer who joins should file at least one issue against the onboarding process itself. Not as a suggestion. As a requirement. &ldquo;What was confusing? What was wrong? What did you have to ask someone that should have been written down?&rdquo;</p>
<p>At the fintech startup, we turned this into a standing item in the 30-day check-in. Every single round of onboarding made the next one better. By the time I left, the setup was tight enough that contractors could be productive on day two.</p>
]]></content:encoded></item><item><title>Scaling Engineering Teams: What Breaks at 10, 25, and 50</title><link>https://lawzava.com/blog/2018-11-12-scaling-engineering-teams/</link><pubDate>Mon, 12 Nov 2018 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2018-11-12-scaling-engineering-teams/</guid><description>How engineering teams change as they grow: what breaks at each size, explicit ownership, written decisions, and process that follows pain.</description><content:encoded><![CDATA[<p>When I joined the fintech startup, the engineering team was small enough that we could hash out every decision over lunch. Five of us in a room, whiteboarding architecture, shipping features the same week we specced them. It was fast, messy, and it worked.</p>
<p>Then we started growing.</p>
<p>By the time we hit fifteen engineers, things that used to happen naturally (knowledge sharing, aligning on priorities, knowing who owned what) stopped happening on their own. Nobody did anything wrong. The team just outgrew its own communication patterns. I remember one week where two engineers independently built overlapping caching layers because neither knew the other was working on it. That was the moment I realized: scaling a team is a fundamentally different problem than building a product.</p>
<h2 id="the-stages-nobody-warns-you-about">The stages nobody warns you about</h2>
<p>There&rsquo;s no smooth curve from small team to big team. It&rsquo;s a series of phase transitions, and each one breaks something that was working fine before.</p>
<p><strong>Around 10 engineers</strong>, everything runs on shared context. You all know the codebase, you all know each other, decisions are fast. Feels great. Savor it.</p>
<p><strong>At 25 to 30</strong>, you wake up one morning and realize you have actual teams now. Dependencies show up. Duplication shows up. That thing where you just shout across the room to coordinate? Gone. You need to be intentional about who talks to whom about what.</p>
<p><strong>At 40 to 60</strong>, you need real structure. Managers. Defined roles. Onboarding that goes beyond &ldquo;ask anyone.&rdquo; I saw this at a startup accelerator this year: founders hitting this wall where the informal culture that made them fast was now making them slow. Every single one of them resisted adding structure. Every single one eventually had to.</p>
<p><strong>At 80 to 100</strong>, you&rsquo;re doing organizational design whether you like it or not. Cross-team alignment becomes someone&rsquo;s actual job. Architecture decisions need governance. Career paths matter because people will leave if they can&rsquo;t see a future.</p>
<h2 id="ownership-has-to-be-explicit">Ownership has to be explicit</h2>
<p>This was the hardest lesson for me. At a small startup, ownership is fluid. Whoever cares most picks it up. That works well until it stops working.</p>
<p>At the fintech startup we moved to small, mission-focused teams. Each team owned a clear slice of the product: the domain, the code, the on-call rotation, the technical direction. We wrote it down. A simple team charter: here&rsquo;s what we own, here are our interfaces, here&rsquo;s who&rsquo;s on-call. Nothing fancy.</p>
<p>The effect was immediate. Fewer &ldquo;who should I ask about this?&rdquo; questions. Faster decisions. Less duplicated work. Turns out people move quickly when they know their boundaries.</p>
<p>Four team shapes held up well for us:</p>
<ul>
<li><strong>Product teams</strong> delivering customer value end to end</li>
<li><strong>Platform teams</strong> providing shared infrastructure</li>
<li><strong>Temporary expert teams</strong> that unblock others and then move on</li>
<li><strong>Specialist teams</strong> for the genuinely hard subsystems</li>
</ul>
<h2 id="communication-doesnt-scale-by-accident">Communication doesn&rsquo;t scale by accident</h2>
<p>At 10 people, context spreads by osmosis. You overhear things. You absorb the state of the project just by sitting in the same room.</p>
<p>At 50, that&rsquo;s completely gone. If you don&rsquo;t write it down, it didn&rsquo;t happen.</p>
<p>We learned it at fifteen, the hard way. The practices that helped, most of them  <a href="/blog/2017-12-11-async-communication-makes-better-engineering-teams/"
   
   >async and written</a>
:</p>
<ul>
<li>Short written updates after decisions. Not meeting notes. Actual &ldquo;here&rsquo;s what we decided and why.&rdquo;</li>
<li>Weekly demos. Not polished presentations. Just &ldquo;here&rsquo;s what shipped, here&rsquo;s what&rsquo;s stuck.&rdquo;</li>
<li>Lightweight architecture decision records for anything that changes a shared interface.</li>
<li>Clear escalation paths. When something is on fire, people need to know who to call without digging through a wiki.</li>
</ul>
<p>The goal is fewer surprises, not more meetings.</p>
<h2 id="process-should-follow-pain">Process should follow pain</h2>
<p>I&rsquo;ve seen teams add process preemptively: policies for problems they haven&rsquo;t hit yet. It rarely works. Process should show up when the pain of not having it outweighs the overhead of maintaining it.</p>
<p>At the fintech startup, our process grew roughly like this:</p>
<ul>
<li><strong>Early days</strong>: Code review. A deployment checklist. Basic on-call.</li>
<li><strong>Growing pains</strong>: Incident response runbooks. A planning cadence. Team charters.</li>
<li><strong>Later</strong>: Engineering levels. Hiring rubrics. Decision records for cross-cutting changes.</li>
</ul>
<p>One thing that helped a lot: tiered decision authority. Small decisions stay inside the team. Medium decisions involve peer teams. Big decisions get a written proposal and a review window. This kept us from bottlenecking everything through a single approval chain.</p>
<h2 id="hiring-is-the-long-game">Hiring is the long game</h2>
<p>Scaling headcount without scaling hiring quality will hurt you for years. We put  <a href="/blog/2018-04-16-technical-interviewing-what-actually-works/"
   
   >rubrics</a>
 in place before we ramped hiring. Trained interviewers. Calibrated scoring across panels. It slowed us down initially but the consistency paid off.</p>
<p>Onboarding was the other half. A 30/60/90 day plan with real milestones. A buddy for every new hire. A living checklist that we actually updated when things changed. The faster someone ships their first meaningful change, the faster they feel like they belong.</p>
<h2 id="invest-in-the-platform-early">Invest in the platform early</h2>
<p>Every team rebuilding the same deployment pipeline or logging setup is a team not shipping product features. We stood up a  <a href="/blog/2017-12-28-building-platform-teams/"
   
   >small platform team</a>
 earlier than most people would recommend, and I&rsquo;d do it again.</p>
<p>Standardize the expensive stuff: languages, infrastructure patterns, observability tooling, security practices. Leave room for teams to make their own choices where it doesn&rsquo;t create systemic risk. That balance is never perfect. You just keep adjusting.</p>
<p>Technical debt compounds with team size. The more people writing code, the faster it accumulates. Give it an owner. Give it time. If nobody is responsible for paying it down, nobody will.</p>
<h2 id="culture-doesnt-transmit-itself">Culture doesn&rsquo;t transmit itself</h2>
<p>This one hit me at the accelerator. Talking to founders from all over Asia, the pattern was the same. They had a strong culture at 10 people. At 40, new hires didn&rsquo;t absorb it. The founders were frustrated because they thought culture was something you just had, not something you built and maintained.</p>
<p>Culture scales when values are written down, repeated constantly, and, most importantly, modeled by leaders. Recognize behaviors, not just outcomes. Document expectations in an engineering handbook instead of relying on tribal knowledge. Celebrate progress. Do blameless postmortems and actually mean it.</p>
<h2 id="organizational-design-is-the-hard-part">Organizational design is the hard part</h2>
<p>The technical work is the easy part of scaling a team. The hard part is making ownership, decisions, and communication explicit enough that dozens of people can move fast without stepping on each other. Get that right and growth is a multiplier. Get it wrong and every new hire makes you slower.</p>
]]></content:encoded></item><item><title>Code Reviews: Fixing Rubber Stamps and Nitpick Wars</title><link>https://lawzava.com/blog/2018-10-01-effective-code-reviews/</link><pubDate>Mon, 01 Oct 2018 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2018-10-01-effective-code-reviews/</guid><description>Most code reviews are theater. How we fixed ours at a fintech startup: review for risk, label comments, small PRs with a template, and same-day turnaround.</description><content:encoded><![CDATA[<p>Most code reviews are theater. Someone opens a PR, someone else skims it, leaves an &ldquo;LGTM,&rdquo; and everyone moves on feeling productive. I&rsquo;ve been guilty of it. You probably have too.</p>
<p>At the fintech startup, we went through a painful period where our reviews were either rubber stamps or nitpick wars. Neither helped. We&rsquo;d ship bugs that a real review would have caught, then overcorrect into hour-long debates about variable naming. It took us a while to find the middle ground. This is what worked, building on what I wrote last year about  <a href="/blog/2017-11-13-why-code-review-quality-matters-more-than-quantity/"
   
   >review quality over quantity</a>
.</p>
<h2 id="reviews-exist-to-manage-risk">Reviews exist to manage risk</h2>
<p>That&rsquo;s it. Not to prove you&rsquo;re clever. Not to enforce your preferred bracket style. Risk.</p>
<p>When I review code now, I&rsquo;m asking myself a few things: Will this break something in production? Will someone three months from now understand what this does? Are the tests actually testing the right behavior?</p>
<p>The highest-value areas to focus on:</p>
<ul>
<li><strong>Data correctness.</strong> Anything touching migrations or money gets extra scrutiny. Full stop.</li>
<li><strong>Security and access control.</strong> One missed auth check can undo months of good work.</li>
<li><strong>Error handling.</strong> The happy path is easy. The question is what happens when things go wrong.</li>
<li><strong>Performance.</strong> That innocent-looking query inside a loop? It will bite you.</li>
</ul>
<p>Everything else (formatting, import order, naming conventions) should be automated. Every minute a human spends arguing about tabs vs spaces is a minute not spent catching a real bug.</p>
<h2 id="how-i-read-a-pr">How I read a PR</h2>
<p>I have a simple routine. Read the description first to understand what the change is supposed to do. Then jump to the tests, which tell you what the author thinks the behavior should be. Then trace the main code path. Finally, look at error handling and edge cases.</p>
<p>This order matters. If you start reading code line by line without context, you&rsquo;ll waste time on details that don&rsquo;t matter.</p>
<h2 id="giving-feedback-that-doesnt-suck">Giving feedback that doesn&rsquo;t suck</h2>
<p>We had a problem at the fintech startup where review comments were either too vague or too aggressive. &ldquo;This is wrong&rdquo; helps nobody. &ldquo;This function does three things, consider splitting parsing from validation so each has one job&rdquo; is actionable.</p>
<p>A few things that changed our review culture for the better:</p>
<p><strong>Label your comments.</strong> We started tagging things as <code>[blocker]</code>, <code>[suggestion]</code>, or <code>[nit]</code>. Sounds small. Made a huge difference. Suddenly people knew which comments were &ldquo;fix this or we don&rsquo;t merge&rdquo; versus &ldquo;take it or leave it.&rdquo; Removed so much unnecessary back-and-forth.</p>
<p><strong>Ask questions instead of making demands.</strong> &ldquo;Is there a reason we check this condition twice?&rdquo; lands differently than &ldquo;Remove the redundant check.&rdquo; Maybe there&rsquo;s a reason. Maybe the author knows something you don&rsquo;t.</p>
<p><strong>Explain the why.</strong> Don&rsquo;t just say &ldquo;use a map here.&rdquo; Say &ldquo;this lookup is O(n) inside the loop, a map makes it O(1), and this list will grow.&rdquo; Now the author learns something instead of just obeying.</p>
<h2 id="making-your-pr-easy-to-review">Making your PR easy to review</h2>
<p>This is the part most people skip, and it drives me nuts. If your PR is 800 lines with no description and no tests, you&rsquo;re not going to get a good review. You&rsquo;re going to get a tired reviewer clicking approve to clear their queue.</p>
<p>Keep changes small and focused. Self-review your own diff before asking someone else to look at it. You&rsquo;d be amazed how many issues you catch yourself. Write a description that explains what problem you&rsquo;re solving, what tradeoffs you made, and how you tested it.</p>
<p>At the fintech startup we started using a dead-simple PR template:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#75715e">## What does this solve?
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">## Key decisions
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">## How I tested it
</span></span></span></code></pre></div><p>Three questions. Takes two minutes to fill out. Cuts review time significantly because the reviewer isn&rsquo;t guessing at intent.</p>
<h2 id="the-team-stuff">The team stuff</h2>
<p><strong>Review turnaround matters.</strong> We set a norm: small PRs get reviewed same day. Bigger ones within 48 hours. When reviews sit for days, people context-switch, branches diverge, and merging becomes painful. Fast reviews keep everyone moving.</p>
<p><strong>Let CI handle the boring stuff.</strong> Linting, formatting, type checks, security scanning: all automated. The reviewer&rsquo;s job is to think about things machines can&rsquo;t: design, intent, risk.</p>
<p><strong>Disagreements happen.</strong> When two people can&rsquo;t agree, we focus on the goal of the change, not personal taste. If we&rsquo;re still stuck, we pull in a third person, make a call, and write it down so we don&rsquo;t relitigate it next sprint.</p>
<h2 id="my-quick-mental-checklist">My quick mental checklist</h2>
<p>Before I approve anything, I run through this:</p>
<ul>
<li>Do I understand what this change is trying to do?</li>
<li>Does the code actually do that?</li>
<li>Are edge cases handled?</li>
<li>Do the tests cover the risky parts?</li>
<li>Will this be readable in six months?</li>
</ul>
<p>If I can answer yes to all five, I approve. If not, I comment.</p>
<p>Once we stopped treating reviews as a gatekeeping ritual and started treating them as a conversation about risk and clarity, we got fewer bugs, faster merges, and less friction.</p>
]]></content:encoded></item><item><title>Building a Platform Team: Lessons from Our First Year</title><link>https://lawzava.com/blog/2017-12-28-building-platform-teams/</link><pubDate>Thu, 28 Dec 2017 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2017-12-28-building-platform-teams/</guid><description>Standing up a small platform team at a fintech startup: tight scope, infrastructure run as a product, paved roads over mandates, and what I&amp;amp;rsquo;d change.</description><content:encoded><![CDATA[<p>Looking back at 2017, the single best engineering decision we made at the fintech startup was pulling infrastructure work out of the product teams and giving it a home. Not a big, formal reorg. Just me at first, then two of us, saying: we&rsquo;re going to own CI/CD, deployment, and monitoring so the rest of the team can stop reinventing it every sprint.</p>
<p>That was March. By December, we had a small platform team that actually worked. Getting there was messy.</p>
<h3 id="the-problem-was-obvious">The problem was obvious</h3>
<p>We had product engineers writing their own deployment scripts. Plural. Each service had its own way of getting to production. Some used shell scripts checked into the repo. One team had a guy who just SSH&rsquo;d into the box. Logging was inconsistent. Monitoring was whatever someone remembered to set up. When something broke at 2 AM, diagnosing it meant guessing which service did what and where its logs lived.</p>
<p>This is fine when you have three services. We had more than three services.</p>
<h3 id="what-we-built">What we built</h3>
<p>I kept the scope ruthless. Four areas, nothing else.</p>
<p><strong>Developer experience.</strong>  <a href="/blog/2016-06-06-continuous-deployment-without-chaos/"
   
   >CI/CD pipelines</a>
, a shared staging environment, deployment tooling that didn&rsquo;t require tribal knowledge. This was the first thing we tackled because it was the loudest pain point.</p>
<p><strong>Runtime infrastructure.</strong> Databases, caches, message queues. Standardized. Documented. Not six different Postgres configurations floating around.</p>
<p><strong>Observability.</strong>  <a href="/blog/2017-03-20-why-observability-matters-more-than-monitoring/"
   
   >Centralized logging and monitoring</a>
. One place to look when things go wrong. This alone saved us hours every incident.</p>
<p><strong>Security defaults.</strong> Secrets management that wasn&rsquo;t &ldquo;put it in an environment variable and hope.&rdquo; Auth tooling that product teams could plug into without reading a novel.</p>
<h3 id="treat-it-like-a-product-or-it-dies">Treat it like a product or it dies</h3>
<p>What I didn&rsquo;t expect: building the platform was the easy part. Getting people to use it was the actual job.</p>
<p>We had product engineers with muscle memory. They knew their janky deploy scripts. They didn&rsquo;t trust our new pipeline. Fair enough. So I stopped thinking of the platform as infrastructure and started thinking of it as a product. Our users were the product teams. If they didn&rsquo;t adopt what we built, we failed. Full stop.</p>
<p>This meant sitting with teams. Watching them work. Asking dumb questions like &ldquo;why did you just do that manually?&rdquo; and then going back and automating whatever that was. It meant writing docs that were actually useful, not docs that checked a box. It meant having a Slack channel where people got answers fast.</p>
<p>Self-service was non-negotiable. If a team needed a new database, they should get it in minutes. Not file a ticket. Not wait for me to wake up. The moment we became a ticket queue, we became the bottleneck we were trying to eliminate.</p>
<h3 id="how-we-built-the-team">How we built the team</h3>
<p>I started alone, then pulled in one more person with strong ops background. That was the right call. You need someone who has been paged at 3 AM and someone who knows how to build tooling that doesn&rsquo;t feel like punishment to use. Pure infra people build things that work but nobody can figure out. Pure app developers build things that look nice but fall over under load.</p>
<p>We stayed small. Two people, then three by Q4. Attached to engineering leadership, sitting next to the product teams. Physically close. That proximity matters more than any process. When you overhear someone complaining about deploys, you fix deploys. When you&rsquo;re in a different building, you build things nobody asked for.</p>
<h3 id="paved-roads-over-mandates">Paved roads over mandates</h3>
<p>We never mandated anything. I hate mandates. Instead, we built paved roads, to borrow Netflix&rsquo;s term: a service template, a default pipeline config, a monitoring setup that worked out of the box. You could ignore it all and do your own thing. But the paved road was so much easier that nobody bothered.</p>
<p>That&rsquo;s the trick. Make the right thing the easy thing. Don&rsquo;t write policies. Write code that makes the policy unnecessary.</p>
<p>We exposed platform capabilities through simple APIs. Want a database? Here&rsquo;s a YAML spec, submit it, done. Want to deploy? Push to master. Want logs? They are already where you expect them.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">apiVersion</span>: <span style="color:#ae81ff">platform.example.com/v1</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">kind</span>: <span style="color:#ae81ff">Database</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">metadata</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">name</span>: <span style="color:#ae81ff">billing-db</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">spec</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">engine</span>: <span style="color:#ae81ff">postgresql</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">size</span>: <span style="color:#ae81ff">small</span>
</span></span></code></pre></div><p>Nothing fancy. Deliberately boring. Boring infrastructure is good infrastructure.</p>
<h3 id="what-i-would-do-differently">What I would do differently</h3>
<p>I waited too long to write documentation. The first three months, everything lived in my head and in Slack threads. That doesn&rsquo;t scale, even at our size. Write the docs early, even if they are rough.</p>
<p>I also underestimated how much time support would eat. By September, I was spending most of my week answering questions and helping teams migrate. Almost no time left to build new capabilities. We fixed this by setting explicit office hours and protecting two full days per week for building. Should have done that from day one.</p>
<h3 id="where-this-goes-next">Where this goes next</h3>
<p>We&rsquo;re a small company. This setup works for our size. If the fintech startup doubles its engineering team, the platform group will need to split into focused sub-teams: developer experience, infrastructure, security. But not yet. Right now the right move is staying lean and staying close to the people we serve.</p>
<p>A platform team is a product team that happens to build infrastructure. The moment you forget the product part, you&rsquo;re just an ops team with a fancier name.</p>
]]></content:encoded></item><item><title>Async-First Engineering Teams: Cutting Decision Latency</title><link>https://lawzava.com/blog/2017-12-11-async-communication-makes-better-engineering-teams/</link><pubDate>Mon, 11 Dec 2017 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2017-12-11-async-communication-makes-better-engineering-teams/</guid><description>How our fintech team cut meetings and decision latency across time zones: written decisions, response-time rules, and calls only when they earn it.</description><content:encoded><![CDATA[<p>In distributed organizations, decision latency is usually a bigger throughput bottleneck than effort. Not all meetings are waste, but the default &ldquo;let&rsquo;s hop on a call&rdquo; reflex is one of the biggest productivity drains I&rsquo;ve seen.</p>
<p>At the fintech startup, we figured this out the hard way. We had engineers spread across time zones, a product moving fast, and a calendar that looked like a game of Tetris nobody was winning. Something had to give.</p>
<h2 id="the-real-cost-of-lets-just-sync-up">The real cost of &ldquo;let&rsquo;s just sync up&rdquo;</h2>
<p>A meeting at 10am and another at 2pm doesn&rsquo;t give you a four-hour block in the middle. It gives you two useless slices where you can&rsquo;t get into anything deep. You sit down, start loading the problem into your head, glance at the clock, realize you&rsquo;ve got 40 minutes before the next call, and end up on Slack or email instead. The hard problems don&rsquo;t get touched.</p>
<p>I watched this happen at the fintech startup. Smart engineers shipping shallow work because they never had the uninterrupted time to do the real thing.</p>
<p>The other cost is memory. Verbal decisions vanish. Someone says &ldquo;we agreed on X&rdquo; and three people remember it differently. New hires ask why something was built a certain way and the answer is &ldquo;I think we discussed it in a meeting last March.&rdquo; That&rsquo;s oral tradition.</p>
<h2 id="writing-changes-everything">Writing changes everything</h2>
<p>We shifted to async by default. Questions, proposals, decisions: write them down first. If the thread stalls or things get heated, jump on a call. But always come back and capture what was decided in writing.</p>
<p>The results were immediate. Engineers got their mornings back. People in different time zones stopped being second-class citizens. And decisions actually stuck because you could point to the thread where the trade-offs were discussed.</p>
<p>I also noticed something I didn&rsquo;t expect: the quality of decisions went up. When you force someone to  <a href="/blog/2017-06-26-technical-leadership-without-authority/"
   
   >write a proposal</a>
 instead of pitching it verbally in a meeting, they think harder. They check the code. They pull up the docs. Writing is thinking, and thinking is what we&rsquo;re paying engineers to do.</p>
<h2 id="how-we-did-it">How we did it</h2>
<p>We kept it simple. For any meaningful decision, someone writes up a short doc:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span># Decision: [Title]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Context
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Decision
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Consequences
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Owner and date
</span></span></span></code></pre></div><p>Nothing fancy. Took five minutes to fill out. Saved hours of re-litigation later.</p>
<p>We set response time expectations so nobody felt anxious. Urgent stuff: respond within a couple hours. Normal threads: by end of day. Low priority: a couple days is fine. Once people knew the rules, the pressure to be &ldquo;always on&rdquo; disappeared.</p>
<p>Status updates went into public channels. Short, async, scannable. We killed the weekly status meeting entirely. Nobody missed it.</p>
<h2 id="sync-still-matters-sometimes">Sync still matters (sometimes)</h2>
<p>I&rsquo;m not anti-meeting. I&rsquo;m anti-default-meeting. There are times when you absolutely should get on a call:</p>
<p><strong>Building trust.</strong> Onboarding a new engineer, one-on-ones, team bonding: these need face time. Text doesn&rsquo;t build relationships the same way.</p>
<p><strong>Gnarly debugging sessions.</strong> When you&rsquo;re staring at a production issue with six moving parts, a live whiteboard session beats a 47-message Slack thread.</p>
<p><strong>Conflict.</strong> If two people disagree and the thread is getting tense, get on a call. Tone matters and text is terrible at conveying it.</p>
<p><strong>Incidents.</strong> When the site is down, you don&rsquo;t write a proposal. You get on a call and  <a href="/blog/2017-10-23-incident-management-for-growing-teams/"
   
   >run the incident</a>
.</p>
<p>The key is making sync the exception, not the rule.</p>
<h2 id="the-discipline-of-good-async">The discipline of good async</h2>
<p>Bad async is worse than meetings. I&rsquo;ll admit that. If people write vague messages, bury the ask in paragraph four, or never specify deadlines, async becomes a graveyard of unanswered threads.</p>
<p>So we had rules. State what you need in the first sentence. Give just enough context to answer. Be specific about when you need a response. Batch your reading instead of living in Slack all day. And for the love of god, don&rsquo;t put long-term decisions in ephemeral chat. Use a doc, a wiki, a PR description, something searchable.</p>
<h2 id="what-i-learned">What I learned</h2>
<p>Switching to async-first was a cultural statement as much as a process change: we trust our engineers to manage their own time, and we value output over presence. The engineers who thrived were the ones who could write clearly, think independently, and reach out when they were actually stuck.</p>
<p>The calendar got quieter. The code got better. And when we did have meetings, they were short, focused, and worth everyone&rsquo;s time. That&rsquo;s the trade-off I&rsquo;ll take every single time.</p>
]]></content:encoded></item><item><title>Code Review Quality: Stop Counting Reviews, Start Reading</title><link>https://lawzava.com/blog/2017-11-13-why-code-review-quality-matters-more-than-quantity/</link><pubDate>Mon, 13 Nov 2017 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2017-11-13-why-code-review-quality-matters-more-than-quantity/</guid><description>Most code reviews are rubber stamps. What made ours useful at a fintech startup: read the change, skip style nits, label comments, small PRs, automation.</description><content:encoded><![CDATA[<p>Most code reviews are a waste of everyone&rsquo;s time.</p>
<p>I know that sounds harsh. But I&rsquo;ve watched it happen over and over at the fintech startup and at every team I&rsquo;ve worked with before. Someone opens a PR, someone else clicks approve within three minutes, and we all pretend the process worked. It didn&rsquo;t. Nobody read anything. The review was theater.</p>
<p>Almost nobody skips reviews anymore. The problem is that teams confuse <em>doing</em> reviews with <em>doing them well</em>. You can have a 100% review rate and still ship garbage if nobody&rsquo;s actually thinking about the code they&rsquo;re approving.</p>
<h2 id="read-the-damn-code">Read the damn code</h2>
<p>This shouldn&rsquo;t need saying, but here we are. Before you leave a single comment on a PR, you need to understand what the change does and why it exists. If the PR description doesn&rsquo;t explain that, send it back. Don&rsquo;t guess. Don&rsquo;t fill in the blanks yourself and hope you got it right.</p>
<p>At the fintech startup we made it a rule: if you can&rsquo;t explain the change to someone else in plain language, you haven&rsquo;t reviewed it. Simple as that. I&rsquo;ve rejected &ldquo;LGTM&rdquo; approvals that came in ninety seconds after a PR was opened. There&rsquo;s no way you read 400 lines of code in ninety seconds. You just didn&rsquo;t.</p>
<p>Follow the data through the code. Step through the logic path. Check what happens when things go wrong, not just when they go right. That&rsquo;s the work.</p>
<h2 id="stop-obsessing-over-style">Stop obsessing over style</h2>
<p>I see this constantly. A reviewer leaves fifteen comments about bracket placement and variable naming while completely missing a  <a href="/blog/2016-10-03-building-security-first-engineering-culture/"
   
   >SQL injection vulnerability</a>
 three lines down. Priorities, people.</p>
<p>Correctness. Security. Error handling. Edge cases. Maintainability. That&rsquo;s what humans should focus on. Everything else should be automated. We set up linters and formatters specifically so we could stop arguing about tabs versus spaces and start catching actual bugs.</p>
<p>If your review comments are mostly about style, you&rsquo;re copyediting.</p>
<h2 id="say-something-useful">Say something useful</h2>
<p>&ldquo;This is confusing&rdquo; isn&rsquo;t feedback. It&rsquo;s a feeling. Tell the author <em>what</em> is confusing and <em>why</em>. Better yet, suggest a fix.</p>
<p>If a function called <code>processUserData</code> is doing both validation and transformation, don&rsquo;t just say &ldquo;this does too much.&rdquo; Say &ldquo;split this into <code>validateUserData</code> and <code>transformUserData</code> so we can test them independently and the control flow is obvious.&rdquo; That&rsquo;s something someone can act on in five minutes instead of spending twenty minutes guessing what you meant.</p>
<p>Also, label your comments. At the fintech startup we started prefixing with <code>blocker:</code>, <code>suggestion:</code>, or <code>question:</code>. It sounds bureaucratic, but it completely changed the dynamic. Authors stopped treating every comment as a demand and reviewers stopped softening real concerns to avoid conflict. Blockers block the merge. Suggestions are optional. Questions are just questions.</p>
<h2 id="make-reviews-possible-in-the-first-place">Make reviews possible in the first place</h2>
<p>Giant PRs get bad reviews. Always. Nobody can hold 2000 lines of diff in their head and reason about correctness. The code might be fine. The reviewer will never know because they glazed over at line 300.</p>
<p>Keep PRs small. One concern per PR. Write a description that explains the problem, the approach, and how to test it. I&rsquo;ve seen PRs at the fintech startup where the description was better than the code, and that&rsquo;s not an insult. Good context makes review ten times faster and ten times more useful.</p>
<h2 id="automate-everything-that-isnt-judgment">Automate everything that isn&rsquo;t judgment</h2>
<p>Formatting, linting, type checking, test gates,  <a href="/blog/2017-07-17-security-automation-from-manual-to-continuous/"
   
   >dependency scanning</a>
. All of it should run before a human ever looks at the PR. Every minute a reviewer spends on something a machine could catch is a minute wasted.</p>
<p>Your reviewers&rsquo; attention is finite and expensive. Protect it.</p>
<h2 id="say-when-you-cant-review-properly">Say when you can&rsquo;t review properly</h2>
<p>If you don&rsquo;t have time to review something properly, say so. &ldquo;I can&rsquo;t get to this until tomorrow&rdquo; is infinitely more useful than a rubber-stamp approval today. A fake review is worse than no review because it gives false confidence. At least with no review, everyone knows the risk.</p>
<p>Code review works when people treat it as the last chance to catch something before it hits production. Everything else is just counting approvals.</p>
]]></content:encoded></item><item><title>Security Champions: Startup Security Without a Security Team</title><link>https://lawzava.com/blog/2017-09-18-why-every-startup-needs-security-champion/</link><pubDate>Mon, 18 Sep 2017 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2017-09-18-why-every-startup-needs-security-champion/</guid><description>No budget for a security team? Turn one motivated engineer per team into a security champion. How we run it at an eight-engineer fintech startup.</description><content:encoded><![CDATA[<p>Pick the engineer who already asks, &ldquo;but what if someone sends a malformed token?&rdquo; in code review. Give them time, training, and air cover. That&rsquo;s your security champion. We did this at our fintech startup, and it caught real problems that would have cost us users and money.</p>
<h3 id="we-have-no-security-team">We Have No Security Team</h3>
<p>Our fintech startup serves financial data to thousands of users. Eight engineers. No dedicated security person. No budget for one either.</p>
<p>But we handle user data, API keys, third-party integrations, and payment flows. The attack surface isn&rsquo;t small. And everything I know from cyber-defense exercises confirms that &ldquo;we&rsquo;ll deal with security later&rdquo; is how you end up in an incident report.</p>
<p>So I borrowed an idea from military operations: you don&rsquo;t need every soldier to be a specialist. You need embedded people who know enough to spot danger and escalate fast.</p>
<p>That&rsquo;s a security champion.</p>
<h3 id="what-a-security-champion-is">What a Security Champion Is</h3>
<p>Not a security expert. Not a penetration tester. Just an engineer on the team who volunteers to keep security visible.</p>
<p>At the fintech startup, our champion was a backend developer with a natural paranoia about input validation. Perfect. I didn&rsquo;t need him to write a threat model from scratch. I needed him to ask &ldquo;where does this data come from?&rdquo; during design discussions. To flag hardcoded credentials in PRs. To be the person other engineers felt comfortable asking basic security questions.</p>
<p>The role boils down to three things:</p>
<ol>
<li><strong>Ask the uncomfortable questions during design and code review.</strong> Not after. During.</li>
<li><strong>Keep the basics visible.</strong> Auth, data handling,  <a href="/blog/2017-07-17-security-automation-from-manual-to-continuous/"
   
   >dependency updates</a>
, logging.</li>
<li><strong>Escalate what&rsquo;s beyond their depth.</strong> In our case, that meant escalating to me or to an external advisor we had on retainer for a few hours a month.</li>
</ol>
<p>That&rsquo;s it. Lightweight. High leverage.</p>
<h3 id="why-this-works-better-than-youd-expect">Why This Works Better Than You&rsquo;d Expect</h3>
<p><strong>Single points of failure kill you.</strong> This is a core lesson from cyber-defense exercises. If one person holds all the security knowledge, they become a bottleneck, and when they&rsquo;re on vacation or quit, you&rsquo;re blind. Champions spread awareness across the org. Security stops being one person&rsquo;s job and becomes part of how the team thinks.</p>
<p><strong>Context beats checklists.</strong> An external auditor can scan your code. But your champion knows that the team just shipped a new webhook endpoint last Thursday, that it accepts user-supplied URLs, and that nobody discussed SSRF. That contextual knowledge is worth more than any automated scan.</p>
<p><strong> <a href="/blog/2016-10-03-building-security-first-engineering-culture/"
   
   >Culture shift</a>
 happens from the inside.</strong> When the security voice comes from within the team instead of an outside compliance function, people listen differently. It stops feeling like an audit and starts feeling like engineering discipline. At the fintech startup, after a few months, engineers who weren&rsquo;t champions started raising security concerns on their own. That&rsquo;s when you know it&rsquo;s working.</p>
<h3 id="how-to-set-it-up">How to Set It Up</h3>
<p><strong>Let people volunteer.</strong> Draft picks don&rsquo;t work here. The engineer who wants the role will actually do the work. The one who gets voluntold will treat it as overhead.</p>
<p><strong>Give them real time.</strong> This is where most programs die. If security work sits on top of a full sprint, it won&rsquo;t happen. We carved out a few hours per week. Not a lot. Enough to signal that leadership actually cares.</p>
<p><strong>Train them, but practically.</strong> Skip the theory-heavy workshops. We ran short sessions: here&rsquo;s how XSS works, here&rsquo;s how to spot an insecure deserialization pattern in our stack, here&rsquo;s what our threat model looks like for this feature. Hands-on, specific to our codebase, thirty minutes at a time.</p>
<p><strong>Give them air cover.</strong> This is the one that matters most. If a champion pushes back on shipping an unsafe feature and gets overruled by a PM every time, the program is dead. Leadership has to back them up. I made it clear at the fintech startup: if the champion says &ldquo;this needs a security review before it ships,&rdquo; that&rsquo;s what happens. No exceptions.</p>
<p><strong>Make the work visible.</strong> If nobody sees the security work, nobody values it. Mention it in standups. Bring it up in performance reviews. Treat it as a real engineering contribution, because it is.</p>
<h3 id="the-pushback-youll-get">The Pushback You&rsquo;ll Get</h3>
<p>Engineers will say they&rsquo;re not qualified. Good. That means they understand the limits of the role. Champions aren&rsquo;t supposed to be experts. They&rsquo;re supposed to spot obvious risks, ask questions, and know when to escalate. That&rsquo;s a much lower bar than people think.</p>
<p>Engineers will say they don&rsquo;t have time. They&rsquo;re right, unless you give them time. Protect those hours.</p>
<p>Some people will question whether it actually helps. Point to the PR where a champion caught a SQL injection before it hit staging. Or the design review where someone asked &ldquo;what happens if this JWT is expired but the signature is still valid?&rdquo; and saved the team a week of debugging in production.</p>
<h3 id="scaling-it">Scaling It</h3>
<p>With eight engineers, one champion is enough. As the team grows, the model scales: one champion per team, a shared Slack channel for cross-team security questions, and a monthly sync where champions compare notes. Eventually, if you&rsquo;re lucky enough to grow into needing a real security team, your champions become the connective tissue between that team and the rest of engineering. They already know the code, the people, and the history.</p>
<h3 id="a-bridge-to-real-security-investment">A Bridge to Real Security Investment</h3>
<p>A security champion program doesn&rsquo;t replace real security investment. It bridges to it. It gets a startup from &ldquo;we have nothing&rdquo; to &ldquo;we have something real&rdquo; without blowing the budget. It builds habits that stick. And it creates a culture where security is part of building software instead of a panic after a breach.</p>
<p>It works at the fintech startup because we have one engineer who gives a damn and leadership that backs him up. The process is far from perfect. Start there.</p>
]]></content:encoded></item><item><title>Building a Startup Engineering Team: Lessons from 2016</title><link>https://lawzava.com/blog/2016-12-05-building-effective-engineering-teams/</link><pubDate>Mon, 05 Dec 2016 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2016-12-05-building-effective-engineering-teams/</guid><description>What growing an engineering team at a mobility startup in 2016 taught me about hiring, trust, and the habits that actually matter.</description><content:encoded><![CDATA[<p>2016 is almost over, and it was a year of growing the engineering team I run at a mobility startup. We started it as a handful of people with a lot of ambition. We&rsquo;re ending it as seven, with a handful of services, a real deployment pipeline, and a much better understanding of what makes a small team work.</p>
<p>Some of that understanding came from reading. Most of it came from making mistakes and then paying attention. The short version: small teams with clear ownership, written context, and permission to disagree will outperform larger teams that rely on heroics and tribal knowledge. I learned this by getting it wrong first.</p>
<h3 id="the-hire-that-changed-how-i-think-about-hiring">The hire that changed how I think about hiring</h3>
<p>Early on I hired someone brilliant. Strong technical skills, great in interviews, impressive background. Within two months the team was slower than before. Not because the person was bad at code. Because they were bad at collaboration. They dismissed questions in reviews. They rewrote other people&rsquo;s work without discussion. They treated every technical decision as a competition.</p>
<p>I waited too long to address it. I kept telling myself the technical output justified the friction. It didn&rsquo;t. By the time we parted ways, I had lost one engineer who quit quietly and another who stopped contributing ideas in meetings.</p>
<p>The lesson was simple and painful: a good engineer who makes the people around them worse is a net negative. I don&rsquo;t care how fast you can ship if the team ships slower because of you.</p>
<p>After that,  <a href="/blog/2016-08-01-hiring-engineers-when-you-cant-compete-on-salary/"
   
   >every interview</a>
 included a pairing session where I watched how candidates communicated under ambiguity. Not whether they got the answer, but how they handled not knowing it.</p>
<h3 id="writing-things-down-saved-us">Writing things down saved us</h3>
<p>The single highest-leverage practice we adopted was writing things down. Architecture decisions, deployment procedures, incident postmortems, onboarding steps. All of it.</p>
<p>This wasn&rsquo;t natural for us. We were a small startup. Everybody sat in the same room. Writing felt like bureaucracy. Then someone went on holiday for a week and we realized that half of our operational knowledge lived in one person&rsquo;s head. That isn&rsquo;t a team. That&rsquo;s a single point of failure with extra chairs.</p>
<p>We started with a rule: if you make a decision that affects how something works, write a short paragraph explaining what you decided and why. Not a formal document. Not a template. Just the decision and the reasoning. We kept these in a shared repo.</p>
<p>Within a month, arguments about past decisions dropped to near zero. New engineers could read the context instead of guessing. And when we revisited old decisions, we could evaluate them against the original reasoning instead of relying on memory.</p>
<p>Clarity scales better than talent. I believe that more every month.</p>
<h3 id="small-and-scoped-beats-big-and-versatile">Small and scoped beats big and versatile</h3>
<p>We tried having one team that did everything. Backend, frontend, infrastructure, mobile API work. It worked at three people. At five, it started to crack. Not because people were less capable, but because context switching became the dominant activity. Everybody was halfway through everything and fully done with nothing.</p>
<p>We split into two groups. One owned the rider-facing product and mobile API. The other owned fleet operations, the backend services, and infrastructure. Each group had enough skills to ship without waiting for the other.</p>
<p>The improvement was immediate. Cycle time dropped. Ownership became clear. People stopped asking &ldquo;who is working on that?&rdquo; because the answer was obvious from the structure.</p>
<p>I don&rsquo;t think there&rsquo;s a magic team size. But I do think the moment coordination overhead starts eating into building time, you have outgrown your current structure. Pay attention to that signal.</p>
<h3 id="psychological-safety-isnt-a-slogan">Psychological safety isn&rsquo;t a slogan</h3>
<p>I used to think psychological safety meant being nice. It doesn&rsquo;t. It means people can say &ldquo;I don&rsquo;t understand this&rdquo; or &ldquo;I think this is the wrong approach&rdquo; without fear. That&rsquo;s harder to build than it sounds.</p>
<p>The most useful thing I did was start admitting my own mistakes publicly. When I made a bad architectural call, I said so in standup. When I didn&rsquo;t know the answer, I said that too. It felt uncomfortable at first. But within a few weeks, other people started doing the same thing. Problems surfaced earlier. Fixes came faster.</p>
<p>The other thing that mattered was how we handled incidents. We ran blameless postmortems for every significant outage. No finger pointing. Just: what happened, why did our systems allow it, and what do we change so it doesn&rsquo;t happen again. After a few rounds of this, people stopped hiding mistakes and started reporting them immediately. That alone probably saved us from two or three serious production incidents.</p>
<h3 id="conflict-is-data">Conflict is data</h3>
<p>In a small team, disagreements are inevitable. The question is whether you treat them as a threat or as useful information.</p>
<p>We had a multi-week argument about  <a href="/blog/2016-01-15-why-microservices-arent-always-the-answer/"
   
   >service boundaries</a>
. Two engineers had fundamentally different views on where to draw the lines. My instinct was to pick a side and move on. Instead, I made them write down their positions and trade-offs. Once everything was on paper, the disagreement was about specifics, not personalities, and we found a middle path that neither of them had originally proposed.</p>
<p>Now I encourage disagreement, as long as it stays about the work. When it gets personal, I address it immediately. Tolerating that even once sends a signal that undermines everything else.</p>
<h3 id="what-i-would-do-differently">What I would do differently</h3>
<p>I would hire for collaboration earlier and more deliberately. I would start writing decisions down from day one, not after the first crisis. I would split teams sooner. And I would be more honest with myself about when a personnel problem is actually a personnel problem, not a process problem.</p>
<p>None of this is revolutionary. But doing these things consistently, with discipline instead of heroics, made a bigger difference than any technical choice we made all year.</p>
]]></content:encoded></item><item><title>Building a Security-First Engineering Culture</title><link>https://lawzava.com/blog/2016-10-03-building-security-first-engineering-culture/</link><pubDate>Mon, 03 Oct 2016 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2016-10-03-building-security-first-engineering-culture/</guid><description>Security culture is habits leadership enforces: no secrets in code, a security question on every PR, least privilege, patch deadlines, and champions.</description><content:encoded><![CDATA[<p>Stop treating security as a gate at the end of the pipeline. Embed it into how your team thinks, designs, and ships. This requires specific policies, visible leadership, and the willingness to slow down a release when the answer to &ldquo;what happens if this gets compromised?&rdquo; is &ldquo;I don&rsquo;t know.&rdquo;</p>
<h3 id="security-culture-isnt-a-project">Security culture isn&rsquo;t a project</h3>
<p>I&rsquo;ve watched teams try to buy their way into security. They purchase a scanner, run a penetration test once a year, and call it done. Then a junior engineer hardcodes an API key, pushes it to a public repo, and suddenly the scanner doesn&rsquo;t matter.</p>
<p>Security culture is the habit that prevents that push in the first place.</p>
<p>One team I worked with handled sensitive user data, including payment information. There&rsquo;s no version of &ldquo;we&rsquo;ll fix it later&rdquo; that regulators or users will accept. Security had to be foundational from the start, not bolted on after the first scare.</p>
<h3 id="what-cyber-defense-exercises-taught-me">What cyber-defense exercises taught me</h3>
<p>A principle I carry from cyber-defense exercises: the biggest lesson was organizational. The teams that performed well were the ones where every person understood the threat model and acted on it without waiting for permission. Tooling mattered less than that.</p>
<p>That stuck with me. Security at scale is a culture problem first.</p>
<h3 id="the-policies-i-actually-enforce">The policies I actually enforce</h3>
<p>Theory is cheap. Here are the specific rules I&rsquo;ve implemented across teams.</p>
<p><strong>No secrets in code. Ever.</strong> We use environment variables and a secrets manager. The CI pipeline fails if it detects anything that looks like a key or credential in the codebase. This is automated, not optional, and not overridable without a written justification that I personally review.</p>
<p><strong>Every pull request gets a security question.</strong> Not a full threat model. Just one question: &ldquo;What is the worst thing that happens if this code is exploited?&rdquo; If the author can&rsquo;t answer it, the PR doesn&rsquo;t merge. This forces engineers to think about attack surface as part of their daily work, not as a separate exercise.</p>
<p><strong>Least privilege by default.</strong> New services start with zero permissions and add only what they need. New employees get read access to the repositories they work on and nothing else. Escalation requires a request and a reason. I review access quarterly and revoke anything that isn&rsquo;t actively justified.</p>
<p><strong>Dependency updates aren&rsquo;t optional.</strong> We track dependencies weekly. Known vulnerabilities get patched within 48 hours for critical severity, one week for high. This is a policy, not a suggestion. I&rsquo;ve delayed feature work to meet these windows.</p>
<p><strong>Incident response is rehearsed.</strong> We run a  <a href="/blog/2016-05-23-security-incident-response-for-startups/"
   
   >tabletop exercise</a>
 every quarter. Not a checkbox drill. A real scenario where I throw a curveball halfway through to see how the team adapts. The ones who have done this three or four times respond to real incidents with calm instead of panic.</p>
<h3 id="the-hard-part-is-consistency">The hard part is consistency</h3>
<p>Any team can write a security policy document. The hard part is enforcing it on the days when you&rsquo;re behind on a deadline and the shortcut is right there.</p>
<p>I&rsquo;ve blocked releases. I&rsquo;ve told product managers that a feature would ship a week late because the authentication flow wasn&rsquo;t reviewed. Those conversations are uncomfortable. They are also the moments that define whether your culture is real or performative.</p>
<p>Engineers watch what leadership does, not what leadership says. If the CTO merges a PR that skips the security review because &ldquo;we need to ship,&rdquo; every engineer on the team learns that security is negotiable. It takes one exception to undo months of habit building.</p>
<h3 id="security-champions-scale-your-coverage">Security champions scale your coverage</h3>
<p>I can&rsquo;t review every line of code. No security team can. The answer isn&rsquo;t to hire more security people. It&rsquo;s to make every engineer a little bit dangerous.</p>
<p>The model I like: one engineer on each team acts as a security champion. Not a full-time role. Maybe 10-15% of their time. They attend a monthly session to review recent vulnerabilities in the stack, discuss attack patterns relevant to the business, and update the threat model.</p>
<p>These champions become the first line of defense in code reviews. They catch the obvious issues before they reach me, and they raise the questions that nobody else on the team would think to ask.</p>
<p>The key is that being a security champion is respected. It counts in performance reviews. It isn&rsquo;t extra work on top of their real job. It&rsquo;s part of their real job.</p>
<h3 id="make-the-secure-path-the-easy-path">Make the secure path the easy path</h3>
<p>If doing the right thing is harder than doing the wrong thing, people will do the wrong thing. That&rsquo;s ordinary human behavior.</p>
<p>We built internal libraries that handle authentication, input validation, and encryption correctly. When an engineer needs to call an external API, they use our wrapper that handles TLS verification, credential injection, and audit logging automatically. The secure path is also the path with less code to write.</p>
<p>We templated our infrastructure so that new services deploy with network isolation, encrypted storage, and logging enabled by default. An engineer has to go out of their way to deploy something insecure. That friction is intentional.</p>
<h3 id="incidents-are-data-not-blame">Incidents are data, not blame</h3>
<p>When something goes wrong, and it will, the response determines whether your culture strengthens or collapses.</p>
<p>We run  <a href="/blog/2016-07-18-building-resilient-systems-lessons-from-production-failures/"
   
   >blameless postmortems</a>
, because blame destroys information flow. If engineers fear punishment, they hide mistakes. Hidden mistakes compound. The breach that takes down a company is rarely the first failure. It&rsquo;s the tenth failure that nobody reported because the first person who reported one got burned.</p>
<p>Every postmortem produces exactly two outputs: a timeline of what happened, and a list of specific changes to prevent recurrence. Not &ldquo;be more careful.&rdquo; Specific changes. A new automated check. A revised permission. A policy update.</p>
<h3 id="security-is-a-daily-decision">Security is a daily decision</h3>
<p>Security culture is discipline. It&rsquo;s the same decision made correctly a thousand times, even when it&rsquo;s inconvenient. Especially when it&rsquo;s inconvenient.</p>
<p>You build it by enforcing the standards you set, including on yourself.</p>
]]></content:encoded></item><item><title>Building a DevOps Culture from Scratch</title><link>https://lawzava.com/blog/2016-03-10-building-devops-culture-from-scratch/</link><pubDate>Thu, 10 Mar 2016 00:00:00 +0000</pubDate><guid>https://lawzava.com/blog/2016-03-10-building-devops-culture-from-scratch/</guid><description>Hiring a DevOps engineer won&amp;amp;rsquo;t end the dev vs ops fight. Put developers on the pager, pilot with one team, and fix incentives before tools.</description><content:encoded><![CDATA[<p>I keep seeing the same pattern. A company posts a job listing for a &ldquo;DevOps engineer,&rdquo; hires someone smart, hands them a Jira board, and waits for magic. Six months later the deploy pipeline is marginally better but the teams still don&rsquo;t trust each other. The hire burns out. Everyone blames the tools.</p>
<p>DevOps isn&rsquo;t a role. It isn&rsquo;t Jenkins. It isn&rsquo;t even a set of practices you can copy from a blog post. It&rsquo;s a cultural shift where the people who build software and the people who run it share the same goals, the same pain, and the same wins. Fix the incentives that make dev and ops fight each other first. Tools come second.</p>
<p>I learned this the hard way at a mobility startup.</p>
<h2 id="what-happened-at-the-mobility-startup">What Happened at the Mobility Startup</h2>
<p>When I joined, we had a classic split. Three backend engineers shipping features as fast as possible. One ops person, call him Max, who kept the lights on. The engineers would push code on Friday afternoon, Max would get paged at 2 a.m. Saturday, and Monday morning would start with a blame session disguised as a standup.</p>
<p>Max was good at his job. The engineers were good at theirs. The system between them was broken.</p>
<p>The fix wasn&rsquo;t a tool. It was a conversation. I put the entire team in a room and said: starting next week, the person who ships the code carries the pager for it. Not forever, just for the first 48 hours after deploy. If your code wakes someone up, that someone is you.</p>
<p>The reaction was roughly what you would expect. The engineers hated it. Max loved it. But within two weeks, something shifted. Deploys got smaller. Engineers started writing  <a href="/blog/2016-02-08-docker-in-production-lessons-from-running-containers-at-scale/"
   
   >health checks</a>
 without being asked. Someone added a runbook for the payment service, unprompted. The Friday afternoon deploys stopped entirely.</p>
<p>Nobody told them to do any of that. The incentive structure changed, and the behavior followed.</p>
<h2 id="start-with-shared-pain-not-shared-tools">Start With Shared Pain, Not Shared Tools</h2>
<p>That experience taught me something I keep coming back to: if you want DevOps culture, start by making everyone feel the consequences of their decisions.</p>
<p>Developers who never see production alerts write code that&rsquo;s hard to operate. Ops people who never sit in planning meetings treat every deploy as a threat. The gap is empathy.</p>
<p>The cheapest thing you can do is cross-pollinate. Have a developer shadow on-call for a week. Have the ops person sit in sprint planning. Run a postmortem together after the next incident and focus on the system, not the person. I&rsquo;ve never seen a team do this and not come out with a better understanding of each other.</p>
<h2 id="pick-a-pilot-team-and-let-them-own-it">Pick a Pilot Team and Let Them Own It</h2>
<p>Don&rsquo;t try to transform the whole company at once. Pick one team. Give them ownership of their deploy pipeline and their on-call. Let them figure out what works. Measure what happens.</p>
<p>At the mobility startup, that pilot was the team running the vehicle availability service. Small blast radius, clear metrics, leadership willing to experiment. They went from deploying once a week to deploying daily within a month. Not because I told them to, but because shorter cycles meant smaller changes meant fewer pages.</p>
<p>The rest of the engineering org watched this happen. Nobody had to sell them on DevOps after that. They just asked when they could start.</p>
<h2 id="the-technical-stuff-matters-but-it-isnt-first">The Technical Stuff Matters, But It Isn&rsquo;t First</h2>
<p>Once the culture is moving, you need the technical foundations to support it. Infrastructure as code so environments are reproducible. A CI pipeline so every commit gets tested. Monitoring that answers &ldquo;is this thing working&rdquo; without requiring tribal knowledge.</p>
<p>In 2016, that means Ansible or Chef for config management, Jenkins or CircleCI for builds, and something like the ELK stack or Graphite for observability. The specific tools matter less than the principle: everything should be automated, version-controlled, and visible to the whole team.</p>
<p>I&rsquo;ve seen teams with perfect pipelines and terrible culture. The pipeline doesn&rsquo;t fix trust. It just makes deploys faster. If the team still throws code over the wall and blames each other when it breaks, a faster pipeline just accelerates the dysfunction.</p>
<h2 id="traps-ive-walked-into">Traps I&rsquo;ve Walked Into</h2>
<p><strong>The hero trap.</strong> At the mobility startup, Max was the hero. He could fix anything at 3 a.m. That felt like a strength until he took a week off and nobody knew how to restart the payment gateway. Heroes are a single point of failure wearing a cape. Spread the knowledge.</p>
<p><strong>Tool obsession.</strong> We spent two weeks evaluating orchestration platforms when the real problem was that nobody knew what was running in production. A shared spreadsheet would have been more useful than Kubernetes at that point. Solve the problem you actually have.</p>
<p><strong>Burnout disguised as ownership.</strong> If you give developers pager duty without reducing their feature load, you aren&rsquo;t building DevOps culture. You&rsquo;re just distributing the suffering more evenly. Shared responsibility means shared capacity planning too.</p>
<h2 id="its-a-slow-game">It&rsquo;s a Slow Game</h2>
<p>DevOps culture doesn&rsquo;t happen in a quarter. At the mobility startup, it took about six months before the dev-vs-ops tension actually went away. The team went from monthly releases with weekend war rooms to daily deploys that nobody thought twice about. But it was gradual, messy, and full of setbacks.</p>
<p>The wins compound though. Smaller deploys mean fewer incidents. Fewer incidents mean less firefighting. Less firefighting means more time for the work that actually matters. Once that flywheel starts turning, it&rsquo;s hard to stop.</p>
<p>If you&rsquo;re starting from zero, that&rsquo;s fine. Most teams are. Start with the incentives, not the tools. Make people feel what production actually looks like. Pick a small team and let them prove the model. The culture will follow the work.</p>
]]></content:encoded></item></channel></rss>