{"id":"09-code-review","number":9,"slug":"reviewing-agent-code","title":"Reviewing agent code","short":"Reviewing agent code","module":"Working with one agent","summary":"Agents write code faster than anyone can read it, and review has become the new bottleneck. Practitioners disagree about reading every line, but they agree on how to review well: scale depth to blast radius, review your own work first, use a fresh-context reviewer, and turn repeated comments into rules.","voice":"Eric","scenes":[{"template":"title","chapter":"Intro","narration":"Agents can write code far faster than any human can read it. So who reviews it, and how much is enough? This is where agentic engineering gets hard.","params":{"kicker":"Lesson 9","module":"Module 2 · Working with one agent","title":"Reviewing *agent code*","subtitle":"Review has become the new bottleneck. Here's how to scale it.","bubble":"Here's 2,000 lines. Enjoy!","mood":"happy"},"start":0.5,"dur":11.388,"words":[{"text":"Agents","s":0.8,"e":1.2},{"text":"can","s":1.28,"e":1.36},{"text":"write","s":1.44,"e":1.68},{"text":"code","s":1.76,"e":2.08},{"text":"far","s":2.24,"e":2.48},{"text":"faster","s":2.56,"e":2.96},{"text":"than","s":3.08,"e":3.2},{"text":"any","s":3.28,"e":3.44},{"text":"human","s":3.52,"e":3.84},{"text":"can","s":3.92,"e":4},{"text":"read","s":4.08,"e":4.24},{"text":"it.","s":4.32,"e":4.72},{"text":"So","s":4.96,"e":5.2},{"text":"who","s":5.44,"e":5.6},{"text":"reviews","s":5.8,"e":6},{"text":"it,","s":6.08,"e":6.48},{"text":"and","s":6.6,"e":6.72},{"text":"how","s":6.88,"e":6.96},{"text":"much","s":7.04,"e":7.2},{"text":"is","s":7.24,"e":7.28},{"text":"enough?","s":7.36,"e":7.84},{"text":"This","s":8.4,"e":8.56},{"text":"is","s":8.64,"e":8.72},{"text":"where","s":8.8,"e":8.88},{"text":"agentic","s":9,"e":9.44},{"text":"engineering","s":9.72,"e":10},{"text":"gets","s":10.12,"e":10.24},{"text":"hard.","s":10.32,"e":11.04}]},{"template":"stat","chapter":"The new bottleneck","narration":"At Uber, the time it takes an engineer to get a first code review grew from three hours in 2024 to nine hours in 2026, as pull requests got bigger and more frequent. And Beyang Liu from Sourcegraph hears developers say they now spend around ninety percent of their time reviewing code.","params":{"items":[{"value":"3h → 9h","label":"time to first review at Uber, 2024 → 2026","tone":"bad","at":"three hours"},{"value":"~90%","label":"of time spent reviewing, some developers report","tone":"ink","at":"ninety percent"}],"src":"Will Bond, Uber (AI Engineer) · Beyang Liu, Sourcegraph (a16z)"},"start":11.888,"dur":19.549,"words":[{"text":"At","s":12.188,"e":12.348},{"text":"Uber,","s":12.508,"e":13.068},{"text":"the","s":13.148,"e":13.228},{"text":"time","s":13.348,"e":13.468},{"text":"it","s":13.508,"e":13.548},{"text":"takes","s":13.628,"e":13.788},{"text":"an","s":13.868,"e":13.948},{"text":"engineer","s":14.108,"e":14.348},{"text":"to","s":14.428,"e":14.508},{"text":"get","s":14.548,"e":14.588},{"text":"a","s":14.668,"e":14.828},{"text":"first","s":14.948,"e":15.068},{"text":"code","s":15.148,"e":15.388},{"text":"review","s":15.588,"e":15.788},{"text":"grew","s":15.948,"e":16.188},{"text":"from","s":16.308,"e":16.428},{"text":"three","s":16.508,"e":16.748},{"text":"hours","s":16.828,"e":17.148},{"text":"in","s":17.228,"e":17.308},{"text":"2024","s":17.388,"e":17.468},{"text":"to","s":17.628,"e":18.028},{"text":"nine","s":18.588,"e":19.068},{"text":"hours","s":19.148,"e":19.468},{"text":"in","s":19.548,"e":19.628},{"text":"2026,","s":19.708,"e":20.908},{"text":"as","s":20.988,"e":21.068},{"text":"pull","s":21.148,"e":21.308},{"text":"requests","s":21.388,"e":21.868},{"text":"got","s":21.948,"e":22.188},{"text":"bigger","s":22.321,"e":22.588},{"text":"and","s":22.668,"e":22.748},{"text":"more","s":22.868,"e":22.988},{"text":"frequent.","s":23.028,"e":24.028},{"text":"And","s":24.108,"e":24.188},{"text":"Beyang","s":24.228,"e":24.588},{"text":"Liu","s":24.668,"e":24.988},{"text":"from","s":25.068,"e":25.148},{"text":"Sourcegraph","s":25.228,"e":25.948},{"text":"hears","s":25.988,"e":26.188},{"text":"developers","s":26.268,"e":26.828},{"text":"say","s":26.948,"e":27.068},{"text":"they","s":27.188,"e":27.308},{"text":"now","s":27.388,"e":27.468},{"text":"spend","s":27.548,"e":27.788},{"text":"around","s":27.868,"e":28.268},{"text":"ninety","s":28.348,"e":28.588},{"text":"percent","s":28.668,"e":29.068},{"text":"of","s":29.108,"e":29.148},{"text":"their","s":29.228,"e":29.388},{"text":"time","s":29.508,"e":29.628},{"text":"reviewing","s":29.708,"e":30.188},{"text":"code.","s":30.388,"e":30.828}]},{"template":"compare","chapter":"Two camps","narration":"Practitioners genuinely disagree about how much to read. Peter Steinberger says much of an app is boring plumbing, and he ships code he doesn't read. Dex Horthy's team tried not reading agent code for six months. It did not end well. They had to rip out and replace large parts of the system.","params":{"left":{"title":"“I ship code I don't read”","tone":"neutral","items":["Much of an app is plumbing","Focus on architecture","Peter Steinberger, OpenClaw"],"at":"Steinberger"},"right":{"title":"“It did not end well”","tone":"human","items":["Six months without reading","Large parts ripped out","Dex Horthy, HumanLayer"],"at":"Dex"},"vs":"vs"},"start":31.437,"dur":19.706,"words":[{"text":"Practitioners","s":31.737,"e":32.457},{"text":"genuinely","s":32.617,"e":33.177},{"text":"disagree","s":33.257,"e":33.817},{"text":"about","s":33.937,"e":34.057},{"text":"how","s":34.137,"e":34.297},{"text":"much","s":34.377,"e":34.537},{"text":"to","s":34.617,"e":34.697},{"text":"read.","s":34.777,"e":35.097},{"text":"Peter","s":35.657,"e":35.897},{"text":"Steinberger","s":35.977,"e":36.617},{"text":"says","s":36.697,"e":36.937},{"text":"much","s":37.097,"e":37.257},{"text":"of","s":37.297,"e":37.337},{"text":"an","s":37.377,"e":37.417},{"text":"app","s":37.497,"e":37.657},{"text":"is","s":37.737,"e":37.817},{"text":"boring","s":37.977,"e":38.377},{"text":"plumbing,","s":38.457,"e":39.177},{"text":"and","s":39.257,"e":39.337},{"text":"he","s":39.417,"e":39.497},{"text":"ships","s":39.577,"e":39.817},{"text":"code","s":39.897,"e":40.137},{"text":"he","s":40.177,"e":40.217},{"text":"doesn't","s":40.297,"e":40.537},{"text":"read.","s":40.697,"e":41.177},{"text":"Dex","s":41.497,"e":41.737},{"text":"Horthy's","s":41.777,"e":42.217},{"text":"team","s":42.337,"e":42.457},{"text":"tried","s":42.537,"e":42.777},{"text":"not","s":42.857,"e":43.097},{"text":"reading","s":43.177,"e":43.417},{"text":"agent","s":43.497,"e":43.737},{"text":"code","s":43.817,"e":44.057},{"text":"for","s":44.137,"e":44.297},{"text":"six","s":44.377,"e":44.617},{"text":"months.","s":44.777,"e":45.377},{"text":"It","s":45.577,"e":45.737},{"text":"did","s":45.857,"e":45.977},{"text":"not","s":46.057,"e":46.297},{"text":"end","s":46.377,"e":46.537},{"text":"well.","s":46.617,"e":46.937},{"text":"They","s":47.417,"e":47.497},{"text":"had","s":47.577,"e":47.657},{"text":"to","s":47.737,"e":47.817},{"text":"rip","s":47.937,"e":48.057},{"text":"out","s":48.177,"e":48.297},{"text":"and","s":48.337,"e":48.377},{"text":"replace","s":48.457,"e":48.937},{"text":"large","s":49.097,"e":49.337},{"text":"parts","s":49.417,"e":49.657},{"text":"of","s":49.697,"e":49.737},{"text":"the","s":49.817,"e":49.857},{"text":"system.","s":49.897,"e":50.537}]},{"template":"statement","chapter":"A gradient","narration":"Both can be right, because review isn't a yes or no. Meta's John Kim calls it a gradient. How deeply you read should depend on the blast radius of the change: how much can break if it's wrong.","params":{"text":"Review is a *gradient*. Read as deeply as the blast radius demands.","sub":"John Kim, Meta","art":"target","tone":"agent"},"start":51.143,"dur":14.037,"words":[{"text":"Both","s":51.443,"e":51.763},{"text":"can","s":51.843,"e":51.923},{"text":"be","s":52.003,"e":52.083},{"text":"right,","s":52.163,"e":52.803},{"text":"because","s":52.883,"e":53.123},{"text":"review","s":53.363,"e":53.603},{"text":"isn't","s":53.683,"e":54.003},{"text":"a","s":54.043,"e":54.083},{"text":"yes","s":54.163,"e":54.403},{"text":"or","s":54.443,"e":54.483},{"text":"no.","s":54.563,"e":55.203},{"text":"Meta's","s":55.523,"e":55.843},{"text":"John","s":55.923,"e":56.163},{"text":"Kim","s":56.243,"e":56.563},{"text":"calls","s":56.643,"e":56.883},{"text":"it","s":56.963,"e":57.043},{"text":"a","s":57.123,"e":57.203},{"text":"gradient.","s":57.283,"e":58.123},{"text":"How","s":58.403,"e":58.563},{"text":"deeply","s":58.723,"e":59.043},{"text":"you","s":59.123,"e":59.203},{"text":"read","s":59.283,"e":59.603},{"text":"should","s":59.683,"e":59.763},{"text":"depend","s":59.843,"e":60.163},{"text":"on","s":60.243,"e":60.323},{"text":"the","s":60.403,"e":60.443},{"text":"blast","s":60.483,"e":60.883},{"text":"radius","s":60.963,"e":61.283},{"text":"of","s":61.323,"e":61.363},{"text":"the","s":61.443,"e":61.523},{"text":"change:","s":61.603,"e":62.483},{"text":"how","s":62.563,"e":62.643},{"text":"much","s":62.723,"e":62.883},{"text":"can","s":62.963,"e":63.043},{"text":"break","s":63.123,"e":63.523},{"text":"if","s":63.603,"e":63.683},{"text":"it's","s":63.763,"e":63.883},{"text":"wrong.","s":63.923,"e":64.563}]},{"template":"stack","chapter":"A gradient","narration":"He pictures a codebase as a tree. The trunk is entry points and shared infrastructure, like networking, authentication or payments. Break it, and the whole app breaks, so read every line. The leaves are isolated, one-off code. There, tests and a screenshot of it working may be enough.","params":{"title":"Review depth follows the tree","sub":"John Kim's model","layers":[{"label":"Trunk","sub":"auth, payments, shared infra: read every line","tone":"ink","icon":"lock","at":"trunk"},{"label":"Branches","sub":"core features: read the important parts","tone":"agent","icon":"branch","at":"Break it"},{"label":"Leaves","sub":"isolated one-offs: tests + visual proof","tone":"good","icon":"check","at":"leaves"}]},"start":65.18,"dur":20.098,"words":[{"text":"He","s":65.48,"e":65.64},{"text":"pictures","s":65.72,"e":66.04},{"text":"a","s":66.08,"e":66.12},{"text":"codebase","s":66.2,"e":66.76},{"text":"as","s":66.84,"e":66.92},{"text":"a","s":67,"e":67.08},{"text":"tree.","s":67.28,"e":67.96},{"text":"The","s":68.04,"e":68.12},{"text":"trunk","s":68.2,"e":68.52},{"text":"is","s":68.6,"e":68.84},{"text":"entry","s":69,"e":69.16},{"text":"points","s":69.24,"e":69.56},{"text":"and","s":69.6,"e":69.64},{"text":"shared","s":69.72,"e":69.96},{"text":"infrastructure,","s":70.04,"e":70.92},{"text":"like","s":71.04,"e":71.16},{"text":"networking,","s":71.24,"e":71.96},{"text":"authentication","s":72.36,"e":72.76},{"text":"or","s":72.84,"e":72.92},{"text":"payments.","s":73,"e":73.76},{"text":"Break","s":74.04,"e":74.28},{"text":"it,","s":74.36,"e":74.6},{"text":"and","s":74.64,"e":74.68},{"text":"the","s":74.76,"e":74.84},{"text":"whole","s":75,"e":75.24},{"text":"app","s":75.32,"e":75.56},{"text":"breaks,","s":75.72,"e":76.2},{"text":"so","s":76.28,"e":76.44},{"text":"read","s":76.52,"e":76.76},{"text":"every","s":76.92,"e":77.24},{"text":"line.","s":77.32,"e":77.96},{"text":"The","s":78.28,"e":78.36},{"text":"leaves","s":78.44,"e":78.76},{"text":"are","s":78.84,"e":79},{"text":"isolated,","s":79.2,"e":79.88},{"text":"one-off","s":79.96,"e":80.36},{"text":"code.","s":80.52,"e":81.16},{"text":"There,","s":81.32,"e":81.72},{"text":"tests","s":81.96,"e":82.2},{"text":"and","s":82.28,"e":82.36},{"text":"a","s":82.4,"e":82.44},{"text":"screenshot","s":82.48,"e":83},{"text":"of","s":83.04,"e":83.08},{"text":"it","s":83.12,"e":83.16},{"text":"working","s":83.24,"e":83.64},{"text":"may","s":83.72,"e":83.8},{"text":"be","s":83.88,"e":83.96},{"text":"enough.","s":84.04,"e":84.68}]},{"template":"list","chapter":"Three questions","narration":"To set the depth, he asks three questions. What must not change? How bad is it if this goes wrong? And can I roll it back? A change that's hidden behind a flag and easy to roll back needs far less scrutiny than one that can't be undone.","params":{"title":"Three questions before you review","style":"num","items":[{"text":"What must not change?","at":"must not change"},{"text":"How bad is it if this goes wrong?","at":"how bad"},{"text":"Can I roll it back?","sub":"flags and easy rollbacks cut review time","at":"roll it back"}]},"start":85.278,"dur":16.832,"words":[{"text":"To","s":85.578,"e":85.738},{"text":"set","s":85.818,"e":85.978},{"text":"the","s":86.058,"e":86.138},{"text":"depth,","s":86.218,"e":86.778},{"text":"he","s":86.858,"e":86.938},{"text":"asks","s":87.138,"e":87.338},{"text":"three","s":87.418,"e":87.578},{"text":"questions.","s":87.658,"e":88.298},{"text":"What","s":88.858,"e":89.018},{"text":"must","s":89.098,"e":89.338},{"text":"not","s":89.418,"e":89.658},{"text":"change?","s":89.738,"e":90.418},{"text":"How","s":90.698,"e":90.858},{"text":"bad","s":91.018,"e":91.178},{"text":"is","s":91.258,"e":91.338},{"text":"it","s":91.418,"e":91.498},{"text":"if","s":91.578,"e":91.658},{"text":"this","s":91.738,"e":91.818},{"text":"goes","s":91.898,"e":92.058},{"text":"wrong?","s":92.138,"e":92.858},{"text":"And","s":93.018,"e":93.178},{"text":"can","s":93.578,"e":93.658},{"text":"I","s":93.738,"e":93.818},{"text":"roll","s":93.898,"e":93.978},{"text":"it","s":94.058,"e":94.138},{"text":"back?","s":94.218,"e":94.818},{"text":"A","s":95.098,"e":95.178},{"text":"change","s":95.258,"e":95.578},{"text":"that's","s":95.658,"e":95.818},{"text":"hidden","s":95.938,"e":96.058},{"text":"behind","s":96.138,"e":96.298},{"text":"a","s":96.378,"e":96.458},{"text":"flag","s":96.538,"e":96.938},{"text":"and","s":97.058,"e":97.178},{"text":"easy","s":97.258,"e":97.498},{"text":"to","s":97.538,"e":97.578},{"text":"roll","s":97.658,"e":97.818},{"text":"back","s":97.898,"e":98.218},{"text":"needs","s":98.298,"e":98.618},{"text":"far","s":98.698,"e":98.938},{"text":"less","s":99.018,"e":99.178},{"text":"scrutiny","s":99.298,"e":99.738},{"text":"than","s":99.858,"e":99.978},{"text":"one","s":100.058,"e":100.138},{"text":"that","s":100.218,"e":100.298},{"text":"can't","s":100.378,"e":100.618},{"text":"be","s":100.658,"e":100.698},{"text":"undone.","s":100.778,"e":101.498}]},{"template":"statement","chapter":"Load-bearing code","narration":"Thorsten Ball adds a related idea. Even if agents write ninety-nine percent of your code, you need to know what's load-bearing: the protocols between components, the business logic, the things that keep the system standing. When an agent touches those, watch it like a hawk.","params":{"text":"Know what's *load-bearing*, and watch those changes like a hawk.","sub":"Thorsten Ball, Amp · protocols, business logic, the parts that hold everything up","art":"layers","tone":"agent","sync":false},"start":102.11,"dur":18.034,"words":[{"text":"Thorsten","s":102.41,"e":102.89},{"text":"Ball","s":102.97,"e":103.29},{"text":"adds","s":103.37,"e":103.53},{"text":"a","s":103.61,"e":103.65},{"text":"related","s":103.69,"e":104.09},{"text":"idea.","s":104.17,"e":104.57},{"text":"Even","s":105.21,"e":105.37},{"text":"if","s":105.45,"e":105.53},{"text":"agents","s":105.61,"e":105.93},{"text":"write","s":106.01,"e":106.25},{"text":"ninety-nine","s":106.33,"e":106.81},{"text":"percent","s":106.97,"e":107.21},{"text":"of","s":107.25,"e":107.29},{"text":"your","s":107.37,"e":107.45},{"text":"code,","s":107.53,"e":108.25},{"text":"you","s":108.33,"e":108.41},{"text":"need","s":108.49,"e":108.65},{"text":"to","s":108.73,"e":108.81},{"text":"know","s":108.89,"e":108.97},{"text":"what's","s":109.13,"e":109.37},{"text":"load-bearing:","s":109.45,"e":110.49},{"text":"the","s":110.53,"e":110.57},{"text":"protocols","s":110.65,"e":111.21},{"text":"between","s":111.37,"e":111.53},{"text":"components,","s":111.61,"e":112.49},{"text":"the","s":112.53,"e":112.57},{"text":"business","s":112.65,"e":112.97},{"text":"logic,","s":113.05,"e":113.85},{"text":"the","s":113.89,"e":113.93},{"text":"things","s":114.01,"e":114.25},{"text":"that","s":114.33,"e":114.41},{"text":"keep","s":114.49,"e":114.65},{"text":"the","s":114.73,"e":114.77},{"text":"system","s":114.81,"e":115.13},{"text":"standing.","s":115.29,"e":116.05},{"text":"When","s":116.33,"e":116.41},{"text":"an","s":116.49,"e":116.57},{"text":"agent","s":116.65,"e":116.89},{"text":"touches","s":116.97,"e":117.29},{"text":"those,","s":117.37,"e":118.09},{"text":"watch","s":118.21,"e":118.33},{"text":"it","s":118.41,"e":118.49},{"text":"like","s":118.57,"e":118.65},{"text":"a","s":118.73,"e":118.81},{"text":"hawk.","s":118.89,"e":119.53}]},{"template":"quote","chapter":"Review your own first","narration":"Simon Willison calls out the most common anti-pattern: don't file pull requests with code you haven't reviewed yourself. Your reviewers could have prompted an agent themselves. Your value is the verification, so attach evidence: how you tested it, screenshots, notes on tricky choices.","params":{"text":"Don't file pull requests with code you *haven't reviewed yourself*.","who":"Simon Willison","role":"Agentic Engineering Patterns","src":"Anti-patterns: things to avoid"},"start":120.144,"dur":19.157,"words":[{"text":"Simon","s":120.444,"e":120.844},{"text":"Willison","s":120.924,"e":121.404},{"text":"calls","s":121.484,"e":121.724},{"text":"out","s":121.804,"e":121.884},{"text":"the","s":121.924,"e":121.964},{"text":"most","s":122.124,"e":122.364},{"text":"common","s":122.524,"e":122.844},{"text":"anti-pattern:","s":122.924,"e":124.124},{"text":"don't","s":124.284,"e":124.524},{"text":"file","s":124.604,"e":124.844},{"text":"pull","s":124.924,"e":125.084},{"text":"requests","s":125.324,"e":125.564},{"text":"with","s":125.644,"e":125.724},{"text":"code","s":125.804,"e":126.044},{"text":"you","s":126.124,"e":126.284},{"text":"haven't","s":126.364,"e":126.604},{"text":"reviewed","s":126.764,"e":127.004},{"text":"yourself.","s":127.124,"e":127.644},{"text":"Your","s":128.124,"e":128.204},{"text":"reviewers","s":128.404,"e":128.764},{"text":"could","s":128.844,"e":128.924},{"text":"have","s":129.004,"e":129.084},{"text":"prompted","s":129.244,"e":129.484},{"text":"an","s":129.564,"e":129.644},{"text":"agent","s":129.724,"e":129.964},{"text":"themselves.","s":130.004,"e":130.924},{"text":"Your","s":131.164,"e":131.324},{"text":"value","s":131.404,"e":131.804},{"text":"is","s":131.884,"e":131.964},{"text":"the","s":132.044,"e":132.084},{"text":"verification,","s":132.124,"e":133.164},{"text":"so","s":133.244,"e":133.484},{"text":"attach","s":133.684,"e":133.884},{"text":"evidence:","s":133.964,"e":134.924},{"text":"how","s":135.004,"e":135.084},{"text":"you","s":135.164,"e":135.244},{"text":"tested","s":135.444,"e":135.644},{"text":"it,","s":135.724,"e":136.044},{"text":"screenshots,","s":136.124,"e":137.084},{"text":"notes","s":137.164,"e":137.404},{"text":"on","s":137.484,"e":137.564},{"text":"tricky","s":137.604,"e":137.884},{"text":"choices.","s":138.164,"e":138.684}]},{"template":"flow","chapter":"A fresh reviewer","narration":"Agents can review too, if you set it up right. Anthropic's guide recommends a writer and reviewer pattern: a fresh session reviews the change, because it isn't biased toward code it just wrote. Matt Pocock warns that a review in the same long session happens in the dumb zone. At Anthropic, Claude reviews every pull request, and then a human does.","params":{"nodes":[{"label":"Writer agent","sub":"implements + tests","kind":"agent","at":"writer"},{"label":"Your own pass","sub":"diff + evidence","kind":"human","at":"set it up"},{"label":"Fresh reviewer","sub":"new session, new eyes","kind":"agent","at":"fresh session"},{"label":"Human review","sub":"the big questions","kind":"check","at":"then a human"}]},"start":139.301,"dur":22.736,"words":[{"text":"Agents","s":139.601,"e":140.001},{"text":"can","s":140.081,"e":140.161},{"text":"review","s":140.241,"e":140.561},{"text":"too,","s":140.721,"e":141.121},{"text":"if","s":141.201,"e":141.281},{"text":"you","s":141.361,"e":141.441},{"text":"set","s":141.521,"e":141.601},{"text":"it","s":141.641,"e":141.681},{"text":"up","s":141.761,"e":141.841},{"text":"right.","s":141.921,"e":142.241},{"text":"Anthropic's","s":142.721,"e":143.361},{"text":"guide","s":143.521,"e":143.681},{"text":"recommends","s":143.761,"e":144.161},{"text":"a","s":144.241,"e":144.321},{"text":"writer","s":144.401,"e":144.801},{"text":"and","s":144.881,"e":144.961},{"text":"reviewer","s":145.161,"e":145.441},{"text":"pattern:","s":145.521,"e":146.401},{"text":"a","s":146.481,"e":146.561},{"text":"fresh","s":146.641,"e":146.881},{"text":"session","s":146.961,"e":147.281},{"text":"reviews","s":147.361,"e":147.761},{"text":"the","s":147.801,"e":147.841},{"text":"change,","s":147.921,"e":148.401},{"text":"because","s":148.521,"e":148.641},{"text":"it","s":148.721,"e":148.801},{"text":"isn't","s":148.881,"e":149.121},{"text":"biased","s":149.321,"e":149.521},{"text":"toward","s":149.561,"e":149.761},{"text":"code","s":149.841,"e":150.081},{"text":"it","s":150.161,"e":150.241},{"text":"just","s":150.361,"e":150.481},{"text":"wrote.","s":150.521,"e":150.881},{"text":"Matt","s":151.361,"e":151.601},{"text":"Pocock","s":151.681,"e":152.161},{"text":"warns","s":152.321,"e":152.561},{"text":"that","s":152.641,"e":152.721},{"text":"a","s":152.761,"e":152.801},{"text":"review","s":153.001,"e":153.201},{"text":"in","s":153.241,"e":153.281},{"text":"the","s":153.361,"e":153.521},{"text":"same","s":153.681,"e":153.841},{"text":"long","s":153.921,"e":154.161},{"text":"session","s":154.241,"e":154.641},{"text":"happens","s":154.721,"e":155.121},{"text":"in","s":155.201,"e":155.281},{"text":"the","s":155.361,"e":155.441},{"text":"dumb","s":155.601,"e":155.841},{"text":"zone.","s":155.921,"e":156.521},{"text":"At","s":156.801,"e":156.881},{"text":"Anthropic,","s":156.961,"e":157.761},{"text":"Claude","s":157.841,"e":158.081},{"text":"reviews","s":158.161,"e":158.561},{"text":"every","s":158.641,"e":158.881},{"text":"pull","s":158.961,"e":159.201},{"text":"request,","s":159.441,"e":159.921},{"text":"and","s":160.001,"e":160.081},{"text":"then","s":160.201,"e":160.321},{"text":"a","s":160.401,"e":160.441},{"text":"human","s":160.481,"e":160.801},{"text":"does.","s":160.961,"e":161.441}]},{"template":"compare","chapter":"What humans review","narration":"So what should the human focus on? Leave typos, style and obvious bugs to automation. Spend your attention on the questions only you can answer: do we want this in our product? Is the boundary between these services in the right place? Will this design hold up?","params":{"left":{"title":"Automate it","tone":"agent","who":"agent","items":["Style and naming","Typos and obvious bugs","Missing tests"],"at":"automation"},"right":{"title":"Keep it human","tone":"human","who":"human","items":["Do we want this at all?","Are the boundaries right?","Will this design hold up?"],"at":"only you"},"vs":"+"},"start":162.037,"dur":17.956,"words":[{"text":"So","s":162.337,"e":162.577},{"text":"what","s":162.817,"e":163.057},{"text":"should","s":163.137,"e":163.217},{"text":"the","s":163.257,"e":163.297},{"text":"human","s":163.377,"e":163.697},{"text":"focus","s":163.777,"e":164.097},{"text":"on?","s":164.177,"e":164.657},{"text":"Leave","s":164.977,"e":165.217},{"text":"typos,","s":165.297,"e":166.097},{"text":"style","s":166.337,"e":166.577},{"text":"and","s":166.657,"e":166.817},{"text":"obvious","s":166.977,"e":167.297},{"text":"bugs","s":167.377,"e":167.697},{"text":"to","s":167.737,"e":167.777},{"text":"automation.","s":167.857,"e":168.817},{"text":"Spend","s":169.137,"e":169.377},{"text":"your","s":169.417,"e":169.457},{"text":"attention","s":169.537,"e":169.937},{"text":"on","s":170.017,"e":170.097},{"text":"the","s":170.137,"e":170.177},{"text":"questions","s":170.257,"e":170.737},{"text":"only","s":170.817,"e":171.137},{"text":"you","s":171.297,"e":171.377},{"text":"can","s":171.457,"e":171.537},{"text":"answer:","s":171.617,"e":172.577},{"text":"do","s":172.657,"e":172.737},{"text":"we","s":172.817,"e":172.897},{"text":"want","s":172.977,"e":173.217},{"text":"this","s":173.297,"e":173.377},{"text":"in","s":173.457,"e":173.497},{"text":"our","s":173.537,"e":173.617},{"text":"product?","s":173.697,"e":174.337},{"text":"Is","s":174.577,"e":174.657},{"text":"the","s":174.737,"e":174.817},{"text":"boundary","s":174.897,"e":175.297},{"text":"between","s":175.497,"e":175.697},{"text":"these","s":175.817,"e":175.937},{"text":"services","s":176.217,"e":176.497},{"text":"in","s":176.537,"e":176.577},{"text":"the","s":176.617,"e":176.657},{"text":"right","s":176.777,"e":176.897},{"text":"place?","s":177.097,"e":177.777},{"text":"Will","s":177.857,"e":178.017},{"text":"this","s":178.097,"e":178.177},{"text":"design","s":178.257,"e":178.657},{"text":"hold","s":178.737,"e":178.897},{"text":"up?","s":178.977,"e":179.377}]},{"template":"statement","chapter":"Make rules","narration":"One more habit from Lauren Tan. If you find yourself leaving the same review comment again and again, treat that as a smell. Turn it into a lint rule, a test, or a CI check, so no one, human or agent, ever has to say it again.","params":{"text":"Same review comment twice? Make it a *rule*.","sub":"A lint rule, a test or a CI check never forgets. — Lauren Tan","art":"tool","tone":"good","sync":false},"start":179.993,"dur":16.336,"words":[{"text":"One","s":180.293,"e":180.533},{"text":"more","s":180.653,"e":180.773},{"text":"habit","s":180.933,"e":181.093},{"text":"from","s":181.173,"e":181.253},{"text":"Lauren","s":181.333,"e":181.573},{"text":"Tan.","s":181.653,"e":181.973},{"text":"If","s":182.533,"e":182.693},{"text":"you","s":182.733,"e":182.773},{"text":"find","s":182.853,"e":183.013},{"text":"yourself","s":183.093,"e":183.413},{"text":"leaving","s":183.493,"e":183.733},{"text":"the","s":183.813,"e":183.973},{"text":"same","s":184.093,"e":184.213},{"text":"review","s":184.293,"e":184.613},{"text":"comment","s":184.693,"e":185.093},{"text":"again","s":185.293,"e":185.493},{"text":"and","s":185.533,"e":185.573},{"text":"again,","s":185.773,"e":186.453},{"text":"treat","s":186.493,"e":186.773},{"text":"that","s":186.893,"e":187.013},{"text":"as","s":187.093,"e":187.173},{"text":"a","s":187.253,"e":187.333},{"text":"smell.","s":187.413,"e":188.293},{"text":"Turn","s":188.373,"e":188.453},{"text":"it","s":188.493,"e":188.533},{"text":"into","s":188.613,"e":188.853},{"text":"a","s":188.893,"e":188.933},{"text":"lint","s":189.013,"e":189.253},{"text":"rule,","s":189.373,"e":189.733},{"text":"a","s":189.813,"e":189.893},{"text":"test,","s":190.093,"e":190.453},{"text":"or","s":190.573,"e":190.693},{"text":"a","s":190.773,"e":190.853},{"text":"CI","s":190.933,"e":191.253},{"text":"check,","s":191.333,"e":191.893},{"text":"so","s":191.973,"e":192.133},{"text":"no","s":192.213,"e":192.373},{"text":"one,","s":192.453,"e":192.773},{"text":"human","s":192.853,"e":193.253},{"text":"or","s":193.333,"e":193.413},{"text":"agent,","s":193.573,"e":194.133},{"text":"ever","s":194.213,"e":194.453},{"text":"has","s":194.533,"e":194.693},{"text":"to","s":194.773,"e":194.853},{"text":"say","s":194.933,"e":195.013},{"text":"it","s":195.053,"e":195.093},{"text":"again.","s":195.253,"e":195.733}]},{"template":"quiz","chapter":"Quick check","narration":"Quick check. Which of these changes deserves your most careful, line by line review? Tap your answer.","params":{"q":"Which change deserves your most careful line-by-line review?","options":["A one-off internal admin page","A change to the auth middleware every service uses","A copy tweak on a marketing page","A new unit test file"],"answer":1,"explain":"It's trunk code: a huge blast radius, security-critical, and hard to roll back safely."},"start":196.329,"dur":12.187,"words":[{"text":"Quick","s":196.629,"e":196.869},{"text":"check.","s":196.949,"e":197.549},{"text":"Which","s":197.829,"e":197.989},{"text":"of","s":198.029,"e":198.069},{"text":"these","s":198.149,"e":198.309},{"text":"changes","s":198.389,"e":198.789},{"text":"deserves","s":198.869,"e":199.269},{"text":"your","s":199.349,"e":199.429},{"text":"most","s":199.549,"e":199.669},{"text":"careful,","s":199.829,"e":200.469},{"text":"line","s":200.549,"e":200.789},{"text":"by","s":200.869,"e":201.029},{"text":"line","s":201.109,"e":201.349},{"text":"review?","s":201.549,"e":201.829},{"text":"Tap","s":202.309,"e":202.549},{"text":"your","s":202.629,"e":202.709},{"text":"answer.","s":202.909,"e":203.349}]},{"template":"exercise","chapter":"Try it","narration":"Try a fresh-context review on your last change. Open a new session and paste this. You'll get a prioritized list of risks before anyone else spends time on your pull request.","params":{"title":"Try it with your agent","intro":"In a NEW session, on your branch:","prompt":"Review the diff of this branch against main with fresh eyes.\nList, prioritized P0/P1/P2: what could break elsewhere (blast radius),\nchanges to load-bearing code, missing or weak tests, and anything\nyou'd push back on. Quote the exact lines you're worried about."},"start":208.516,"dur":11.321,"words":[{"text":"Try","s":208.816,"e":209.056},{"text":"a","s":209.136,"e":209.216},{"text":"fresh-context","s":209.296,"e":210.096},{"text":"review","s":210.296,"e":210.496},{"text":"on","s":210.536,"e":210.576},{"text":"your","s":210.656,"e":210.736},{"text":"last","s":210.896,"e":211.056},{"text":"change.","s":211.296,"e":211.776},{"text":"Open","s":212.016,"e":212.256},{"text":"a","s":212.296,"e":212.336},{"text":"new","s":212.416,"e":212.496},{"text":"session","s":212.656,"e":213.056},{"text":"and","s":213.136,"e":213.296},{"text":"paste","s":213.456,"e":213.616},{"text":"this.","s":213.776,"e":214.416},{"text":"You'll","s":214.456,"e":214.576},{"text":"get","s":214.616,"e":214.656},{"text":"a","s":214.736,"e":214.816},{"text":"prioritized","s":214.976,"e":215.536},{"text":"list","s":215.616,"e":215.776},{"text":"of","s":215.856,"e":215.936},{"text":"risks","s":216.016,"e":216.416},{"text":"before","s":216.616,"e":216.816},{"text":"anyone","s":216.936,"e":217.136},{"text":"else","s":217.216,"e":217.376},{"text":"spends","s":217.456,"e":217.696},{"text":"time","s":217.776,"e":218.016},{"text":"on","s":218.056,"e":218.096},{"text":"your","s":218.176,"e":218.256},{"text":"pull","s":218.336,"e":218.416},{"text":"request.","s":218.656,"e":219.216}]},{"template":"recap","chapter":"Recap","narration":"Recap. Review is a gradient: go deepest where the blast radius is biggest. Know what's load-bearing. Review your own work first and attach evidence. Use a fresh-context reviewer, and turn repeated comments into rules. Next: what to do when an agent goes off the rails.","params":{"items":["Depth follows *blast radius*","Know what's load-bearing","Review your own first, with evidence","Fresh-context reviewer; repeated comments → rules"],"next":"When the agent goes off the rails","next_at":"Next"},"start":219.837,"dur":21.857,"words":[{"text":"Recap.","s":220.137,"e":220.137},{"text":"Review","s":220.297,"e":221.417},{"text":"is","s":221.497,"e":221.657},{"text":"a","s":221.737,"e":221.817},{"text":"gradient:","s":221.857,"e":222.357},{"text":"go","s":222.417,"e":222.537},{"text":"deepest","s":223.017,"e":223.417},{"text":"where","s":223.497,"e":223.833},{"text":"the","s":223.849,"e":223.897},{"text":"blast","s":223.977,"e":224.121},{"text":"radius","s":224.185,"e":224.59},{"text":"is","s":224.657,"e":224.79},{"text":"biggest.","s":224.857,"e":225.937},{"text":"Know","s":226.217,"e":226.457},{"text":"what's","s":226.537,"e":226.777},{"text":"load-bearing.","s":226.857,"e":227.577},{"text":"Review","s":228.057,"e":228.377},{"text":"your","s":228.457,"e":228.617},{"text":"own","s":228.697,"e":228.857},{"text":"work","s":228.977,"e":229.097},{"text":"first","s":229.177,"e":229.577},{"text":"and","s":229.657,"e":229.737},{"text":"attach","s":229.817,"e":230.217},{"text":"evidence.","s":230.297,"e":230.857},{"text":"Use","s":231.337,"e":231.497},{"text":"a","s":231.577,"e":231.657},{"text":"fresh-context","s":231.737,"e":232.537},{"text":"reviewer,","s":232.617,"e":233.417},{"text":"and","s":233.497,"e":233.577},{"text":"turn","s":233.657,"e":233.817},{"text":"repeated","s":233.897,"e":234.297},{"text":"comments","s":234.377,"e":234.857},{"text":"into","s":235.017,"e":235.257},{"text":"rules.","s":235.337,"e":235.817},{"text":"Next:","s":236.857,"e":237.417},{"text":"what","s":237.497,"e":237.577},{"text":"to","s":237.657,"e":237.737},{"text":"do","s":237.897,"e":237.977},{"text":"when","s":238.057,"e":238.137},{"text":"an","s":238.217,"e":238.297},{"text":"agent","s":238.617,"e":238.697},{"text":"goes","s":238.777,"e":239.017},{"text":"off","s":239.177,"e":239.257},{"text":"the","s":239.297,"e":239.337},{"text":"rails.","s":239.817,"e":240.137}]}],"total":242.094,"audio":"/audio/09-code-review.mp3"}