Full Walkthrough: Workflow for AI Coding โ€” Matt Pocock

2026-09-23 ยท AI Engineer ยท conference-talk ยท 01:36:29 ยท watch on YouTube โ†—

aiagentic-engineeringai-coding-workflowclaude-codecontext-managementtddsoftware-architectureplanningworkshop

Verdict: the most complete end-to-end AI coding workflow in the archive โ€” grill-me alignment, Kanban DAG issues, Ralph loops, deep modules; thesis: old software fundamentals are the AI leverage

TL;DR

  • Matt Pocock's 96-minute AI Engineer workshop (1.6M views): a complete idea-to-production workflow for AI coding, built on the thesis that 20-year-old software engineering fundamentals โ€” not new AI paradigms โ€” are what make agents work (Pragmatic Programmer, Fowler, Brooks, Ousterhout cited throughout; closing advice: "head to Amazon and just buy a ton of those old books").
  • Two LLM constraints drive everything: the smart zone / dumb zone (Dex Horthy's idea โ€” attention degrades quadratically; ~100k tokens is the practical smart-zone ceiling regardless of a 200k or 1M window; the 1M window "shipped you more dumb zone") and Memento-style amnesia (prefer clearing to compacting โ€” a fresh context is a deterministic, optimizable state).
  • The pipeline: idea โ†’ /grill-me skill (AI relentlessly interviews you, one question at a time with recommendations โ€” 22-100 questions โ€” until you share a "design concept," Brooks' term) โ†’ /write-a-prd (destination document; he deliberately doesn't read it โ€” the grilling already aligned them, and reading only tests summarization) โ†’ /prd-to-issues (Kanban board of independently-grabbable issues with blocking relationships โ€” a DAG, not a sequential plan, so multiple agents can parallelize) โ†’ Ralph-loop implementation (bash script cats all issues + last 5 commits into a fresh Claude run, Docker-sandboxed, TDD-enforced) โ†’ human QA ("QA is how I impose my taste... without that you just end up with slop") โ†’ team review.
  • Human-in-the-loop vs AFK is the load-bearing task taxonomy: planning/alignment must be human (day shift); implementation is AFK (night shift). Issues are typed accordingly. Vertical slices (tracer bullets) beat AI's natural horizontal layer-by-layer habit because each slice ships a testable end-to-end flow โ€” feedback arrives in phase 1, not phase 3.
  • Codebase design as agent leverage: feedback-loop quality is "the ceiling" on AI output; Ousterhout's deep modules (small interface, big functionality, one test boundary) beat shallow module sprawl, which AI produces unattended. His mental trick: design the interfaces, delegate the implementations โ€” modules become gray boxes, restoring your sense of the codebase. One-command takeaway: run his improve-codebase-architecture skill on your repo.
  • His parallel stack, Sandcastle: TypeScript library โ€” planner picks non-blocking issues from the backlog โ†’ per-issue Docker-sandboxed worktree implementers (Sonnet) โ†’ reviewer (Opus, coding standards pushed; implementer only pulls them) โ†’ merger agent resolves conflicts. Also: anti-doc-rot (delete/close PRDs after implementation so stale docs don't mislead future agents), and specs-to-code dismissed as "vibe coding by another name" โ€” the code is your battleground.

Key moments

  • [00:51] The thesis โ€” AI isn't a new paradigm that invalidates fundamentals; "software engineering fundamentals... also work super well with AI." Keynote-companion workshop, live audience + exercises repo (frame_0025 shows the AI Hero workshop page).
  • [03:00] Smart zone / dumb zone โ€” Dex Horthy's concept: attention relationships scale quadratically ("adding a team to a football league"); ~100k tokens is the marker whether your window is 200k or 1M; task-sizing must fit the smart zone (frame_0005, frame_0077 canvas diagrams).
  • [05:41] Multi-phase plans โ†’ phase N โ†’ Ralph โ€” any dev sees a multi-phase plan is a loop; Ralph Wiggum practice = specify the destination (PRD) and repeatedly ask for "a small change" toward it; he prefers more structure (frame_0013).
  • [07:26] Memento constraint โ€” every session: system prompt (keep tiny โ€” some people stuff 250k in and start in the dumb zone) โ†’ explore โ†’ implement โ†’ test; clear beats compact because the post-clear state is always identical and thus optimizable; token status line in Claude Code is "essential information on every coding session" [09:40].
  • [12:17] /grill-me โ€” his opener for virtually all work: "Interview me relentlessly... until we reach a shared understanding," one question at a time with recommendations (frame_0033 shows a live points-economy question with a table). Explore subagent burned 93.7k Opus tokens without polluting the parent context. Sessions run 22-100 questions; also works on meeting transcripts from domain experts. Target = Brooks' design concept โ€” shared understanding, not a plan document [16:58].
  • [12:39] Specs-to-code rejected โ€” "vibe coding by another name... I really tried it. And it sucks. Because you need to keep a handle on the code. The code is your battleground."
  • [26:39] The task taxonomy โ€” human-in-the-loop tasks (planning, alignment โ€” "has to be") vs AFK tasks (implementation); pair/mob programming with AI recommended for crucial decisions; you can't Ralph-loop a grilling session.
  • [30:28] /write-a-prd โ€” destination document: problem, solution, user stories, implementation + testing decisions, out-of-scope section (which preserves negative decisions [58:25]); proposes modules to modify up front. He doesn't read the output: "I have reached the same wavelength as the LLM... all I'm doing is checking the LLM's ability to summarize" [35:16].
  • [39:32] Kanban over sequential plans โ€” /prd-to-issues produces independently-grabbable issues with blocking relationships (a DAG); sequential plans can only feed one agent, a board feeds many. His real setup: GitHub issues โ€” 744 closed on his course-video-manager repo.
  • [42:00] Tracer bullets / vertical slices โ€” AI "loves to code horizontally" (all schema, then all API, then front end), which defers integration feedback to phase 3; vertical slices give end-to-end feedback in phase 1 (frame_0080: "Use Tracer Bullets โ€” integrate early, seek feedback often"). Live catch: the AI's first slice was horizontal ("gamification service on its own"); one nudge fixed it [45:54].
  • [53:55] Ralph loop mechanics โ€” once.sh: cat all issue markdown files + last 5 commits into env vars, run Claude with accept-edits inside a Docker sandbox; prompt = work AFK issues only, pick next by priority (bugs โ†’ infra โ†’ tracer bullets โ†’ polish), TDD, run feedback loops, output "no more tasks" when done. Run it once repeatedly first to tune the prompt before going full AFK [55:46].
  • [59:18] More code review, no way out โ€” delegated implementation concentrates human work in QA/review; small-PRs dogma clashes with multi-issue loops; "I don't honestly know what the answer is yet... we just need to be ready to be doing more code review."
  • [65:11] Fresh-context reviewer โ€” self-review happens in the dumb zone ("the reviewer will be dumber than the thing that implemented it"); clear first so review runs in the smart zone. TDD (red-green-refactor skill) is "absolutely essential" โ€” instrumenting code before writing it makes cheating on tests harder [66:43].
  • [70:02] Feedback loops are the ceiling โ€” "if your code base doesn't have feedback loops, you're never going to get decent output out of AI... the quality of your feedback loops influences how good your AI can code."
  • [72:52] QA = taste โ€” "QA is how I impose my opinions back onto the code base, how I impose my taste. [Teams automating everything] end up with apps that just lack taste... You need a human touch... without that, you just end up with slop." QA's output feeds new issues back onto the Kanban board [94:50].
  • [74:21] Deep modules (Ousterhout) โ€” shallow-module sprawl is hard for AI to navigate and hard to test-bound; deep modules (small interface, lots of functionality, one big test boundary) fix both; unwatched AI produces shallow sprawl. Gray-box trick: design interfaces, delegate implementations [80:21]. His browser video editor became one giant outside-testable module โ€” "night and day" for AI effectiveness [82:04]. Take-one-thing-away: run the improve-codebase-architecture skill [83:04].
  • [84:04] Doc rot โ€” kept PRDs mislead future agents once code drifts; he deletes them (or closes the GitHub issue: fetchable but visually done).
  • [88:02] Push vs pull โ€” implementer pulls coding standards (skills with description headers); automated reviewer gets them pushed; Sonnet implements, Opus reviews ("I need the smarts then") [92:33].
  • [89:56] Sandcastle โ€” his TypeScript library for AFK loops: planner selects parallelizable issues โ†’ per-issue Docker sandbox + git worktree โ†’ implementer โ†’ reviewer โ†’ merger agent that fixes type/test conflicts on merge [90:51].
  • [95:29] Closing โ€” "I'm not trying to sell you an approach... buy a ton of those old books. On every single page there was something useful."

Hook microscope (0-10s)

  • Frames: 20 at 2 fps
  • Word-level transcript (3 words):
  [  8.54s] Thanks
  [  9.94s] for
  [  9.94s] watching

No hook in the YouTube sense โ€” this is an unedited conference-workshop recording that opens with black frames and house logistics ("We're at capacity. Let's kick off"). The functional hook is the thesis at [00:51] โ€” AI is assumed to be a new paradigm, but software-engineering fundamentals are what actually work with AI โ€” followed immediately by audience calibration via raised hands ("ever coded with AI... every day... ever been frustrated"). The engagement mechanics are workshop-native: a live exercises repo, a Slido Q&A voted on by the room ("Q&As aren't very democratic"), and hands-up polls threaded through the whole talk.

Editorial profile

  • Shots: 80
  • Cuts/min: 0.83
  • Mean shot length: 72.37s
  • Median shot length: 21.45s
  • Talking-head ratio: n/a (opencv not installed)

Unedited single-camera conference capture (slide changes, not cuts, drive the 5.4s median): wide stage shots of Pocock pacing before the AI Engineer Europe backdrop alternating with full-screen shares โ€” a hand-drawn TLDraw infinite canvas for theory, live Claude Code terminal for practice, Slido overlays for Q&A โ€” with comfort breaks left in; the messiness (Windows gripes, "you fool" at the AI, a failed migration during QA) is the pedagogy.

Quotable moments

  • [13:30] "This is kind of like vibe coding by another name... I really tried it. And it sucks. Because you need to keep a handle on the code. The code is your battleground."
  • [17:22] "I didn't need a plan, I needed to be on the same wavelength as the AI." โ€” the design-concept insight, via Fred Brooks.
  • [37:56] "They shipped a lot more dumb zone to you essentially." โ€” on the 1M-token context window.
  • [46:17] "We're really trying in this day and age to verbalize best software practices in English. And these 20-year-old books have already done that. It's an absolute gold mine if you want to throw that into prompts."
  • [70:18] "The quality of your feedback loops influences how good your AI can code. That is the ceiling."
  • [73:26] "You need a human touch when you're building this stuff because without that, you just end up with slop."
  • [80:21] "Design the interface for these modules, but then delegate the implementation." โ€” the gray-box trick for keeping a mental model of the codebase.

Entities mentioned

  • People: matt-pocock, Dex Horthy (Human Layer), Fred Brooks, John Ousterhout, Martin Fowler, Sarah Chen (fictional client)
  • Companies: AI Engineer (conference), Human Layer, Anthropic, GitHub
  • Tools / products: Claude Code, /grill-me, /write-a-prd, /prd-to-issues, Ralph loop (once.sh/afk.sh), Sandcastle, TLDraw, Slido, Docker, Vitest, AI Hero, Spec Kit / OpenSpec / Taskmaster (mentioned), BEADS (mentioned)
  • Places: AI Engineer Europe (conference; overheated room, Gielgud overflow room)

Concepts surfaced

  • smart-zone-dumb-zone: attention degrades quadratically with tokens; ~100k is the practical ceiling regardless of window size โ€” size tasks to fit; the 1M window mostly added dumb zone (good for retrieval, not coding).
  • grilling-session: invert planning โ€” the AI interviews you relentlessly (with recommendations) until a shared design concept (Brooks) exists; the alignment is the asset, so the resulting PRD doesn't need reading.
  • tracer-bullet-slices: vertical end-to-end slices beat AI's natural horizontal layering because feedback arrives in phase 1; the Pragmatic Programmer idea, operationalized as an issue-slicing rule.
  • deep-modules: Ousterhout โ€” small interface, big functionality, one test boundary; unwatched AI produces the shallow opposite; design interfaces yourself, delegate implementations (gray boxes).
  • human-in-loop-vs-afk: the task taxonomy shaping the whole pipeline โ€” alignment is day-shift human work, implementation is night-shift AFK; QA is where taste gets imposed, and fully automating it yields slop-content.
  • feedback-loop-ceiling: test/typecheck loop quality bounds AI output quality โ€” improve the loops before blaming the model.
  • doc-rot: implementation-era documents (PRDs, plans) become actively misleading to future agents as code drifts โ€” delete or visibly close them.
  • push-vs-pull-context: implementers pull standards on demand (skills); reviewers get them pushed; cheaper model implements, smarter model reviews โ€” in a fresh context, or the reviewer is dumber than the implementer it checks.

Transcript

Source: captions.

[00:17] >> Yeah, we're good. Okay, folks.
[00:19] Okay, folks. We're at capacity.
[00:20] We're at capacity. Let's kick off. I don't want you waiting
[00:22] Let's kick off. I don't want you waiting here for 25 more minutes before we some
[00:25] here for 25 more minutes before we some arbitrary deadline.
[00:26] arbitrary deadline. So,
[00:27] So, welcome.
[00:29] welcome. My name's Matt,
[00:30] My name's Matt, I'm a teacher, and I suppose now I teach
[00:33] I'm a teacher, and I suppose now I teach AI.
[00:34] AI. Um
[00:35] Um We have a link up here, if you've not
[00:37] We have a link up here, if you've not already been to this, which is has the
[00:39] already been to this, which is has the exercises for the um stuff we're going
[00:41] exercises for the um stuff we're going to do today.
[00:42] to do today. This is going to be around 2 hours, so
[00:44] This is going to be around 2 hours, so we might just sort of kick off 2 hours
[00:46] we might just sort of kick off 2 hours from now. Is that all right, Mike?
[00:48] from now. Is that all right, Mike? Yeah, perfect.
[00:49] Yeah, perfect. Um and
[00:51] Um and the theory behind this talk, or at least
[00:53] the theory behind this talk, or at least the thesis under which I've been
[00:54] the thesis under which I've been operating for the last kind of 6 months
[00:56] operating for the last kind of 6 months or so, is that
[00:59] or so, is that we all think that AI is a new paradigm,
[01:01] we all think that AI is a new paradigm, right? AI is obviously changing a lot of
[01:03] right? AI is obviously changing a lot of things. You guys are obviously
[01:04] things. You guys are obviously interested in this, and that's why
[01:06] interested in this, and that's why you've come to this talk.
[01:07] you've come to this talk. And
[01:09] And I feel that
[01:12] I feel that when we talk about AI being a new
[01:14] when we talk about AI being a new paradigm, we forget that actually
[01:17] paradigm, we forget that actually software engineering fundamentals, the
[01:19] software engineering fundamentals, the stuff that's really crucial to working
[01:22] stuff that's really crucial to working with humans, also works super well with
[01:25] with humans, also works super well with AI.
[01:26] AI. And this is what my keynote is on
[01:27] And this is what my keynote is on tomorrow, really. I'm going to sort of
[01:28] tomorrow, really. I'm going to sort of be fleshing that out a lot more.
[01:30] be fleshing that out a lot more. And in this workshop, I'm hopefully
[01:32] And in this workshop, I'm hopefully going to be able to direct your
[01:33] going to be able to direct your attention to those things, and
[01:36] attention to those things, and uh hopefully show you
[01:38] uh hopefully show you that I'm right. But we'll see.
[01:41] that I'm right. But we'll see. Um can I get a quick heads-up first? How
[01:43] Um can I get a quick heads-up first? How many of you guys um are coding have ever
[01:47] many of you guys um are coding have ever coded with AI? Raise your hand if you've
[01:48] coded with AI? Raise your hand if you've ever coded with AI. Perfect. Okay. Uh
[01:51] ever coded with AI. Perfect. Okay. Uh keep your hand raised.
[01:54] keep your hand raised. Uh
[01:55] Uh let's all uh share those armpits with
[01:56] let's all uh share those armpits with the world. Um
[01:58] the world. Um how many of you code every day with AI?
[02:02] how many of you code every day with AI? Cool. Okay. Uh right, keep your hand
[02:04] Cool. Okay. Uh right, keep your hand raised if you've ever been frustrated
[02:06] raised if you've ever been frustrated with AI.
[02:08] with AI. Okay, very good.
[02:10] Okay, very good. You can put your hands down.
[02:11] You can put your hands down. Thank you for that show of obedience. I
[02:13] Thank you for that show of obedience. I really appreciate that. And we are also
[02:14] really appreciate that. And we are also being live-streamed to the Gilgood room
[02:16] being live-streamed to the Gilgood room as well. I've not
[02:18] as well. I've not uh
[02:19] uh Did we send someone up to the Gilgood
[02:20] Did we send someone up to the Gilgood room to just check they're okay?
[02:22] room to just check they're okay? Don't know.
[02:23] Don't know. But I see you,
[02:24] But I see you, and there is a way that you can
[02:25] and there is a way that you can participate, which is we have the um a
[02:28] participate, which is we have the um a Q&A. We're going to be doing kind of
[02:30] Q&A. We're going to be doing kind of have a sort of hatred of Q&As cuz
[02:32] have a sort of hatred of Q&As cuz they're not very democratic. They're
[02:33] they're not very democratic. They're mostly the sort of
[02:35] mostly the sort of um most talkative people get to um
[02:38] um most talkative people get to um get to participate and share. And so,
[02:40] get to participate and share. And so, we're going to be going through this um
[02:42] we're going to be going through this um Q&A here. So, why do we have to wait
[02:44] Q&A here. So, why do we have to wait till 3:45? The room is packed, the doors
[02:45] till 3:45? The room is packed, the doors are closed. 100% agree.
[02:47] are closed. 100% agree. And so, if you want to uh ask a
[02:49] And so, if you want to uh ask a question, we're going to be I would like
[02:51] question, we're going to be I would like you to pile into this async, and then we
[02:53] you to pile into this async, and then we can vote on each other's questions, and
[02:55] can vote on each other's questions, and hopefully get the best questions
[02:56] hopefully get the best questions surfaced so the for the entire room to
[02:58] surfaced so the for the entire room to enjoy.
[03:00] enjoy. So, I want to talk about first the kind
[03:02] So, I want to talk about first the kind of weird constraints that LLMs have.
[03:06] of weird constraints that LLMs have. And
[03:07] And those weird constraints are sort of what
[03:09] those weird constraints are sort of what we have to base a lot of our work
[03:11] we have to base a lot of our work around.
[03:12] around. Now,
[03:14] Now, there's a guy called Dex Hardy who runs
[03:16] there's a guy called Dex Hardy who runs a company called Human Layer, and he
[03:18] a company called Human Layer, and he came up with this idea, which is that
[03:22] came up with this idea, which is that when you're working with LLMs, they have
[03:24] when you're working with LLMs, they have a smart zone
[03:26] a smart zone and a dumb zone.
[03:28] and a dumb zone. When you're first kind of like
[03:30] When you're first kind of like working with an LLM, and it's like
[03:32] working with an LLM, and it's like you've just started a new conversation,
[03:33] you've just started a new conversation, you start from nothing, that's when the
[03:35] you start from nothing, that's when the LLM is going to do its best work.
[03:37] LLM is going to do its best work. Because in that situation, the attention
[03:39] Because in that situation, the attention relationships are the least strained.
[03:41] relationships are the least strained. Every time you add a token to an LLM,
[03:43] Every time you add a token to an LLM, it's kind of like you're adding a team
[03:45] it's kind of like you're adding a team to a football league. You think of the
[03:47] to a football league. You think of the number of matches that get added every
[03:50] number of matches that get added every time you add a team to a football
[03:51] time you add a team to a football league, it just goes
[03:52] league, it just goes it scales quadratically. And that's
[03:54] it scales quadratically. And that's because you have attention relationships
[03:56] because you have attention relationships going from essentially each token to the
[03:58] going from essentially each token to the other that are positional and the sort
[04:00] other that are positional and the sort of meaning of the individual token.
[04:03] of meaning of the individual token. And so, this means that by around sort
[04:05] And so, this means that by around sort of 40% or around I would say around 100K
[04:08] of 40% or around I would say around 100K is kind of my new marker for this. Cuz
[04:10] is kind of my new marker for this. Cuz it doesn't matter whether you're using 1
[04:11] it doesn't matter whether you're using 1 million
[04:12] million uh context window or 200K,
[04:15] uh context window or 200K, it's always going to be about this.
[04:18] it's always going to be about this. It starts to just get dumber.
[04:21] It starts to just get dumber. So, as you continually keep adding stuff
[04:23] So, as you continually keep adding stuff to the same context window, it just gets
[04:25] to the same context window, it just gets dumber and dumber until it's making kind
[04:26] dumber and dumber until it's making kind of stupid decisions. Raise your hand if
[04:28] of stupid decisions. Raise your hand if that feels familiar to you.
[04:30] that feels familiar to you. Yeah, cool.
[04:32] Yeah, cool. So, this means that we kind of want to
[04:34] So, this means that we kind of want to size our tasks in a way that sticks
[04:37] size our tasks in a way that sticks within the smart zone.
[04:39] within the smart zone. Right? We don't want the AI to bite off
[04:41] Right? We don't want the AI to bite off more than it can chew. This goes back to
[04:43] more than it can chew. This goes back to old advice like Martin Fowler in
[04:45] old advice like Martin Fowler in refactoring. Uh like uh the pragmatic
[04:48] refactoring. Uh like uh the pragmatic programmer talks about this. Don't bite
[04:50] programmer talks about this. Don't bite off more than you can chew. Keep your
[04:52] off more than you can chew. Keep your tasks small so that you as a developer,
[04:54] tasks small so that you as a developer, a human developer, don't freak out and
[04:56] a human developer, don't freak out and don't start acting and going into the
[04:58] don't start acting and going into the dumb zone.
[05:02] But how do you tackle big tasks? How do you
[05:05] how do you tackle big tasks? How do you take a large task like I don't know,
[05:07] take a large task like I don't know, cloning a company or something, or just
[05:09] cloning a company or something, or just doing something crazy,
[05:11] doing something crazy, and how do you break it into small tasks
[05:13] and how do you break it into small tasks so they all fit into the dumb zone?
[05:16] so they all fit into the dumb zone? One way, of course, you could do is I
[05:18] One way, of course, you could do is I mean, kind of what the AI companies
[05:19] mean, kind of what the AI companies maybe want you to do, or the natural way
[05:21] maybe want you to do, or the natural way of doing it is just keep going and going
[05:23] of doing it is just keep going and going and going, you end up in the dumb zone,
[05:24] and going, you end up in the dumb zone, charging you tons of tokens per request.
[05:26] charging you tons of tokens per request. You then compact back down.
[05:29] You then compact back down. We'll talk about compacting properly in
[05:30] We'll talk about compacting properly in a minute. And you keep going, keep
[05:32] a minute. And you keep going, keep going, keep going, compact back down,
[05:33] going, keep going, compact back down, keep going, keep going, keep going.
[05:35] keep going, keep going, keep going. And I think that's doesn't really work
[05:37] And I think that's doesn't really work very well because the more sediment I
[05:39] very well because the more sediment I we'll talk about that in a minute.
[05:41] we'll talk about that in a minute. So, the theory here is then, and this is
[05:44] So, the theory here is then, and this is what I was doing for a while,
[05:45] what I was doing for a while, is I would use these kind of
[05:48] is I would use these kind of um multi-phase plans.
[05:50] um multi-phase plans. Where I would say, "Okay, we have this
[05:52] Where I would say, "Okay, we have this sort of number four thing here, this
[05:54] sort of number four thing here, this large large task. Let's break it down
[05:56] large large task. Let's break it down into small sections so that we can then
[05:58] into small sections so that we can then kind of chunk it up and do each little
[06:00] kind of chunk it up and do each little bit of work in the smart zone." Raise
[06:02] bit of work in the smart zone." Raise your hand if you've ever used a
[06:03] your hand if you've ever used a multi-phase plan before.
[06:06] multi-phase plan before. Yeah, really common practice, right?
[06:08] Yeah, really common practice, right? This is kind of how we've been doing it.
[06:10] This is kind of how we've been doing it. Certainly, this is how I was doing it up
[06:11] Certainly, this is how I was doing it up until December last year, really.
[06:14] until December last year, really. And any developer worth their salt will
[06:16] And any developer worth their salt will look at this and go, "This is a loop."
[06:20] look at this and go, "This is a loop." Right? This is a loop. We've just got
[06:22] Right? This is a loop. We've just got phase one, phase two, phase three, phase
[06:23] phase one, phase two, phase three, phase four. Why don't we just have phase N?
[06:28] four. Why don't we just have phase N? Right?
[06:29] Right? Phase N. Where we essentially just say,
[06:31] Phase N. Where we essentially just say, "Okay,
[06:33] "Okay, we have, let's say, a plan operating in
[06:34] we have, let's say, a plan operating in the background, and then we just loop
[06:35] the background, and then we just loop over the top of it, and we go through
[06:37] over the top of it, and we go through until it's complete."
[06:39] until it's complete." And this is where um
[06:40] And this is where um Raise your hand if you've heard of Ralph
[06:42] Raise your hand if you've heard of Ralph Wiggum as a software practice.
[06:44] Wiggum as a software practice. Okay, cool. Raise your hand if you've
[06:45] Okay, cool. Raise your hand if you've not heard of Ralph Wiggum as a software
[06:47] not heard of Ralph Wiggum as a software practice, actually. That's more like it.
[06:48] practice, actually. That's more like it. Okay. So, there's this idea called Ralph
[06:50] Okay. So, there's this idea called Ralph Wiggum, uh which is kind of um
[06:53] Wiggum, uh which is kind of um sort of based on this,
[06:54] sort of based on this, which is essentially
[06:57] which is essentially all you need to do is sort of specify
[06:58] all you need to do is sort of specify the end of the journey,
[07:00] the end of the journey, where you just say, "Okay, we create a
[07:02] where you just say, "Okay, we create a PRD, a product requirements document, to
[07:04] PRD, a product requirements document, to say, 'Whoa, okay, let's describe where
[07:06] say, 'Whoa, okay, let's describe where we're going.'" And then we just say to
[07:08] we're going.'" And then we just say to the AI, "Just make a small change. Make
[07:10] the AI, "Just make a small change. Make a small change that gets us closer and
[07:12] a small change that gets us closer and closer to that."
[07:13] closer to that." And
[07:14] And Ralph works okay, but I prefer a little
[07:16] Ralph works okay, but I prefer a little bit more structure.
[07:17] bit more structure. So, that's kind of where we got to in
[07:20] So, that's kind of where we got to in terms of thinking about the smart zone,
[07:22] terms of thinking about the smart zone, and that's
[07:23] and that's kind of where I want you to first start
[07:25] kind of where I want you to first start thinking about here.
[07:27] thinking about here. Another weird constraint of LLMs is LLMs
[07:30] Another weird constraint of LLMs is LLMs are kind of like the guy from Memento,
[07:31] are kind of like the guy from Memento, right? They just continually forget.
[07:33] right? They just continually forget. They could just keep resetting back to
[07:35] They could just keep resetting back to the base state.
[07:36] the base state. Let me pull up this diagram.
[07:39] Let me pull up this diagram. I sort of I
[07:40] I sort of I I I really should use slides, but I just
[07:42] I I really should use slides, but I just prefer just like randomly scrolling
[07:43] prefer just like randomly scrolling around a
[07:45] around a uh infinite uh TL draw canvas. Thank
[07:47] uh infinite uh TL draw canvas. Thank you, Steve.
[07:48] you, Steve. Um
[07:50] Um So, let's say another concept I want you
[07:52] So, let's say another concept I want you to have is that every session with an
[07:54] to have is that every session with an LLM kind of goes through the same
[07:55] LLM kind of goes through the same stages.
[07:56] stages. You have, first of all, the system
[07:58] You have, first of all, the system prompt here. This gray box here is
[08:00] prompt here. This gray box here is essentially the stuff that's always in
[08:03] essentially the stuff that's always in your context. You want this to be as
[08:05] your context. You want this to be as small as possible. Cuz if you have a ton
[08:07] small as possible. Cuz if you have a ton of stuff in here, if you have 250K
[08:10] of stuff in here, if you have 250K tokens, like I have seen people put in
[08:12] tokens, like I have seen people put in there, then that you're just going to go
[08:14] there, then that you're just going to go straight into the dumb zone without even
[08:15] straight into the dumb zone without even being able to do anything.
[08:17] being able to do anything. So, you want this to be tiny.
[08:19] So, you want this to be tiny. >> [snorts]
[08:19] >> [snorts] >> You then go into a kind of exploratory
[08:21] >> You then go into a kind of exploratory phase. This blue sort of where the
[08:23] phase. This blue sort of where the coding agent is going out and exploring
[08:25] coding agent is going out and exploring the code base.
[08:27] the code base. Then you go into implementation.
[08:29] Then you go into implementation. And then you go into testing.
[08:31] And then you go into testing. And sort of making sure that it works,
[08:32] And sort of making sure that it works, running your feedback loops and things
[08:33] running your feedback loops and things like this.
[08:34] like this. Raise your hand if that feels familiar
[08:36] Raise your hand if that feels familiar based on what you've done. Yeah. Sort of
[08:38] based on what you've done. Yeah. Sort of the like the the main cornerstones of
[08:41] the like the the main cornerstones of any session.
[08:42] any session. And when you clear the context, you go
[08:45] And when you clear the context, you go right back to the system prompt.
[08:47] right back to the system prompt. Oof, you go right back there. So, you
[08:49] Oof, you go right back there. So, you delete everything that's come before.
[08:52] delete everything that's come before. And
[08:53] And raise your hand if you've heard of
[08:54] raise your hand if you've heard of compacting, as well.
[08:56] compacting, as well. Yeah, okay. There are some people who've
[08:57] Yeah, okay. There are some people who've not heard of compacting. So, let's just
[08:59] not heard of compacting. So, let's just quickly show what that means.
[09:01] quickly show what that means. For instance,
[09:02] For instance, I've just been having a little chat with
[09:03] I've just been having a little chat with my LLM.
[09:08] Uh I want to make sure we sort of, you
[09:09] I want to make sure we sort of, you know, just cover the basics so we're all
[09:10] know, just cover the basics so we're all sort of on the same wavelength here.
[09:12] sort of on the same wavelength here. I've just been having a chat with my
[09:13] I've just been having a chat with my LLM.
[09:14] LLM. I've been talking about a thing that I
[09:16] I've been talking about a thing that I want to build. How's the font size?
[09:17] want to build. How's the font size? Should I bump it up?
[09:19] Should I bump it up? Folks in the back?
[09:20] Folks in the back? Bump. Bump.
[09:22] Bump. Bump. Bump. Bump. Bump. Oh.
[09:24] Bump. Bump. Bump. Oh. I'm using Claude Code for this session,
[09:25] I'm using Claude Code for this session, but you don't need to use Claude Code.
[09:28] but you don't need to use Claude Code. Uh
[09:28] Uh in fact, it's often nice not to use
[09:30] in fact, it's often nice not to use Claude Code.
[09:31] Claude Code. Um
[09:32] Um so, I've been having a chat with the
[09:33] so, I've been having a chat with the LLM, just sort of planning out what I'm
[09:35] LLM, just sort of planning out what I'm going to do next. It's asking me a bunch
[09:36] going to do next. It's asking me a bunch of questions, and I can
[09:38] of questions, and I can I highly recommend you do this.
[09:41] I highly recommend you do this. There's this tiny little status line
[09:43] There's this tiny little status line here that tells me how many tokens I'm
[09:44] here that tells me how many tokens I'm using, the exact number of tokens I'm
[09:46] using, the exact number of tokens I'm using. Um I have a article on my website
[09:50] using. Um I have a article on my website AI Hero if you want to copy this. This
[09:52] AI Hero if you want to copy this. This is
[09:53] is Oh, wow, that is that shakes, doesn't
[09:55] Oh, wow, that is that shakes, doesn't it? Um
[09:56] it? Um this is essential information on every
[09:59] this is essential information on every coding session cuz you need to know
[10:01] coding session cuz you need to know exactly how many tokens you're using so
[10:02] exactly how many tokens you're using so that you know how close you are to the
[10:04] that you know how close you are to the dumb zone.
[10:05] dumb zone. Absolutely essential.
[10:07] Absolutely essential. And so let's watch it.
[10:08] And so let's watch it. So I've got two options. I can either
[10:09] So I've got two options. I can either clear
[10:11] clear wrong and go back to nothing or I can
[10:14] wrong and go back to nothing or I can compact.
[10:16] compact. And when I compact then it's going to
[10:18] And when I compact then it's going to squeeze all of that conversation, which
[10:20] squeeze all of that conversation, which admittedly isn't very much, into a much
[10:22] admittedly isn't very much, into a much smaller space.
[10:24] smaller space. And this in diagram terms kind of looks
[10:26] And this in diagram terms kind of looks like this.
[10:27] like this. Where you take all of the information
[10:29] Where you take all of the information from the session and you essentially
[10:30] from the session and you essentially create a history out of it, a written
[10:32] create a history out of it, a written record of what happened.
[10:38] And devs love compacting for some reason, but I hate it.
[10:40] reason, but I hate it. I much prefer my AI to behave like
[10:44] I much prefer my AI to behave like uh the guy from Memento because this
[10:46] uh the guy from Memento because this state
[10:47] state is always the same. Always the same
[10:49] is always the same. Always the same every time you do it. You clear and you
[10:50] every time you do it. You clear and you go back to the beginning. And so if
[10:52] go back to the beginning. And so if you're able to do that and you're able
[10:53] you're able to do that and you're able to optimize for that then you're in a
[10:55] to optimize for that then you're in a great spot.
[10:57] great spot. So that's kind of the two things I want
[10:58] So that's kind of the two things I want you to think about with LLMs, the two
[11:00] you to think about with LLMs, the two constraints that we're working with.
[11:01] constraints that we're working with. They have a smart zone and a dumb zone
[11:04] They have a smart zone and a dumb zone and they're like the guy from Memento.
[11:07] and they're like the guy from Memento. So let's take a look at the first
[11:08] So let's take a look at the first exercise.
[11:09] exercise. And I'm while I'm doing this, the way I
[11:11] And I'm while I'm doing this, the way I want this to work is I'm going to sort
[11:13] want this to work is I'm going to sort of show you how um I'm going to be sort
[11:15] of show you how um I'm going to be sort of walking through it up here and I want
[11:18] of walking through it up here and I want you folks to be kind of like tapping
[11:19] you folks to be kind of like tapping away and doing things as well. So that
[11:21] away and doing things as well. So that was just a little lecture bit. Let's now
[11:23] was just a little lecture bit. Let's now actually get and do some coding.
[11:26] actually get and do some coding. For anyone who arrived late or anyone in
[11:27] For anyone who arrived late or anyone in the Gilgud room uh go to this link
[11:32] the Gilgud room uh go to this link this link up here
[11:38] to see the exercises and clone the repo. You absolutely do not have to, you can
[11:39] You absolutely do not have to, you can just watch me do it if you fancy it.
[11:41] just watch me do it if you fancy it. But let's go there myself and let's see
[11:42] But let's go there myself and let's see what exercises await us.
[11:45] what exercises await us. So essentially I've built a um this is
[11:48] So essentially I've built a um this is from my course.
[11:50] from my course. This is a uh a course management
[11:53] This is a uh a course management platform essentially, a kind of CMS for
[11:55] platform essentially, a kind of CMS for instructors, for students, and this is
[11:57] instructors, for students, and this is what we're going to be building a
[11:58] what we're going to be building a feature in. So I'm going to take you
[12:00] feature in. So I'm going to take you from essentially the idea for the
[12:02] from essentially the idea for the feature all the way up to building a PRD
[12:05] feature all the way up to building a PRD for the feature, all the way up to
[12:06] for the feature, all the way up to implementing the feature.
[12:08] implementing the feature. And hopefully you can take inspiration
[12:10] And hopefully you can take inspiration from this process and use it in your own
[12:11] from this process and use it in your own work.
[12:13] work. So
[12:15] So uh let's kick off. So
[12:18] uh let's kick off. So we're going to start by using a a skill
[12:20] we're going to start by using a a skill which is very close to my heart.
[12:21] which is very close to my heart. It's the grill me skill.
[12:24] It's the grill me skill. And this grill me skill is wonderfully
[12:27] And this grill me skill is wonderfully small wonderfully tiny and it helps
[12:30] small wonderfully tiny and it helps prevent one of I think the main issues
[12:32] prevent one of I think the main issues when you're working with an AI, which is
[12:34] when you're working with an AI, which is misalignments.
[12:39] The uh the sort of silent idea that I'm talking
[12:42] the sort of silent idea that I'm talking against here, that I'm arguing against,
[12:44] against here, that I'm arguing against, is the specs to code movement. Has
[12:45] is the specs to code movement. Has anyone heard of the specs to code
[12:47] anyone heard of the specs to code movement? Raise your hand. It's not
[12:49] movement? Raise your hand. It's not really a movement I suppose, it's just
[12:50] really a movement I suppose, it's just sort of people saying specs to code.
[12:52] sort of people saying specs to code. Um
[12:53] Um what it is is people say, "Okay, you can
[12:55] what it is is people say, "Okay, you can write a program or you want to build an
[12:57] write a program or you want to build an app the best way to build that app is to
[13:00] app the best way to build that app is to take some specifications
[13:02] take some specifications so to write some sort of like document
[13:05] so to write some sort of like document and then turn that document into code."
[13:09] and then turn that document into code." So they just turn it into code. How do
[13:11] So they just turn it into code. How do you do that? You pass it to AI. If
[13:13] you do that? You pass it to AI. If there's something wrong with the
[13:14] there's something wrong with the resulting code, you don't look at the
[13:15] resulting code, you don't look at the code, you look back at the specs. You
[13:18] code, you look back at the specs. You change the specs and you sort of just
[13:19] change the specs and you sort of just keep going like this. This is kind of
[13:21] keep going like this. This is kind of like vibe coding by another name where
[13:23] like vibe coding by another name where you're essentially ignoring the code.
[13:25] you're essentially ignoring the code. You don't need to worry about the code.
[13:27] You don't need to worry about the code. You just sort of keep editing the specs
[13:29] You just sort of keep editing the specs and eventually you just keep going. And
[13:30] and eventually you just keep going. And I tried this. I really tried it. And it
[13:33] I tried this. I really tried it. And it sucks. It doesn't work.
[13:34] sucks. It doesn't work. Because you need to keep a handle on the
[13:37] Because you need to keep a handle on the code. You need to understand what's in
[13:38] code. You need to understand what's in it. You need to shape it because the
[13:40] it. You need to shape it because the code is your battleground. And so
[13:44] code is your battleground. And so this is again is where we're going.
[13:45] this is again is where we're going. Let's let's get some exercises.
[13:47] Let's let's get some exercises. So
[13:48] So what I'd like you to do is go to this
[13:49] what I'd like you to do is go to this page, the the grill me skill.
[13:52] page, the the grill me skill. And inside the repo here
[13:54] And inside the repo here we have a slack message
[13:57] we have a slack message from our pal. Uh where is it? It's in
[14:00] from our pal. Uh where is it? It's in the root of the repo and it's under
[14:03] the root of the repo and it's under bur bur bur bur
[14:05] bur bur bur bur Oh, where is it?
[14:07] Oh, where is it? Mhm mhm client brief.md.
[14:10] Mhm mhm client brief.md. It's a slack message from Sarah Chen.
[14:11] It's a slack message from Sarah Chen. For some reason the Claude always
[14:12] For some reason the Claude always chooses Sarah Chen as the name. I don't
[14:14] chooses Sarah Chen as the name. I don't know why.
[14:15] know why. Um it's saying that in cadence, our um
[14:18] Um it's saying that in cadence, our um course platform, our retention numbers
[14:21] course platform, our retention numbers are not great. Students sign up to a few
[14:22] are not great. Students sign up to a few lessons then they drop off. I'd love to
[14:24] lessons then they drop off. I'd love to add some gamification to the platform.
[14:27] add some gamification to the platform. And so when you're presented with an
[14:29] And so when you're presented with an idea like this, you need to find some
[14:30] idea like this, you need to find some way of turning it into reality. Let's
[14:32] way of turning it into reality. Let's say Sarah Chen is your client, you're on
[14:34] say Sarah Chen is your client, you're on a tight budget, you need to get this
[14:35] a tight budget, you need to get this done fast. How do you go and do it?
[14:38] done fast. How do you go and do it? Um
[14:39] Um raise your hand if you would um
[14:41] raise your hand if you would um enter plan mode when you're doing this.
[14:43] enter plan mode when you're doing this. Anyone a big user of plan mode? Yep.
[14:46] Anyone a big user of plan mode? Yep. Um let's actually shout out quickly any
[14:48] Um let's actually shout out quickly any other ideas about what you would do with
[14:49] other ideas about what you would do with this or any Raise your hand if you
[14:52] this or any Raise your hand if you what what would be your first port of
[14:53] what what would be your first port of call?
[14:54] call? Yep. Ask for more info.
[14:56] Yep. Ask for more info. Sorry? Ask for more
[14:57] Sorry? Ask for more info to verify what is the purpose and
[14:59] info to verify what is the purpose and where our current standing is. Yes,
[15:01] where our current standing is. Yes, exactly. Let's imagine that Sarah Chen's
[15:02] exactly. Let's imagine that Sarah Chen's gone on holiday, you have no idea,
[15:03] gone on holiday, you have no idea, right? Uh she's just posted this thing,
[15:05] right? Uh she's just posted this thing, you need to action it before you go.
[15:08] you need to action it before you go. Well, my first port of call is I go for
[15:10] Well, my first port of call is I go for this particular skill. I'm going to
[15:12] this particular skill. I'm going to clear my context.
[15:17] I'm going to uh get rid of
[15:19] uh get rid of you, you don't need to be there.
[15:21] you, you don't need to be there. And I'm going to say
[15:22] And I'm going to say um I'm going to invoke a skill
[15:25] um I'm going to invoke a skill which is the grill me skill. Let's
[15:27] which is the grill me skill. Let's quickly check.
[15:29] quickly check. Raise your hands if you don't know what
[15:30] Raise your hands if you don't know what this is.
[15:32] this is. Cool.
[15:33] Cool. Oh, sorry sorry. Let me be more
[15:34] Oh, sorry sorry. Let me be more specific. Raise your hands if you don't
[15:36] specific. Raise your hands if you don't know what I'm doing here when I
[15:39] know what I'm doing here when I uh do a forward slash and then type
[15:41] uh do a forward slash and then type something.
[15:42] something. Anyone Everyone kind of understand what
[15:43] Anyone Everyone kind of understand what that is?
[15:44] that is? I'm invoking a skill. I'm invoking the
[15:46] I'm invoking a skill. I'm invoking the grill me skill.
[15:48] grill me skill. And what I'm going to do is I'm going to
[15:49] And what I'm going to do is I'm going to say grill me and I'm going to pass in
[15:51] say grill me and I'm going to pass in the client brief.
[15:54] the client brief. So now
[15:56] So now the LLM really has only a couple of
[15:58] the LLM really has only a couple of things here. It just has the skill and
[16:00] things here. It just has the skill and it has the description of what I want to
[16:02] it has the description of what I want to do.
[16:06] And this is virtually how I start every piece of work with AI.
[16:09] piece of work with AI. And while it's exploring the code base
[16:12] And while it's exploring the code base I'm just going to show you what the
[16:13] I'm just going to show you what the grill me skill does.
[16:14] grill me skill does. So this is inside the repo so you can
[16:16] So this is inside the repo so you can check it out.
[16:18] check it out. It's extremely short.
[16:19] It's extremely short. "Interview me relentlessly about every
[16:21] "Interview me relentlessly about every aspect of this plan until we reach a
[16:23] aspect of this plan until we reach a shared understanding. Walk down each
[16:24] shared understanding. Walk down each branch of the decision tree resolving
[16:26] branch of the decision tree resolving dependencies one by one. For each
[16:28] dependencies one by one. For each question provide your recommended
[16:30] question provide your recommended answer.
[16:31] answer. Ask the questions one at a time uh blah
[16:33] Ask the questions one at a time uh blah blah blah."
[16:34] blah blah." What this does and what I noticed when I
[16:37] What this does and what I noticed when I was working with AI, especially in plan
[16:39] was working with AI, especially in plan mode actually
[16:40] mode actually is it would
[16:42] is it would really eagerly try to produce a plan for
[16:45] really eagerly try to produce a plan for me.
[16:46] me. It would say, "Okay, I think I've got
[16:47] It would say, "Okay, I think I've got enough. I'm just going to poof plan
[16:48] enough. I'm just going to poof plan plan."
[16:50] plan." And what I found was that
[16:53] And what I found was that I was really trying to find the words
[16:55] I was really trying to find the words for this, for for what I wanted instead
[16:58] for this, for for what I wanted instead of that.
[16:59] of that. And Frederick P. Brooks in The Design of
[17:01] And Frederick P. Brooks in The Design of Design, he has a great quote uh talking
[17:03] Design, he has a great quote uh talking about the design concept.
[17:06] about the design concept. When you're working on something new
[17:07] When you're working on something new with someone
[17:09] with someone when you're uh all trying to build
[17:11] when you're uh all trying to build something together
[17:13] something together then there's this shared idea that's
[17:14] then there's this shared idea that's shared between all participants and that
[17:16] shared between all participants and that is the design concept. And that's what I
[17:19] is the design concept. And that's what I realized I needed with Claude. I needed
[17:22] realized I needed with Claude. I needed I needed to reach a shared
[17:25] I needed to reach a shared understanding. need an asset, I didn't
[17:27] understanding. need an asset, I didn't need a plan, I needed to be on the same
[17:28] need a plan, I needed to be on the same wavelength as the AI, as my agent. And
[17:32] wavelength as the AI, as my agent. And this is an extremely effective way of
[17:33] this is an extremely effective way of doing it. So hopefully
[17:35] doing it. So hopefully Here we go. Nice. It has done its
[17:37] Here we go. Nice. It has done its exploration first of all.
[17:40] exploration first of all. It's invoked a sub agent which spent
[17:43] It's invoked a sub agent which spent 97 93.7k tokens
[17:46] 97 93.7k tokens on Opus.
[17:48] on Opus. Um
[17:49] Um and it's asked me the first question.
[17:51] and it's asked me the first question. Cool.
[17:52] Cool. We can see that even though the sub
[17:53] We can see that even though the sub agent burned a a ton of tokens I haven't
[17:55] agent burned a a ton of tokens I haven't actually um
[17:58] actually um uh increased my token usage that much.
[18:00] uh increased my token usage that much. Raise your hand if you don't know what
[18:02] Raise your hand if you don't know what sub agents are. It's important question.
[18:05] sub agents are. It's important question. Everyone kind of clear what sub agents
[18:06] Everyone kind of clear what sub agents are? Okay, I'll give a brief definition.
[18:08] are? Okay, I'll give a brief definition. Which is that this this sub agents thing
[18:10] Which is that this this sub agents thing here, this explore sub agent it has
[18:12] here, this explore sub agent it has essentially gone and called another LLM
[18:15] essentially gone and called another LLM which has an isolated context window.
[18:18] which has an isolated context window. And then that LLM has reported a summary
[18:20] And then that LLM has reported a summary back. So a sub agent is kind of like a
[18:23] back. So a sub agent is kind of like a delegation. You're delegating a task to
[18:25] delegation. You're delegating a task to a sub agent. It goes eagerly does all
[18:27] a sub agent. It goes eagerly does all the thing, explores a ton of stuff and
[18:29] the thing, explores a ton of stuff and then just drip feeds the important stuff
[18:31] then just drip feeds the important stuff back up to the orchestrator agent.
[18:34] back up to the orchestrator agent. To the parent agent. So okay. So
[18:36] To the parent agent. So okay. So hopefully you guys have seen the same
[18:37] hopefully you guys have seen the same thing. It's done an explore.
[18:39] thing. It's done an explore. And we now have our first question.
[18:42] And we now have our first question. Points economy. What actions earn points
[18:43] Points economy. What actions earn points and how much? Ooh, okay.
[18:46] and how much? Ooh, okay. At this point you can ask it by the way
[18:47] At this point you can ask it by the way questions to um deepen your
[18:49] questions to um deepen your understanding of the repo. I obviously
[18:51] understanding of the repo. I obviously know this repo really well cuz I wrote
[18:52] know this repo really well cuz I wrote it, but you might not um
[18:54] it, but you might not um know what's going on.
[18:56] know what's going on. So let's say my recommendation, keep it
[18:58] So let's say my recommendation, keep it simple, two point sources to start.
[19:00] simple, two point sources to start. What's so nice about this is that not
[19:03] What's so nice about this is that not only does it give us a question that
[19:05] only does it give us a question that kind of aligns us here, we get a
[19:06] kind of aligns us here, we get a recommendation too. And often what I'll
[19:09] recommendation too. And often what I'll find is the AI's recommendations are
[19:10] find is the AI's recommendations are really good.
[19:11] really good. And so I'll just say
[19:13] And so I'll just say skip video watch events, they're noisy
[19:14] skip video watch events, they're noisy and gameable. I agree.
[19:16] and gameable. I agree. Sarah's asked we'll keep the lessons in
[19:18] Sarah's asked we'll keep the lessons in the bread and butter.
[19:20] the bread and butter. Yeah.
[19:22] Yeah. Looks good, pal.
[19:25] Looks good, pal.
[19:25] >> [snorts] >> Now what I usually do is I usually
[19:26] >> Now what I usually do is I usually dictate to the AI. I'm usually actually
[19:29] dictate to the AI. I'm usually actually chatting to the AI instead of uh typing
[19:31] chatting to the AI instead of uh typing here, but uh this is a relatively new
[19:34] here, but uh this is a relatively new laptop and I couldn't get my dictation
[19:35] laptop and I couldn't get my dictation software working on it um because
[19:38] software working on it um because Windows is crap. Um
[19:41] Windows is crap. Um So, should points be retroactive? There
[19:43] So, should points be retroactive? There are existing lesson progress records
[19:45] are existing lesson progress records with completion at timestamps. This is a
[19:47] with completion at timestamps. This is a really nasty question, right? Should we
[19:49] really nasty question, right? Should we actually go back and backfill all of the
[19:52] actually go back and backfill all of the lesson progress events? This is a kind
[19:53] lesson progress events? This is a kind of question that you need to be aligned
[19:56] of question that you need to be aligned on if you're going to fulfill the
[19:57] on if you're going to fulfill the feature properly. This is not something
[19:58] feature properly. This is not something I considered and Sarah Chen certainly
[20:00] I considered and Sarah Chen certainly didn't consider.
[20:02] didn't consider. Do I want it to be retroactive? Hmm.
[20:05] Do I want it to be retroactive? Hmm. Let's actually do a vote inside here.
[20:07] Let's actually do a vote inside here. Should we go back and backfill all the
[20:09] Should we go back and backfill all the records? Raise your hand if you think we
[20:10] records? Raise your hand if you think we should backfill all the records.
[20:15] Raise your hand if you think we shouldn't backfill all the records.
[20:17] shouldn't backfill all the records. There are a lot of fence-sitters in the
[20:19] There are a lot of fence-sitters in the room. I'm going to say
[20:22] room. I'm going to say you know, this is the kind of discussion
[20:23] you know, this is the kind of discussion you're sort of having with the AI.
[20:24] you're sort of having with the AI. You're getting further aligned. Yes, I'm
[20:26] You're getting further aligned. Yes, I'm just going to go with his recommendation
[20:27] just going to go with his recommendation cuz I'm lazy.
[20:33] Notice too how I'm able to keep in the loop here with AI. I'm not you know,
[20:35] loop here with AI. I'm not you know, it's it's pinging me these questions
[20:37] it's it's pinging me these questions pretty quickly.
[20:39] pretty quickly. I'm not having to go off and check
[20:41] I'm not having to go off and check Twitter or something.
[20:43] Twitter or something. Levels. What's the progression curve?
[20:44] Levels. What's the progression curve? Yeah, that looks about right. For
[20:46] Yeah, that looks about right. For instance, yes, okay.
[20:48] instance, yes, okay. So hopefully you should be able to go
[20:49] So hopefully you should be able to go and um
[20:50] and um kind of work through this with the AI.
[20:52] kind of work through this with the AI. >> [clears throat]
[20:53] >> [clears throat] >> And essentially
[20:55] >> And essentially try to reach an alignment. And this
[20:56] try to reach an alignment. And this grill me skill, this can last a long
[20:58] grill me skill, this can last a long time. This can I've had it ask me 40
[21:01] time. This can I've had it ask me 40 questions. I've had it ask me 80
[21:02] questions. I've had it ask me 80 questions. I've had some people that
[21:04] questions. I've had some people that asks 100 questions too. Literally you're
[21:06] asks 100 questions too. Literally you're sat there for an hour chatting to the
[21:09] sat there for an hour chatting to the AI.
[21:10] AI. And what you end up with is essentially
[21:12] And what you end up with is essentially this conversation history
[21:13] this conversation history that works really nicely and works
[21:15] that works really nicely and works really nicely as an asset of the design
[21:18] really nicely as an asset of the design concept that you're creating.
[21:20] concept that you're creating. This can also function like this. You
[21:21] This can also function like this. You can
[21:22] can have a meeting with someone who's a
[21:24] have a meeting with someone who's a maybe a domain expert. Maybe I have a
[21:26] maybe a domain expert. Maybe I have a meeting with Sarah. I feed that meeting
[21:28] meeting with Sarah. I feed that meeting transcript into
[21:31] transcript into I don't know, Gemini meetings or
[21:32] I don't know, Gemini meetings or whatever you guys are using. You take
[21:35] whatever you guys are using. You take that, you feed it into a grilling
[21:36] that, you feed it into a grilling session and you grill through the
[21:37] session and you grill through the assumptions that you didn't have.
[21:39] assumptions that you didn't have. So this ends up being a really nice kind
[21:41] So this ends up being a really nice kind of
[21:42] of um
[21:43] um a really nice way of just taking inputs
[21:45] a really nice way of just taking inputs from the world and then just turning and
[21:47] from the world and then just turning and validating them.
[21:50] validating them. So okay.
[21:51] So okay. Let's see. I really want to get to the
[21:53] Let's see. I really want to get to the end of this, but I also don't want to
[21:54] end of this, but I also don't want to just like be sat here talking to the AI
[21:56] just like be sat here talking to the AI in front of you for uh
[21:58] in front of you for uh a thousand days. So I'm just going to
[21:59] a thousand days. So I'm just going to say yes.
[22:05] Let's see what happens. So I'll tell you what, um while you guys
[22:07] So I'll tell you what, um while you guys sort of have a little fiddle with this
[22:08] sort of have a little fiddle with this locally, let's start a little Q&A
[22:10] locally, let's start a little Q&A session now.
[22:12] session now. And
[22:13] And let's see. How's this going to work?
[22:16] let's see. How's this going to work? Can we keep the door closed or turn up
[22:17] Can we keep the door closed or turn up the microphone? It's quite noisy.
[22:19] the microphone? It's quite noisy. Uh
[22:20] Uh let's see. Mike, can we uh
[22:23] let's see. Mike, can we uh door closed. Oh it has been closed. Mark
[22:25] door closed. Oh it has been closed. Mark has answered. Beautiful.
[22:26] has answered. Beautiful. So what I'd like you to do
[22:29] So what I'd like you to do is there any air con? Yeah, there is
[22:30] is there any air con? Yeah, there is some air con, I think.
[22:32] some air con, I think. There is some air con.
[22:34] There is some air con. You guys aren't being lit here. I'm
[22:36] You guys aren't being lit here. I'm being fro I'm being fried alive here.
[22:39] being fro I'm being fried alive here. Uh so what I'd like you to do is go on
[22:40] Uh so what I'd like you to do is go on to the Slido, which you can join here.
[22:43] to the Slido, which you can join here. Have a if if you're not taking the
[22:44] Have a if if you're not taking the exercise, go on to the Slido, have a
[22:46] exercise, go on to the Slido, have a little fiddle and vote on some good
[22:48] little fiddle and vote on some good questions. I'm just going to chat to the
[22:50] questions. I'm just going to chat to the AI for a second
[22:52] AI for a second uh until we reach a stopping point. So
[22:54] uh until we reach a stopping point. So do streaks earn points?
[22:56] do streaks earn points? Um
[22:57] Um streaks are standalone.
[23:16] Where does gamification UI live? Let's have it in the dashboard.
[23:20] I'm just going to scan these and blast through them basically.
[23:22] through them basically. So how are we doing with our Slido?
[23:25] So how are we doing with our Slido? Okay.
[23:27] Okay. Have I tried Spec Kit, Open Spec or
[23:29] Have I tried Spec Kit, Open Spec or Taskmaster instead of the Grill Me
[23:30] Taskmaster instead of the Grill Me skill? Do I find them more verbose or a
[23:32] skill? Do I find them more verbose or a structured alternative? This is a great
[23:33] structured alternative? This is a great question. So there are a ton of
[23:35] question. So there are a ton of different frameworks out there that
[23:37] different frameworks out there that allow you to um sort of build up this
[23:40] allow you to um sort of build up this planning process for you. I personally
[23:42] planning process for you. I personally believe you at at this stage, when
[23:45] believe you at at this stage, when there's no clear winner, when there's no
[23:47] there's no clear winner, when there's no kind of like one true way and when
[23:48] kind of like one true way and when things are changing all the time, you
[23:50] things are changing all the time, you need to own as much of your planning
[23:52] need to own as much of your planning stack as you possibly can.
[23:54] stack as you possibly can. What I've noticed and a lot of my
[23:56] What I've noticed and a lot of my students
[23:58] students is
[23:59] is they tend to overuse a certain stack.
[24:03] they tend to overuse a certain stack. They get into trouble
[24:05] They get into trouble and they because they don't own the
[24:07] and they because they don't own the stack and they don't have observability
[24:09] stack and they don't have observability over the whole thing, they just go
[24:11] over the whole thing, they just go this isn't working. This sucks. Whereas
[24:13] this isn't working. This sucks. Whereas if
[24:14] if um
[24:15] um if you have control over the whole
[24:16] if you have control over the whole thing, then at least you know how to fix
[24:19] thing, then at least you know how to fix it or potentially know how to fix it.
[24:22] it or potentially know how to fix it. So I'm even though I'm sort of giving
[24:24] So I'm even though I'm sort of giving you uh a stack basically, I believe in
[24:28] you uh a stack basically, I believe in inversion of control and you should be
[24:30] inversion of control and you should be in control of the stack.
[24:32] in control of the stack. So bur bur bur.
[24:34] So bur bur bur. Can I press zero, please?
[24:42] Sorry, that was a lot of sort of mumbling. Can I
[24:50] Thank you. I'm so sorry.
[24:51] I'm so sorry. >> [laughter]
[24:52] >> [laughter] >> What you didn't want to give Claude good
[24:53] >> What you didn't want to give Claude good feedback? What is what is wrong with
[24:55] feedback? What is what is wrong with you?
[25:00] Uh okay, cool. Uh many of the questions asked by the
[25:01] Uh many of the questions asked by the Grill Me skill are not necessarily
[25:02] Grill Me skill are not necessarily appropriate for a developer, rather a
[25:04] appropriate for a developer, rather a PO. In larger teams, who should use it?
[25:06] PO. In larger teams, who should use it? Yeah.
[25:07] Yeah. Um
[25:08] Um Raise your hand if um
[25:10] Raise your hand if um you've ever done pair programming.
[25:12] you've ever done pair programming. Anyone ever done pair programming?
[25:14] Anyone ever done pair programming? Right. I keep Put your hands down and
[25:16] Right. I keep Put your hands down and raise your hand again if you've ever
[25:17] raise your hand again if you've ever done a pair programming session with an
[25:19] done a pair programming session with an AI.
[25:21] AI. Right.
[25:22] Right. How did it go? Was it good? You enjoy
[25:23] How did it go? Was it good? You enjoy it? I think pair programming sessions
[25:25] it? I think pair programming sessions with AI is a great idea because you've
[25:27] with AI is a great idea because you've got a third person in the room who will
[25:29] got a third person in the room who will relentlessly quiz you and ask you
[25:30] relentlessly quiz you and ask you questions. It should If you don't know
[25:32] questions. It should If you don't know the answer, it should be you, the domain
[25:34] the answer, it should be you, the domain expert and the AI in the same room. If
[25:36] expert and the AI in the same room. If you're have a question about
[25:38] you're have a question about implementation, it should be you, a
[25:40] implementation, it should be you, a fellow developer and the AI in the same
[25:41] fellow developer and the AI in the same room, you know. You can be sort of
[25:43] room, you know. You can be sort of working through these questions in your
[25:44] working through these questions in your team. And I think actually
[25:47] team. And I think actually we're going to look at implementation in
[25:49] we're going to look at implementation in a bit and we're going to see how you can
[25:50] a bit and we're going to see how you can make implementation so much faster.
[25:53] make implementation so much faster. And but I think the really crucial
[25:55] And but I think the really crucial decisions, the ones you need humans for
[25:57] decisions, the ones you need humans for you actually need a lot of humans and it
[25:59] you actually need a lot of humans and it doesn't really matter how many humans
[26:01] doesn't really matter how many humans are in there. You can actually throw a
[26:02] are in there. You can actually throw a bunch like a kind of like mob
[26:04] bunch like a kind of like mob programming with AI essentially.
[26:07] programming with AI essentially. Uh what's my favorite meta prompting
[26:08] Uh what's my favorite meta prompting tool? I think I kind of answered that.
[26:11] tool? I think I kind of answered that. Uh there's no air con. Let's just live
[26:13] Uh there's no air con. Let's just live with it. Uh
[26:14] with it. Uh how do I use the conversation as an
[26:15] how do I use the conversation as an asset after the Grill Me session? Well,
[26:18] asset after the Grill Me session? Well, we're going to get there.
[26:20] we're going to get there. Um okay, so I really want to
[26:25] Um okay, so I really want to I want to speed this up sort of
[26:26] I want to speed this up sort of artificially.
[26:28] artificially. Just what
[26:30] Just what I This is the thing. So someone just
[26:32] I This is the thing. So someone just said okay, Ralph loop this. But this is
[26:34] said okay, Ralph loop this. But this is crucial because I can't loop over this,
[26:37] crucial because I can't loop over this, right? I can't um
[26:39] right? I can't um I think of there is being two types of
[26:41] I think of there is being two types of tasks in the AI age.
[26:44] tasks in the AI age. Where you have human in the loop tasks,
[26:46] Where you have human in the loop tasks, where a human needs to sit there and do
[26:48] where a human needs to sit there and do it.
[26:49] it. Which is this.
[26:50] Which is this. We are the human in the loop, with
[26:52] We are the human in the loop, with multiple humans in the loop. And there
[26:53] multiple humans in the loop. And there are AFK tasks. There are tasks where the
[26:56] are AFK tasks. There are tasks where the human can be away from the keyboard and
[26:58] human can be away from the keyboard and it doesn't matter. Implementation, as
[27:00] it doesn't matter. Implementation, as we'll see, can be turned into an AFK
[27:02] we'll see, can be turned into an AFK task. But planning, this alignment
[27:04] task. But planning, this alignment phase, has to be human in the loop. Has
[27:07] phase, has to be human in the loop. Has to be.
[27:12] So I've got to do it, unfortunately. Um
[27:12] Um I don't know.
[27:14] I don't know. Uh
[27:15] Uh give me a long list of all your
[27:18] give me a long list of all your recommendations.
[27:20] recommendations. I'm running a workshop right now.
[27:26] So I artificially need you to
[27:29] need you to pull more weight.
[27:34] So let's see what it does. Uh let's answer a couple more questions
[27:35] Uh let's answer a couple more questions while it's doing its thing.
[27:37] while it's doing its thing. What is my opinion on PMs or other
[27:40] What is my opinion on PMs or other non-dev roles vibe coding task?
[27:43] non-dev roles vibe coding task? Hmm.
[27:48] Um I'm going to return to this later, I think. I'm going to leave this
[27:49] think. I'm going to leave this unanswered.
[27:51] unanswered. A bit of mystery.
[27:54] A bit of mystery. I notice I'm not using the ask user
[27:55] I notice I'm not using the ask user questions UI for Grill Me. Why? Um
[27:58] questions UI for Grill Me. Why? Um there's a specific uh
[28:00] there's a specific uh UI that you can bring up in Claude Code.
[28:02] UI that you can bring up in Claude Code. I'll answer this just quickly.
[28:04] I'll answer this just quickly. Uh ask me a question using the ask user
[28:09] Uh ask me a question using the ask user question tool.
[28:11] question tool. >> [snorts]
[28:11] >> [snorts] >> And this UI um is just sort of broken in
[28:13] >> And this UI um is just sort of broken in Claude and I really hate it.
[28:19] You notice I'm using Claude, but I don't like Claude very much. Like you you
[28:21] like Claude very much. Like you you really are free with this method to
[28:22] really are free with this method to choose any um system you like. And this
[28:24] choose any um system you like. And this is what the UI looks like.
[28:26] is what the UI looks like. It's very pleasing when you first
[28:27] It's very pleasing when you first encounter it, but then you realize it is
[28:29] encounter it, but then you realize it is actually broken in a ton of different
[28:30] actually broken in a ton of different ways.
[28:33] All right, what did it come back with? Oh blimey.
[28:36] Oh blimey. Oh no.
[28:38] Oh no. So
[28:40] So while this is doing its thing, let me do
[28:42] while this is doing its thing, let me do some teaching in the meantime.
[28:44] some teaching in the meantime. The plan here is that we take our Grill
[28:46] The plan here is that we take our Grill Me skill
[28:47] Me skill and we need to essentially find some way
[28:50] and we need to essentially find some way of turning it into
[28:52] of turning it into a destination.
[28:54] a destination. We need to go down to the
[28:56] We need to go down to the uh
[28:57] uh We essentially need to
[28:59] We essentially need to we're figuring out the shape of this.
[29:01] we're figuring out the shape of this. That's what we're doing. We're figuring
[29:02] That's what we're doing. We're figuring out the shape of the tasks during the
[29:04] out the shape of the tasks during the grilling session.
[29:05] grilling session. And in order to
[29:08] And in order to turn it into a bunch of actionable
[29:10] turn it into a bunch of actionable actions for the AI
[29:12] actions for the AI we essentially need to figure out the
[29:14] we essentially need to figure out the destination. We need to know where we're
[29:16] destination. We need to know where we're going. We need to know the shape of this
[29:17] going. We need to know the shape of this entire thing.
[29:18] entire thing. So I think of there is being two
[29:20] So I think of there is being two essential documents that we need.
[29:23] essential documents that we need. We need a document that
[29:25] We need a document that documents the destination.
[29:28] documents the destination. Oh no.
[29:30] Oh no. It's so not bright enough. There we go.
[29:33] It's so not bright enough. There we go. Still not brighter. There we go.
[29:36] Still not brighter. There we go. We need something to document the
[29:37] We need something to document the destination.
[29:38] destination. And we need something to document the
[29:40] And we need something to document the journey.
[29:41] journey. In other words, we need something a
[29:42] In other words, we need something a document that's going to
[29:44] document that's going to figure out what this even looks like in
[29:47] figure out what this even looks like in all of its user stories and figure out a
[29:49] all of its user stories and figure out a definition of done
[29:50] definition of done and then we need to figure out what the
[29:52] and then we need to figure out what the split looks like.
[29:54] split looks like. So, that's where we're going to go to
[29:54] So, that's where we're going to go to next.
[29:56] next. So, once we finish with the grilling
[29:57] So, once we finish with the grilling session,
[29:59] session, yeah, it looks great. Fantastic. I love
[30:01] yeah, it looks great. Fantastic. I love it. It answered
[30:03] it. It answered it answered 22 of its own questions.
[30:05] it answered 22 of its own questions. There you go. That's quite
[30:06] There you go. That's quite representative of what a grilling
[30:07] representative of what a grilling session looks like.
[30:09] session looks like. So, at this point now,
[30:12] So, at this point now, I have used 25k tokens and all of that
[30:16] I have used 25k tokens and all of that or loads of that stuff is gold. I want
[30:19] or loads of that stuff is gold. I want to keep that around. I've I've got 25k
[30:22] to keep that around. I've I've got 25k great tokens there.
[30:24] great tokens there. And what I want to do is kind of
[30:25] And what I want to do is kind of summarize it in some kind of destination
[30:27] summarize it in some kind of destination documents.
[30:29] documents. So, this is um the next exercise
[30:32] So, this is um the next exercise where we're going to
[30:37] uh we're going to write a product requirements document.
[30:39] requirements document. And the the product requirements
[30:41] And the the product requirements documents or the PRD
[30:43] documents or the PRD is essentially
[30:45] is essentially that's its function. It's the
[30:46] that's its function. It's the destination documents. And it's sort of
[30:48] destination documents. And it's sort of doesn't matter what shape it is. I've
[30:51] doesn't matter what shape it is. I've got a shape that I prefer and I quite
[30:53] got a shape that I prefer and I quite like.
[30:55] like. But, you can just choose your own shape
[30:56] But, you can just choose your own shape or whatever your company uses.
[31:03] And all we're really doing is I'm not too worried about that.
[31:06] too worried about that. All we're really doing is summarizing
[31:08] All we're really doing is summarizing the design concept that we have so far.
[31:10] the design concept that we have so far. And
[31:12] And the So, let let's try this.
[31:15] the So, let let's try this. So, I'm going to initiate this. I'm
[31:16] So, I'm going to initiate this. I'm going to say
[31:18] going to say zoom all the way to the bottom.
[31:19] zoom all the way to the bottom. All I'm going to do is just say write a
[31:21] All I'm going to do is just say write a PRD.
[31:23] PRD. And we can take a look at that skill
[31:24] And we can take a look at that skill now.
[31:26] now. Write a PRD.
[31:29] Write a PRD. So, this skill
[31:32] So, this skill it does a few things.
[31:34] it does a few things. It first asks the user for a long
[31:36] It first asks the user for a long detailed description of the problem. You
[31:37] detailed description of the problem. You can use write a PRD without grilling
[31:39] can use write a PRD without grilling first, but I just like to grill first
[31:41] first, but I just like to grill first and then write the PRD afterwards.
[31:43] and then write the PRD afterwards. Then you can um get it to install the
[31:45] Then you can um get it to install the repo which we've kind of already done.
[31:47] repo which we've kind of already done. Then we get it to
[31:49] Then we get it to interview the user relentlessly so we
[31:51] interview the user relentlessly so we have a kind of grilling session again
[31:52] have a kind of grilling session again and then we start um putting together a
[31:55] and then we start um putting together a PRD template. So, this is available in
[31:57] PRD template. So, this is available in the repo if you want to check it out.
[31:59] the repo if you want to check it out. And essentially this is what it looks
[32:01] And essentially this is what it looks like. We've got some problem statements,
[32:03] like. We've got some problem statements, the problem the user is facing, the
[32:04] the problem the user is facing, the solution to the problem and a set of
[32:06] solution to the problem and a set of user stories. And these user stories
[32:08] user stories. And these user stories sort of define what this is. You know,
[32:10] sort of define what this is. You know, as
[32:11] as you you guys have probably seen things
[32:13] you you guys have probably seen things like this if you've been a developer at
[32:14] like this if you've been a developer at all. Um you know, there are cucumber is
[32:16] all. Um you know, there are cucumber is a language you can use to write these in
[32:18] a language you can use to write these in or we just sort of
[32:19] or we just sort of um
[32:20] um uh write them ourselves essentially.
[32:22] uh write them ourselves essentially. Then we have a list of implementation
[32:23] Then we have a list of implementation decisions that were made and list of
[32:26] decisions that were made and list of crucially testing decisions, too.
[32:29] crucially testing decisions, too. So,
[32:33] I'm going to run this. Okay. And so, it's finished its thing.
[32:36] it's finished its thing. Ah!
[32:38] Ah! Windows, let me close the thing. Thank
[32:39] Windows, let me close the thing. Thank you.
[32:41] you. I don't know why I bought a Windows
[32:42] I don't know why I bought a Windows laptop. I think I just
[32:43] laptop. I think I just I like the challenge. Um
[32:46] I like the challenge. Um >> [clears throat]
[32:47] >> [clears throat] >> So, the first thing that it's going to
[32:48] >> So, the first thing that it's going to give me
[32:49] give me are a set of proposed modules it wants
[32:52] are a set of proposed modules it wants to modify.
[32:54] to modify. Now, there's a deep reason why I'm
[32:56] Now, there's a deep reason why I'm thinking about this. So, this is
[32:58] thinking about this. So, this is at this stage
[33:00] at this stage we have an idea, we have sort of specked
[33:02] we have an idea, we have sort of specked out the idea, we've reached a sort of
[33:05] out the idea, we've reached a sort of understanding of what we're trying to do
[33:08] understanding of what we're trying to do and then we need to start thinking about
[33:09] and then we need to start thinking about the code
[33:11] the code because at this point we need to
[33:14] because at this point we need to this is not specs to code. This is not
[33:16] this is not specs to code. This is not where we're ignoring the code. We
[33:17] where we're ignoring the code. We actually keep the code in mind
[33:19] actually keep the code in mind throughout the whole process.
[33:21] throughout the whole process. And
[33:22] And the way I like to do this is I like to
[33:23] the way I like to do this is I like to just sort of think about a set of
[33:25] just sort of think about a set of proposed modules to modify. We're going
[33:27] proposed modules to modify. We're going to return to this this idea of
[33:29] to return to this this idea of continually designing your system and
[33:31] continually designing your system and keeping your system in mind.
[33:33] keeping your system in mind. So, it's it's saying recommend tests for
[33:35] So, it's it's saying recommend tests for the gamification service is the only
[33:37] the gamification service is the only deep module with meaningful logic. These
[33:39] deep module with meaningful logic. These modules look right. Yeah.
[33:41] modules look right. Yeah. Looks good.
[33:49] And it's going to hang out a PRD. Now, for ease of setup
[33:51] Now, for ease of setup I've got it so that it creates a set of
[33:53] I've got it so that it creates a set of issues locally.
[33:54] issues locally. So, it's just going to create
[33:55] So, it's just going to create essentially a PRD inside this issues
[33:58] essentially a PRD inside this issues directory.
[33:59] directory. But, the way I usually do it
[34:01] But, the way I usually do it and you can check this out yourself is
[34:04] and you can check this out yourself is you can go to my um essentially what I
[34:06] you can go to my um essentially what I consider my work repo
[34:08] consider my work repo which is GitHub um dot com forward slash
[34:10] which is GitHub um dot com forward slash Matt Pocock forward slash course video
[34:13] Matt Pocock forward slash course video manager up here.
[34:15] manager up here. And in here, this is essentially a app
[34:18] And in here, this is essentially a app that I create um that I use all the time
[34:20] that I create um that I use all the time to record my videos and things like
[34:22] to record my videos and things like this. I think I've recorded like
[34:24] this. I think I've recorded like I pulled out the stats. I think I've
[34:25] I pulled out the stats. I think I've recorded like a thousand videos in here
[34:27] recorded like a thousand videos in here or something nuts.
[34:29] or something nuts. Um and you can see here that it's got
[34:30] Um and you can see here that it's got 744 closed issues.
[34:33] 744 closed issues. And this is essentially all of the uh
[34:35] And this is essentially all of the uh PRDs and all of the implementation
[34:37] PRDs and all of the implementation issues that I've put into here. So, this
[34:39] issues that I've put into here. So, this is how I usually like to do it.
[34:41] is how I usually like to do it. >> [clears throat]
[34:43] >> [clears throat] >> So, that's what I'm doing with the There
[34:45] >> So, that's what I'm doing with the There we go. Yeah, I'm just going to say yes
[34:47] we go. Yeah, I'm just going to say yes and uh
[34:49] and uh and get that issue out.
[34:51] and get that issue out. Let's see. It is inside here.
[34:54] Let's see. It is inside here. So, we've got the problem statements.
[34:56] So, we've got the problem statements. People signing up for courses.
[34:58] People signing up for courses. Uh the solution, the user stories, uh 18
[35:01] Uh the solution, the user stories, uh 18 user stories looks nice, some
[35:02] user stories looks nice, some implementation decisions, level
[35:03] implementation decisions, level thresholds, etc. This is enough
[35:05] thresholds, etc. This is enough information. We've kind of clarified
[35:07] information. We've kind of clarified where we're going and what we're doing.
[35:10] where we're going and what we're doing. So, that's what we do. We essentially
[35:11] So, that's what we do. We essentially have a grilling session and we've
[35:13] have a grilling session and we've created an asset out of it. Now, raise
[35:15] created an asset out of it. Now, raise your hand.
[35:16] your hand. Should I be reviewing this document?
[35:19] Should I be reviewing this document? Raise your hand if you think I should be
[35:20] Raise your hand if you think I should be reviewing the documents.
[35:23] reviewing the documents. Yeah, I don't I don't look at these.
[35:25] Yeah, I don't I don't look at these. I don't look at these.
[35:26] I don't look at these. The reason I don't look at these is
[35:28] The reason I don't look at these is because what am I testing at this point?
[35:30] because what am I testing at this point? What am I Like when I read it,
[35:33] What am I Like when I read it, what am I testing? What am I What are
[35:35] what am I testing? What am I What are the failure modes I'm trying to test
[35:36] the failure modes I'm trying to test for?
[35:37] for? I know that LLMs are great at
[35:38] I know that LLMs are great at summarization
[35:39] summarization cuz they are. They're really good at
[35:40] cuz they are. They're really good at summarization.
[35:42] summarization. I have reached the same wavelength as
[35:44] I have reached the same wavelength as the LLM, right? Using the grill me
[35:46] the LLM, right? Using the grill me skill, we have a shared design concept.
[35:48] skill, we have a shared design concept. So, if I have a shared design concept,
[35:50] So, if I have a shared design concept, all I'm doing
[35:52] all I'm doing is I'm just essentially checking the
[35:54] is I'm just essentially checking the LLM's ability to summarize.
[35:57] LLM's ability to summarize. So, I don't tend to read these.
[36:02] Let's have Let's have a Q&A cuz I can feel you guys are itching for it. And I
[36:04] feel you guys are itching for it. And I think we might have like
[36:06] think we might have like I don't know, just a 5-minute comfort
[36:07] I don't know, just a 5-minute comfort break just to uh rest my voice and so
[36:09] break just to uh rest my voice and so you can catch up with the exercises for
[36:10] you can catch up with the exercises for a minute if that's all right. So, let's
[36:11] a minute if that's all right. So, let's have a little Q&A sesh.
[36:14] have a little Q&A sesh. Uh
[36:15] Uh If I don't like Claude Code, which one
[36:17] If I don't like Claude Code, which one do I actually like? Um
[36:20] do I actually like? Um uh
[36:21] uh Have you ever heard the phrase um
[36:23] Have you ever heard the phrase um uh democracy is the worst way to run a
[36:25] uh democracy is the worst way to run a country apart from all the other ways?
[36:27] country apart from all the other ways? That's how I feel about Claude Code.
[36:30] That's how I feel about Claude Code. Uh we've answered that one.
[36:33] Uh we've answered that one. Uh
[36:35] Uh What's your thoughts on developers
[36:36] What's your thoughts on developers needing to very deeply understand
[36:38] needing to very deeply understand TypeScript now that fix the TS make no
[36:41] TypeScript now that fix the TS make no mistakes exist? I don't understand the
[36:42] mistakes exist? I don't understand the phrasing of this,
[36:44] phrasing of this, but I think I understand meaning,
[36:46] but I think I understand meaning, which is that
[36:49] which is that I believe that code is very important
[36:51] I believe that code is very important and this is kind of going to feed
[36:52] and this is kind of going to feed through the whole session and that bad
[36:54] through the whole session and that bad code bases make bad agents. If you have
[36:57] code bases make bad agents. If you have a garbage code base, you're going to get
[36:59] a garbage code base, you're going to get garbage out of the agent that's working
[37:01] garbage out of the agent that's working in that code base. We'll talk more about
[37:03] in that code base. We'll talk more about that in a bit.
[37:04] that in a bit. And so, I think understanding these
[37:06] And so, I think understanding these tools very deeply, understanding code
[37:07] tools very deeply, understanding code deeply is going to make you a much much
[37:10] deeply is going to make you a much much better developer and get more out of AI.
[37:17] Uh and that answers that question, too. Sweet.
[37:20] Uh Get out of there. There you are.
[37:26] Now that we have 1 million tokens available, do we ever actually want to
[37:27] available, do we ever actually want to take advantage of that?
[37:32] I've noticed that the dumb zone has become less dumb lately. Okay, great
[37:33] become less dumb lately. Okay, great question. This goes back to our kind of
[37:36] question. This goes back to our kind of initial idea on the dumb zone.
[37:47] I am I recorded my Claude Code course using a 200k context window and on the
[37:49] using a 200k context window and on the day that I launched the course they
[37:50] day that I launched the course they announced the 1 million context window.
[37:53] announced the 1 million context window. My take on this is that what Claude Code
[37:55] My take on this is that what Claude Code did is they essentially just did this.
[37:57] did is they essentially just did this. Wee!
[37:58] Wee! They shipped a lot more dumb zone to you
[38:01] They shipped a lot more dumb zone to you essentially. Now, this is good for tasks
[38:04] essentially. Now, this is good for tasks where you want to retrieve things from a
[38:06] where you want to retrieve things from a large context window. If you want to
[38:08] large context window. If you want to pass five copies of War and Peace or
[38:09] pass five copies of War and Peace or something to it and you want to find out
[38:11] something to it and you want to find out all the things that uh
[38:14] all the things that uh uh I can't remember a character from War
[38:16] uh I can't remember a character from War and Peace. Uh
[38:17] and Peace. Uh Why did I start with that?
[38:19] Why did I start with that? It's good for retrieval.
[38:20] It's good for retrieval. It's less good for coding.
[38:22] It's less good for coding. So, I consider that it is about 100k at
[38:27] So, I consider that it is about 100k at the moment is the smart zone. The smart
[38:29] the moment is the smart zone. The smart zone will get bigger and that will be a
[38:31] zone will get bigger and that will be a really nice improvement.
[38:33] really nice improvement. So, folks, we're going to take it like a
[38:34] So, folks, we're going to take it like a 5-minute comfort break if that's all
[38:36] 5-minute comfort break if that's all right just for my voice and to maybe you
[38:39] right just for my voice and to maybe you can have a little move around or
[38:39] can have a little move around or something or grab a drink. I can just
[38:41] something or grab a drink. I can just notice some sleepy eyes and I want to
[38:43] notice some sleepy eyes and I want to make sure that we're awake for the next
[38:44] make sure that we're awake for the next bit if that's all right. So, we'll take
[38:46] bit if that's all right. So, we'll take 5 minutes and I will see you back here
[38:49] 5 minutes and I will see you back here then. All right?
[38:52] then. All right? So, we have
[38:53] So, we have our PRD
[38:55] our PRD which I'm not going to read, our kind of
[38:57] which I'm not going to read, our kind of destination document. Let's quickly scan
[38:59] destination document. Let's quickly scan for any good questions before we zoom
[39:00] for any good questions before we zoom ahead.
[39:06] And Rediscovering the role of software
[39:07] Rediscovering the role of software engineering today's world, top three
[39:08] engineering today's world, top three disciplines you recommend.
[39:10] disciplines you recommend. Um
[39:12] Um Taekwondo is good, I've heard. I've no
[39:13] Taekwondo is good, I've heard. I've no I've no idea how to answer this
[39:14] I've no idea how to answer this question. Um
[39:16] question. Um thank you for asking it though. Um Top
[39:18] thank you for asking it though. Um Top three disciplines I recommend.
[39:21] three disciplines I recommend. I mean
[39:22] I mean Sorry? Plumbing. Plumbing is a good one.
[39:24] Sorry? Plumbing. Plumbing is a good one. Yeah, yeah, yeah. I don't know if that's
[39:25] Yeah, yeah, yeah. I don't know if that's a discipline. I the plumbers I've hired
[39:27] a discipline. I the plumbers I've hired are not usually very disciplined.
[39:29] are not usually very disciplined. Um
[39:31] Um Right.
[39:33] Right. So, okay. We now have our destination,
[39:35] So, okay. We now have our destination, okay? Um
[39:37] okay? Um Perfect.
[39:39] Perfect. So, how do we actually get to our
[39:41] So, how do we actually get to our destination? How do we We have a sort of
[39:43] destination? How do we We have a sort of vague PRD? How do we split it so that we
[39:47] vague PRD? How do we split it so that we don't put things into the dumb zone?
[39:49] don't put things into the dumb zone? In other words, we have our number four,
[39:51] In other words, we have our number four, how do we split it into this kind of
[39:53] how do we split it into this kind of multi-phase plan? Well, probably what
[39:55] multi-phase plan? Well, probably what you would do at this point is you would
[39:56] you would do at this point is you would say, "Okay, Claude, give me a
[39:57] say, "Okay, Claude, give me a multi-phase plan that gets me to this
[39:59] multi-phase plan that gets me to this destination, right?" That sort of makes
[40:01] destination, right?" That sort of makes sense. This is what we've been doing
[40:02] sense. This is what we've been doing before.
[40:03] before. But I have um
[40:04] But I have um a sort of better way of doing it now,
[40:06] a sort of better way of doing it now, which is that
[40:09] which is that I like
[40:10] I like creating a Kanban board out of this.
[40:14] creating a Kanban board out of this. Raise your hand if you don't know what a
[40:15] Raise your hand if you don't know what a Kanban board is.
[40:17] Kanban board is. Mm, cool. Okay. A Kanban board is
[40:19] Mm, cool. Okay. A Kanban board is essentially just a set of tickets that
[40:22] essentially just a set of tickets that you put on the wall that have blocking
[40:23] you put on the wall that have blocking relationships to each other. So, we're
[40:25] relationships to each other. So, we're going to see what it kind of looks like
[40:27] going to see what it kind of looks like here. This is how we've worked um
[40:30] here. This is how we've worked um as developers for a long time, really
[40:31] as developers for a long time, really since Agile came around. And what it
[40:34] since Agile came around. And what it does, we can see it here,
[40:36] does, we can see it here, it has proposed that we split this setup
[40:40] it has proposed that we split this setup into
[40:41] into um five different tasks here.
[40:44] um five different tasks here. We have the first one, which is the
[40:45] We have the first one, which is the schema and the gamification service.
[40:47] schema and the gamification service. Yeah, well, that looks pretty good. This
[40:49] Yeah, well, that looks pretty good. This is blocked by nothing.
[40:51] is blocked by nothing. And we can even see here that it's a
[40:52] And we can even see here that it's a it's given it a type of AFK, too. You
[40:55] it's given it a type of AFK, too. You remember I talked about human in the
[40:56] remember I talked about human in the loop and AFK earlier? This is an AFK
[40:58] loop and AFK earlier? This is an AFK task. This is something we can just pass
[40:59] task. This is something we can just pass off to an agent to do its thing.
[41:01] off to an agent to do its thing. Streak tracking, okay, that looks good.
[41:04] Streak tracking, okay, that looks good. Uh
[41:05] Uh then wire points and streaks into
[41:07] then wire points and streaks into lessons quiz completion. This is blocked
[41:08] lessons quiz completion. This is blocked by one and two.
[41:10] by one and two. Retroactive backfill. This is blocked
[41:12] Retroactive backfill. This is blocked only by one.
[41:14] only by one. And then this one here is blocked by all
[41:16] And then this one here is blocked by all of the tasks. Cool.
[41:19] of the tasks. Cool. Hmm.
[41:21] Hmm. Now, I consider this you could say, "Why
[41:24] Now, I consider this you could say, "Why don't we just make this sort of
[41:25] don't we just make this sort of generation of the issues, why don't we
[41:27] generation of the issues, why don't we just hand that over to the AI? Why do I
[41:28] just hand that over to the AI? Why do I need to be involved here, right?" Cuz
[41:30] need to be involved here, right?" Cuz it's given us quite a good selection of
[41:32] it's given us quite a good selection of tools here. Why do I need to review this
[41:34] tools here. Why do I need to review this and sort of
[41:36] and sort of figure out what's next?
[41:37] figure out what's next? Now, my take here is that this is really
[41:40] Now, my take here is that this is really cheap to do, like very quick to do once
[41:42] cheap to do, like very quick to do once I've done the PR, and I can immediately
[41:44] I've done the PR, and I can immediately see some issues here.
[41:49] There's a really, really important technique when you're kind of figuring
[41:51] technique when you're kind of figuring out what the shape of this journey
[41:54] out what the shape of this journey should look like.
[41:55] should look like. And
[42:00] it sort of comes to this very classic idea, uh which comes from the Pragmatic
[42:02] idea, uh which comes from the Pragmatic Programmer called traceable bullets or
[42:05] Programmer called traceable bullets or vertical slices.
[42:07] vertical slices. And traceable bullets really transformed
[42:09] And traceable bullets really transformed the way I think about actually
[42:12] the way I think about actually getting AI to pick its own tasks.
[42:14] getting AI to pick its own tasks. Systems have layers, right?
[42:17] Systems have layers, right? There are layers in your system.
[42:19] There are layers in your system. These might be different deployable
[42:20] These might be different deployable units. You might have a database that
[42:22] units. You might have a database that lives somewhere. You might have an API
[42:24] lives somewhere. You might have an API that lives maybe close to the database
[42:25] that lives maybe close to the database but in a separate bit. You might have a
[42:27] but in a separate bit. You might have a front end that lives somewhere totally
[42:29] front end that lives somewhere totally different like a CDN.
[42:30] different like a CDN. Or within these deployable units, you
[42:33] Or within these deployable units, you might have different layers within
[42:34] might have different layers within those. In for instance, the code base
[42:36] those. In for instance, the code base that we're working in, we have a ton of
[42:39] that we're working in, we have a ton of different services. Service. We have a
[42:42] different services. Service. We have a quiz service, a team service, a user
[42:43] quiz service, a team service, a user service, coupon service, core service.
[42:45] service, coupon service, core service. And these services have dependencies on
[42:48] And these services have dependencies on each other. So, they're kind of like
[42:49] each other. So, they're kind of like individual layers.
[42:51] individual layers. Well,
[42:52] Well, what I noticed is that AI loves to code
[42:56] what I noticed is that AI loves to code horizontally.
[42:57] horizontally. So, it loves to code layer by layer.
[43:00] So, it loves to code layer by layer. So, in other words, in phase one, it
[43:02] So, in other words, in phase one, it will do all of the database stuff, all
[43:03] will do all of the database stuff, all of the schema, all of the you know, all
[43:06] of the schema, all of the you know, all the stuff related to that unit. Then it
[43:08] the stuff related to that unit. Then it will go into phase two and do all of the
[43:10] will go into phase two and do all of the API stuff. Then it will add the front
[43:13] API stuff. Then it will add the front end on top of that.
[43:15] end on top of that. Does Can anyone tell me what's wrong
[43:16] Does Can anyone tell me what's wrong with that picture? Why is that not a
[43:19] with that picture? Why is that not a good thing to do? Raise your hand if you
[43:20] good thing to do? Raise your hand if you have an answer.
[43:21] have an answer. Yeah.
[43:22] Yeah. >> have that whole feedback loop.
[43:24] >> have that whole feedback loop. Exactly. You don't get feedback on your
[43:26] Exactly. You don't get feedback on your work until you've
[43:29] work until you've really started or completed phase three.
[43:32] really started or completed phase three. So,
[43:33] So, what you really need to do is you you're
[43:35] what you really need to do is you you're not until you get to phase three, you're
[43:37] not until you get to phase three, you're not actually testing that all the layers
[43:38] not actually testing that all the layers work together.
[43:43] You haven't got an integrated system that you can test against.
[43:44] that you can test against. And so,
[43:46] And so, instead you need to think about vertical
[43:48] instead you need to think about vertical layers. You need to think about thin
[43:50] layers. You need to think about thin slices of functionality that cross all
[43:52] slices of functionality that cross all of the layers that you need to.
[43:54] of the layers that you need to. And this is a much better way to work,
[43:57] And this is a much better way to work, much better way for the AI to work, too,
[43:59] much better way for the AI to work, too, because it means at the end of phase one
[44:01] because it means at the end of phase one or during phase one it can get feedback
[44:03] or during phase one it can get feedback on its entire flow.
[44:05] on its entire flow. So, what this means to me
[44:08] So, what this means to me is inside the PRD to issues skill up
[44:11] is inside the PRD to issues skill up here,
[44:13] here, I have got break a PRD into
[44:15] I have got break a PRD into independently grabbable issues using
[44:17] independently grabbable issues using vertical slices traceable bullets
[44:19] vertical slices traceable bullets written as local markdown files.
[44:20] written as local markdown files. [snorts]
[44:21] [snorts] We first locate the PRD.
[44:23] We first locate the PRD. Uh again, explore the code base if this
[44:25] Uh again, explore the code base if this is a fresh session. We draft vertical
[44:27] is a fresh session. We draft vertical slices.
[44:29] slices. So, we break the PRD into traceable
[44:31] So, we break the PRD into traceable issues. A traceable bullet, by the way,
[44:33] issues. A traceable bullet, by the way, is uh
[44:35] is uh essentially when you're like an
[44:36] essentially when you're like an anti-aircraft gunner. It's quite a
[44:37] anti-aircraft gunner. It's quite a violent idea, actually. Uh
[44:40] violent idea, actually. Uh and you're looking up in the sky and
[44:41] and you're looking up in the sky and it's night. If you're just shooting
[44:43] it's night. If you're just shooting normal bullets, you have no idea what
[44:44] normal bullets, you have no idea what you're firing at, right? You could just
[44:46] you're firing at, right? You could just be you know, you you see the plane but
[44:47] be you know, you you see the plane but you don't see where your bullets are
[44:48] you don't see where your bullets are going.
[44:49] going. Traceable bullets is they attach a tiny
[44:51] Traceable bullets is they attach a tiny bit of phosphorescence or phosphor or
[44:53] bit of phosphorescence or phosphor or something to make it glow as it goes.
[44:56] something to make it glow as it goes. So, this means that every sixth bullet
[44:57] So, this means that every sixth bullet or something you actually see a line in
[44:59] or something you actually see a line in the sky. So, you have feedback on where
[45:01] the sky. So, you have feedback on where you're aiming. So, this is what this is
[45:03] you're aiming. So, this is what this is the idea here is that we increase our
[45:06] the idea here is that we increase our level of feedback and we get near
[45:07] level of feedback and we get near instant feedback on what we're building.
[45:10] instant feedback on what we're building. Cuz without that the AI is kind of
[45:11] Cuz without that the AI is kind of coding blind until it reaches the later
[45:13] coding blind until it reaches the later phases.
[45:14] phases. We got some vertical slice rules. We
[45:16] We got some vertical slice rules. We quiz the user.
[45:17] quiz the user. And then we create the issue files. So,
[45:20] And then we create the issue files. So, what I see here
[45:22] what I see here is that even though
[45:24] is that even though I've I've told it to do vertical slices,
[45:27] I've I've told it to do vertical slices, it's proposing to
[45:29] it's proposing to create the gamification service
[45:32] create the gamification service first on its own. That's just one slice
[45:35] first on its own. That's just one slice there. And that to me feels like a
[45:36] there. And that to me feels like a horizontal slice. What I want to see in
[45:39] horizontal slice. What I want to see in the first vertical slice especially is I
[45:41] the first vertical slice especially is I want to see the schema changes or some
[45:43] want to see the schema changes or some schema changes. I want to see some new
[45:45] schema changes. I want to see some new service being created and I want a
[45:47] service being created and I want a minimal representation of that on the
[45:49] minimal representation of that on the front end. So, I want it to go through
[45:50] front end. So, I want it to go through the vertical slices, not just the
[45:52] the vertical slices, not just the horizontal. Does that make sense?
[45:54] horizontal. Does that make sense? Okay. So, I'm going to give the AI
[45:57] Okay. So, I'm going to give the AI a rollicking.
[45:59] a rollicking. Uh bad boy. No, I'm not.
[46:02] Uh bad boy. No, I'm not. I'm not going to waste tokens just being
[46:04] I'm not going to waste tokens just being just naming. Um
[46:06] just naming. Um So, the first slice is too horizontal.
[46:10] So, the first slice is too horizontal. I'll just start with that and see if it
[46:11] I'll just start with that and see if it picks it up.
[46:13] picks it up. Does that make sense as a concept?
[46:14] Does that make sense as a concept? And I think having that um
[46:17] And I think having that um what I really like about going back to
[46:19] what I really like about going back to those old books is that we're really
[46:21] those old books is that we're really trying to in this day and age like get
[46:25] trying to in this day and age like get uh
[46:25] uh verbalize best software practices in
[46:28] verbalize best software practices in English.
[46:29] English. And these books, 20-year-old books, have
[46:31] And these books, 20-year-old books, have already done that. And it's an absolute
[46:33] already done that. And it's an absolute gold mine if you want to throw that into
[46:34] gold mine if you want to throw that into prompts. But even with that, it's not
[46:37] prompts. But even with that, it's not going to um not going to do a perfect
[46:38] going to um not going to do a perfect job each time.
[46:39] job each time. So,
[46:41] So, award points for lesson completion
[46:42] award points for lesson completion visible on dashboard. Yes, that's a
[46:44] visible on dashboard. Yes, that's a beautiful vertical slice because it's
[46:47] beautiful vertical slice because it's definitely a big chunk of stuff. It's
[46:49] definitely a big chunk of stuff. It's doing a lot of stories there, but we're
[46:51] doing a lot of stories there, but we're going to see something visible at the
[46:53] going to see something visible at the end and the AI will then just be able to
[46:54] end and the AI will then just be able to add to that. You see why that's
[46:56] add to that. You see why that's preferable to the first one. Cool.
[46:58] preferable to the first one. Cool. Uh looks great.
[47:03] So, we're getting closer now. Anyone following at home as well, you know, not
[47:05] following at home as well, you know, not at home but you get the idea.
[47:07] at home but you get the idea. Um will hopefully see the same thing,
[47:09] Um will hopefully see the same thing, too, and start developing the same
[47:10] too, and start developing the same instincts.
[47:12] instincts. Let's open up for questions just while
[47:13] Let's open up for questions just while I'm still creating these GitHub issues.
[47:16] I'm still creating these GitHub issues. Uh ba ba ba ba Oh, not GitHub issues. Uh
[47:18] Uh ba ba ba ba Oh, not GitHub issues. Uh local issues.
[47:20] local issues. When will I stop using Windows? Never.
[47:22] When will I stop using Windows? Never. What is your Okay, we'll get to that
[47:24] What is your Okay, we'll get to that later.
[47:26] later. How does AI um decide when to stop
[47:28] How does AI um decide when to stop grilling? Cuz AI can ask incessantly,
[47:30] grilling? Cuz AI can ask incessantly, can we have a smarter way to decide the
[47:32] can we have a smarter way to decide the stop point? Yeah, it does tend to really
[47:34] stop point? Yeah, it does tend to really um
[47:35] um those grilling sessions can be super
[47:36] those grilling sessions can be super intense. And the thing about these
[47:37] intense. And the thing about these skills is you can tune them if you want
[47:39] skills is you can tune them if you want to. If you feel like the AI is just
[47:41] to. If you feel like the AI is just absolutely hammering you, hammering you,
[47:43] absolutely hammering you, hammering you, hammering you, then you can just
[47:45] hammering you, then you can just tell it to just pull back a little bit
[47:47] tell it to just pull back a little bit or get it to do, you know, stop points
[47:49] or get it to do, you know, stop points and that kind of thing. So, if that's a
[47:50] and that kind of thing. So, if that's a failure mode that you run into a lot,
[47:51] failure mode that you run into a lot, then you just, you know, change the
[47:53] then you just, you know, change the skill.
[47:57] Uh do I still use uh be extremely concise, sacrifice grammar for the sake
[47:59] concise, sacrifice grammar for the sake of concision? Um there was a tip that I
[48:01] of concision? Um there was a tip that I gave folks um
[48:03] gave folks um 5 months ago, which is that
[48:06] 5 months ago, which is that to basically increase the readability of
[48:08] to basically increase the readability of your plans. So, when you're using plan
[48:10] your plans. So, when you're using plan mode,
[48:11] mode, then you can put it in your Claude.md
[48:14] then you can put it in your Claude.md and you can say, "Okay, yeah, approve
[48:16] and you can say, "Okay, yeah, approve that."
[48:18] that." Let's open up Claude.md.
[48:23] Uh do I have a Claude.md? Maybe I don't. I I really don't use Claude.md very
[48:25] I I really don't use Claude.md very much. I'm just going to put a dummy
[48:26] much. I'm just going to put a dummy inside here.
[48:28] inside here. Um when
[48:30] Um when No.
[48:31] No. When talking to me,
[48:34] When talking to me, uh sacrifice grammar for the sake of
[48:35] uh sacrifice grammar for the sake of concision.
[48:43] And this um prompt was uh really useful to me when I was reading the plans
[48:45] to me when I was reading the plans because it meant that the plans would
[48:46] because it meant that the plans would come out and they would be very concise,
[48:48] come out and they would be very concise, really nice, easy to read, often very
[48:50] really nice, easy to read, often very concise. But I've
[48:53] concise. But I've since dropped this idea in preference to
[48:56] since dropped this idea in preference to a grilling session because what I
[48:58] a grilling session because what I noticed with it just I didn't want to
[49:00] noticed with it just I didn't want to read the plans. I wanted to get on the
[49:01] read the plans. I wanted to get on the same wavelength as the LLM. I wanted it
[49:03] same wavelength as the LLM. I wanted it to ask aggressive questions to me. And
[49:05] to ask aggressive questions to me. And when I stopped reading the plans, I
[49:06] when I stopped reading the plans, I stopped needing them to be concise.
[49:08] stopped needing them to be concise. So, I think of the plans really in the
[49:10] So, I think of the plans really in the destination document as uh the end
[49:13] destination document as uh the end state. And I don't need that end state
[49:14] state. And I don't need that end state to be concise.
[49:15] to be concise. Hopefully that answers your question.
[49:21] Uh What do I think will be the outcome of
[49:22] What do I think will be the outcome of the Mexican standoff of future roles of
[49:23] the Mexican standoff of future roles of PMs and other roles converging? Uh I've
[49:26] PMs and other roles converging? Uh I've no idea. I'm not a pundit. I've no idea.
[49:30] no idea. I'm not a pundit. I've no idea. Uh okay.
[49:31] Uh okay. So, we should
[49:33] So, we should uh after a couple of approvals,
[49:37] uh after a couple of approvals, uh end up with a set of issues.
[49:39] uh end up with a set of issues. Now,
[49:41] Now, these issues that we're creating,
[49:43] these issues that we're creating, they're designed to be independently
[49:44] they're designed to be independently grabbable,
[49:46] grabbable, which means that this Kanban board ends
[49:48] which means that this Kanban board ends up looking kind of like this.
[49:51] up looking kind of like this. Where you have
[49:54] Where you have essentially a set of tickets with a
[49:55] essentially a set of tickets with a whole load of independent relationships.
[49:58] whole load of independent relationships. So, this one needs to be done before
[49:59] So, this one needs to be done before this one. This one needs to be done
[50:00] this one. This one needs to be done before this one.
[50:02] before this one. And this one, let's say we got another
[50:04] And this one, let's say we got another one over here.
[50:05] one over here. This one needs to be done before this
[50:06] This one needs to be done before this one.
[50:07] one. This means that you can start to
[50:09] This means that you can start to parallelize.
[50:11] parallelize. You can start to get agents working at
[50:13] You can start to get agents working at the same time on these tasks. Because
[50:16] the same time on these tasks. Because yeah, this one needs to be done first.
[50:18] yeah, this one needs to be done first. And then
[50:20] And then these two
[50:22] these two can be grabbed at the same time by
[50:25] can be grabbed at the same time by independent agents.
[50:26] independent agents. Raise your hand if you've done any kind
[50:28] Raise your hand if you've done any kind of parallelization work with agents.
[50:30] of parallelization work with agents. Okay, cool. So, this allows you
[50:34] Okay, cool. So, this allows you um to turn those plans into to optimally
[50:36] um to turn those plans into to optimally kind of like into a directed acyclic
[50:38] kind of like into a directed acyclic graphs essentially, where you just are
[50:41] graphs essentially, where you just are able to um
[50:42] able to um essentially have three phases here.
[50:45] essentially have three phases here. Where you have
[50:47] Where you have phase one.
[50:49] phase one. Uh let me grab move that.
[50:51] Uh let me grab move that. Uh
[50:53] Uh above this line here,
[50:55] above this line here, you do this one.
[50:57] you do this one. Then phase two, you do the two below it.
[50:59] Then phase two, you do the two below it. And then phase three, you do this third
[51:00] And then phase three, you do this third one and add it onto that.
[51:03] one and add it onto that. And when you think about there could be
[51:05] And when you think about there could be This could This is a relatively simple
[51:06] This could This is a relatively simple plan, but you could have many different
[51:08] plan, but you could have many different plans operating all at once. It means
[51:10] plans operating all at once. It means that you can do really nice
[51:11] that you can do really nice parallelization. And we'll talk more
[51:13] parallelization. And we'll talk more about that in a bit. But that's why I
[51:15] about that in a bit. But that's why I prefer a Kanban board set up like this
[51:18] prefer a Kanban board set up like this to a sequential plan. Because a
[51:20] to a sequential plan. Because a sequential plan can really only be
[51:22] sequential plan can really only be picked up by one agent.
[51:25] picked up by one agent. So, this
[51:26] So, this Where did it go? Over here.
[51:32] Yeah, this plan here This is really only one loop, right?
[51:34] This is really only one loop, right? Only one agent can work on these because
[51:36] Only one agent can work on these because we have numbered phases and they're not
[51:38] we have numbered phases and they're not parallelizable. Does that make sense?
[51:40] parallelizable. Does that make sense? Cool.
[51:42] Cool. So, we've got our issues. Ah, come on.
[51:45] So, we've got our issues. Ah, come on. Stop asking me for I know it's creating
[51:46] Stop asking me for I know it's creating them on GitHub. I really don't want
[51:48] them on GitHub. I really don't want that.
[51:49] that. Oh, no.
[51:51] Oh, no. You fool.
[51:53] You fool. Create them in issues instead.
[51:58] Create them in issues instead. No.
[51:59] No. That's not precise enough.
[52:00] That's not precise enough. Uh you fool.
[52:02] Uh you fool. Create them in local markdown files
[52:05] Create them in local markdown files instead, referencing the local version.
[52:17] So, once we get to this point, we [clears throat] have a bunch of
[52:18] we [clears throat] have a bunch of issues locally
[52:21] issues locally that we can start um looping over and
[52:24] that we can start um looping over and implementing. And it's at this point
[52:27] implementing. And it's at this point that the human leaves the loop.
[52:29] that the human leaves the loop. So, so far
[52:31] So, so far Let me pull up a a proper overview of
[52:33] Let me pull up a a proper overview of this kind of flow that we're exploring
[52:35] this kind of flow that we're exploring here.
[52:43] we have taken an idea. I'll zoom this in a bit for the folks at
[52:44] I'll zoom this in a bit for the folks at the back.
[52:49] And we've grilled ourselves about the idea.
[52:51] idea. We can skip over research and prototype,
[52:53] We can skip over research and prototype, but we turn that into a PRD, into a
[52:55] but we turn that into a PRD, into a destination document.
[52:57] destination document. We then turn that PRD into a Kanban
[52:59] We then turn that PRD into a Kanban board. And all of those steps
[53:02] board. And all of those steps are human reviewed.
[53:04] are human reviewed. And now
[53:05] And now the implementation stage, we step back.
[53:08] the implementation stage, we step back. And we let an agent um work through that
[53:11] And we let an agent um work through that Kanban board or multiple agents work
[53:12] Kanban board or multiple agents work through the Kanban board.
[53:18] Now, what this means is that yeah, we spent a lot of time planning here, but
[53:20] spent a lot of time planning here, but it means that we've queued up a lot of
[53:21] it means that we've queued up a lot of work for the agent. We can think of this
[53:23] work for the agent. We can think of this as kind of like the day shift and the
[53:24] as kind of like the day shift and the night shift. This is the day shift for
[53:27] night shift. This is the day shift for the human, right? Planning everything,
[53:29] the human, right? Planning everything, getting all the all the stuff ready. And
[53:31] getting all the all the stuff ready. And then once we kick it over to the night
[53:33] then once we kick it over to the night shift, the AI can just work AFK. But
[53:35] shift, the AI can just work AFK. But what does that look like?
[53:38] what does that look like? Well,
[53:39] Well, so I'm just going to Oh, yeah. Just
[53:40] so I'm just going to Oh, yeah. Just allow it. It's perfect.
[53:43] allow it. It's perfect. So, this looks like
[53:45] So, this looks like if we head to the next exercise,
[53:48] if we head to the next exercise, which is
[53:53] uh in fact, the last exercise here, running your AFK agent.
[53:55] running your AFK agent. Now,
[53:58] Now, I've called this uh Ralph really cuz it
[54:00] I've called this uh Ralph really cuz it is a it is essentially a Ralph loop.
[54:02] is a it is essentially a Ralph loop. And this prompt here, I want to walk
[54:04] And this prompt here, I want to walk through this really closely.
[54:07] through this really closely. The first thing it's doing here is we're
[54:08] The first thing it's doing here is we're essentially going to run Claude
[54:10] essentially going to run Claude and we're going to basically try to
[54:12] and we're going to basically try to encourage it to work um
[54:14] encourage it to work um completely AFK.
[54:16] completely AFK. I'll show you what the sort of script
[54:18] I'll show you what the sort of script for this looks like in a minute.
[54:19] for this looks like in a minute. But you say, "Okay, local issue files
[54:21] But you say, "Okay, local issue files from issues are provided at the start of
[54:23] from issues are provided at the start of context."
[54:25] context." The way we do that is if you look inside
[54:26] The way we do that is if you look inside once.sh here inside the repo,
[54:29] once.sh here inside the repo, we have
[54:32] we have uh it's essentially just a bash script,
[54:34] uh it's essentially just a bash script, where we grab all of the issues,
[54:37] where we grab all of the issues, um [clears throat] which are inside
[54:38] um [clears throat] which are inside markdown files, and we cat them into a
[54:40] markdown files, and we cat them into a local variable. So, that issues variable
[54:43] local variable. So, that issues variable contains all of the issues that are in
[54:45] contains all of the issues that are in our entire backlog.
[54:48] our entire backlog. Then we grab the last five commits. I'll
[54:50] Then we grab the last five commits. I'll explain why in a minute.
[54:52] explain why in a minute. And then we grab the prompt and we just
[54:54] And then we grab the prompt and we just run Claude code with permission mode
[54:56] run Claude code with permission mode accept edits.
[54:58] accept edits. And then just essentially just pass it
[55:00] And then just essentially just pass it all of the information.
[55:02] all of the information. This is what the implementer looks like.
[55:04] This is what the implementer looks like. So, that's what a very very simple
[55:06] So, that's what a very very simple version of this sort of loop looks like.
[55:08] version of this sort of loop looks like. And of course, this is not a loop. This
[55:10] And of course, this is not a loop. This is just running it once.
[55:12] is just running it once. The loop
[55:13] The loop is in the AFK version up here,
[55:15] is in the AFK version up here, which is uh a fair bit more complicated.
[55:19] which is uh a fair bit more complicated. And the crucial part here is we're
[55:21] And the crucial part here is we're running it in Docker sandbox as well.
[55:23] running it in Docker sandbox as well. So, I I don't want you to install Docker
[55:25] So, I I don't want you to install Docker on your laptops because we're just going
[55:27] on your laptops because we're just going to be like, "You need to download a
[55:28] to be like, "You need to download a special image and we're going to tank
[55:30] special image and we're going to tank the conference Wi-Fi if we do that." So,
[55:32] the conference Wi-Fi if we do that." So, I'm I am going to demo this to you, but
[55:33] I'm I am going to demo this to you, but you um
[55:34] you um won't need to run this yourself, but
[55:36] won't need to run this yourself, but I'll talk through this in a minute. But
[55:37] I'll talk through this in a minute. But essentially, this once loop here,
[55:41] essentially, this once loop here, and ba ba ba ba boom.
[55:47] We're just essentially running one version of the thing that we're going to
[55:49] version of the thing that we're going to loop again and again and again. So, this
[55:50] loop again and again and again. So, this is kind of like the human in the loop
[55:52] is kind of like the human in the loop version. And this is essential. Running
[55:54] version. And this is essential. Running this again and again is essential
[55:55] this again and again is essential because you're going to see what the
[55:57] because you're going to see what the agent does and see how it ends up
[55:59] agent does and see how it ends up working. And any tuning that you need to
[56:01] working. And any tuning that you need to add to the prompt, then you can do that.
[56:04] add to the prompt, then you can do that. Let's go to the prompt.
[56:06] Let's go to the prompt. Um
[56:12] So, local issue files are being passed in.
[56:12] in. You're going to work on the AFK issues
[56:14] You're going to work on the AFK issues only. That makes sense.
[56:16] only. That makes sense. If all AFK tasks are complete, output
[56:18] If all AFK tasks are complete, output this no more tasks thing.
[56:20] this no more tasks thing. And then the next thing, pick the next
[56:22] And then the next thing, pick the next task.
[56:23] task. So,
[56:28] what we're doing here is we're essentially running a backlog or
[56:30] essentially running a backlog or curating a backlog that our AFK agent is
[56:33] curating a backlog that our AFK agent is going to pick up. That's the purpose of
[56:35] going to pick up. That's the purpose of all of these um setups in the beginning.
[56:38] all of these um setups in the beginning. In this uh
[56:40] In this uh all the way to this Kanban board here,
[56:42] all the way to this Kanban board here, we're just essentially creating a
[56:43] we're just essentially creating a backlog of tasks for the night shift to
[56:45] backlog of tasks for the night shift to pick up.
[56:47] pick up. And the night shift, this sort of Ralph
[56:49] And the night shift, this sort of Ralph prompt here, it's got its own idea about
[56:52] prompt here, it's got its own idea about what a good task looks like to next pick
[56:55] what a good task looks like to next pick up.
[56:56] up. I'm I did talk about parallelization. I
[56:58] I'm I did talk about parallelization. I will show you this later, but this is
[56:59] will show you this later, but this is essentially a sequential loop here.
[57:02] essentially a sequential loop here. We're just going to run one coding agent
[57:03] We're just going to run one coding agent at a time. This is a good way to just
[57:05] at a time. This is a good way to just sort of um get your feet wet
[57:07] sort of um get your feet wet essentially.
[57:09] essentially. So, it's prioritizing critical bug
[57:10] So, it's prioritizing critical bug fixes, development infrastructure, then
[57:13] fixes, development infrastructure, then trace bullets,
[57:14] trace bullets, then polishing quick wins and refactors.
[57:17] then polishing quick wins and refactors. And then we just have a very simple kind
[57:19] And then we just have a very simple kind of instruction on how to complete the
[57:21] of instruction on how to complete the task.
[57:22] task. So, we explore the repo.
[57:24] So, we explore the repo. Use TDD to complete the task. I'll get
[57:26] Use TDD to complete the task. I'll get to that later.
[57:27] to that later. And
[57:28] And we then run some feedback loops. So,
[57:30] we then run some feedback loops. So, let's let's just try this and let's just
[57:32] let's let's just try this and let's just see what happens.
[57:33] see what happens. So, good. It's created the issue files.
[57:35] So, good. It's created the issue files. We should be good to go. I'm going to
[57:36] We should be good to go. I'm going to cancel out of this.
[57:38] cancel out of this. I'll clear and I'm going to run
[57:41] I'll clear and I'm going to run uh
[57:42] uh Where is it? Ralph
[57:44] Where is it? Ralph once.sh. And you can feel free if you're
[57:45] once.sh. And you can feel free if you're following along to do the same thing.
[57:48] following along to do the same thing. So, we can see it's just running Claude
[57:50] So, we can see it's just running Claude inside here
[57:52] inside here with the prompt and with all of the
[57:54] with the prompt and with all of the issues that have been passed in.
[57:56] issues that have been passed in. And while it's doing its thing,
[58:01] you probably have some questions about this setup and about the decisions that
[58:03] this setup and about the decisions that I've made to essentially
[58:06] I've made to essentially delegate all of my coding to AI, right?
[58:09] delegate all of my coding to AI, right? So, let's let's do a quick Q&A while
[58:10] So, let's let's do a quick Q&A while it's getting its feet under it.
[58:17] Uh okay. Ba ba ba ba ba. I'm going to just
[58:19] I'm going to just remove those.
[58:25] How do you retain negative decisions, things that you decided against, and
[58:27] things that you decided against, and rationales when persisting the results
[58:28] rationales when persisting the results from the grill me session? Uh great
[58:30] from the grill me session? Uh great question.
[58:32] question. There's a very simple answer, which is
[58:33] There's a very simple answer, which is the in the PRD uh write a PRD section,
[58:38] the in the PRD uh write a PRD section, there is a stuff at the bottom, a
[58:39] there is a stuff at the bottom, a section of the things that are out of
[58:41] section of the things that are out of scope. So, the things we're not going to
[58:42] scope. So, the things we're not going to tackle in this PRD, which is very
[58:44] tackle in this PRD, which is very important for giving a definition of
[58:46] important for giving a definition of done.
[58:48] done. Feel free to ping on the Slido if you've
[58:49] Feel free to ping on the Slido if you've got any more questions.
[58:52] got any more questions. Uh what's my front end workflow? Okay,
[58:54] Uh what's my front end workflow? Okay, it's a great question. I'm going to I'm
[58:55] it's a great question. I'm going to I'm going to answer that in a minute, I
[58:56] going to answer that in a minute, I think.
[58:59] think. How to deal with agents producing more
[59:01] How to deal with agents producing more code that we can review? How to properly
[59:03] code that we can review? How to properly parallelize and use multiple agents
[59:05] parallelize and use multiple agents separate way. Okay, that's That's two
[59:07] separate way. Okay, that's That's two questions there.
[59:08] questions there. Um
[59:10] Um Raise your hand
[59:11] Raise your hand if you feel like you're doing more code
[59:13] if you feel like you're doing more code review now than you used to.
[59:16] review now than you used to. Yeah, definitely.
[59:18] Yeah, definitely. Um
[59:19] Um I don't think there's a way to avoid
[59:21] I don't think there's a way to avoid this.
[59:22] this. If we delegate all of our coding to
[59:26] If we delegate all of our coding to agents,
[59:28] agents, you notice that the implementation here
[59:30] you notice that the implementation here is really the only AFK bit. We then also
[59:32] is really the only AFK bit. We then also need to QA the work and code review the
[59:35] need to QA the work and code review the work, right?
[59:36] work, right? And if we are
[59:38] And if we are running these loops where it's
[59:39] running these loops where it's essentially going to implement four
[59:41] essentially going to implement four issues in one,
[59:42] issues in one, it's hard to pair that with the dictum
[59:46] it's hard to pair that with the dictum that you should keep pull requests small
[59:47] that you should keep pull requests small and self-contained, right? Like small
[59:50] and self-contained, right? Like small self-contained pull requests means
[59:52] self-contained pull requests means you're needing to do fewer loops or
[59:55] you're needing to do fewer loops or shorter loops or something.
[59:57] shorter loops or something. Or maybe you do like a big stack of PRs,
[59:59] Or maybe you do like a big stack of PRs, but that seems horrible as well. That's
[01:00:00] but that seems horrible as well. That's still just more separated code to
[01:00:02] still just more separated code to review. I don't honestly know what the
[01:00:05] review. I don't honestly know what the answer to this yet.
[01:00:06] answer to this yet. I think we just need to be ready to be
[01:00:08] I think we just need to be ready to be doing more code review, essentially.
[01:00:10] doing more code review, essentially. Which is not fun. That's not fun thing
[01:00:12] Which is not fun. That's not fun thing to say. That's not like I don't know. I
[01:00:13] to say. That's not like I don't know. I don't feel good saying that, but I do
[01:00:15] don't feel good saying that, but I do think it's probably the
[01:00:17] think it's probably the the way things are going.
[01:00:19] the way things are going. It's a great question.
[01:00:24] Uh Can we grab a couple of questions from
[01:00:26] Can we grab a couple of questions from the room as well? Let's not We won't do
[01:00:27] the room as well? Let's not We won't do the mic, but uh raise your hand if
[01:00:29] the mic, but uh raise your hand if you've got a question for me
[01:00:29] you've got a question for me immediately.
[01:00:31] immediately. Yeah.
[01:00:32] Yeah. So, the approach is very linear from an
[01:00:35] So, the approach is very linear from an idea to uh QA code review. Of course,
[01:00:38] idea to uh QA code review. Of course, the real world is a lot more messy. So,
[01:00:41] the real world is a lot more messy. So, you have all these ideas that are in
[01:00:42] you have all these ideas that are in parallel and
[01:00:44] parallel and nobody has the full picture. And
[01:00:46] nobody has the full picture. And uh while you're working on something,
[01:00:47] uh while you're working on something, something else comes in as
[01:00:49] something else comes in as a bug. Yeah. How do you deal with the
[01:00:51] a bug. Yeah. How do you deal with the messiness? How do you tighten that
[01:00:52] messiness? How do you tighten that feedback loop? Great question. So, the
[01:00:54] feedback loop? Great question. So, the question was
[01:00:55] question was if this all looks great if you're a solo
[01:00:57] if this all looks great if you're a solo developer, but actually how do you
[01:00:59] developer, but actually how do you implement this in a team? How do you
[01:01:00] implement this in a team? How do you gather team feedback on this?
[01:01:03] gather team feedback on this? And my answer to that is that if you
[01:01:04] And my answer to that is that if you have an idea up there
[01:01:07] have an idea up there and
[01:01:08] and essentially the sort of journey from the
[01:01:10] essentially the sort of journey from the idea to the destination
[01:01:12] idea to the destination is something you need to figure out with
[01:01:14] is something you need to figure out with the team, right? So, all of this stuff
[01:01:16] the team, right? So, all of this stuff up here, this is kind of like team
[01:01:18] up here, this is kind of like team stuff, you know what I mean? This So, if
[01:01:20] stuff, you know what I mean? This So, if you have an idea and you do a grilling
[01:01:22] you have an idea and you do a grilling session on it and you have a question
[01:01:24] session on it and you have a question that you don't know how to answer, then
[01:01:25] that you don't know how to answer, then you need to loop in your team as we
[01:01:27] you need to loop in your team as we described before. Then you might need to
[01:01:29] described before. Then you might need to go, "Okay, like we just need to build a
[01:01:31] go, "Okay, like we just need to build a prototype of this. We need to actually
[01:01:33] prototype of this. We need to actually hash this out. We need something that
[01:01:34] hash this out. We need something that the domain experts can fiddle with."
[01:01:36] the domain experts can fiddle with." Or okay, we might need to integrate a a
[01:01:38] Or okay, we might need to integrate a a third-party library into this. We might
[01:01:40] third-party library into this. We might need to do some research. We might need
[01:01:42] need to do some research. We might need to actually kind of like um
[01:01:44] to actually kind of like um ping this back and forth and find a
[01:01:46] ping this back and forth and find a third-party service that we can get the
[01:01:47] third-party service that we can get the most out of. We might need to go back
[01:01:49] most out of. We might need to go back with the information that we gathered
[01:01:50] with the information that we gathered there to the idea phase. So, all the way
[01:01:53] there to the idea phase. So, all the way up to the sort of PRD in the journey,
[01:01:55] up to the sort of PRD in the journey, that's something you need to involve
[01:01:57] that's something you need to involve your team with. That's something where
[01:01:59] your team with. That's something where these assets are going to be shared over
[01:02:02] these assets are going to be shared over and you're going to have requests for
[01:02:03] and you're going to have requests for comments on them and that that loop is
[01:02:06] comments on them and that that loop is going to just keep grinding and grinding
[01:02:07] going to just keep grinding and grinding until you figure out where you're going.
[01:02:09] until you figure out where you're going. Once you figure out where you're going,
[01:02:11] Once you figure out where you're going, then you can start doing the Kanban
[01:02:12] then you can start doing the Kanban board implementation. But this is
[01:02:14] board implementation. But this is essentially super arguable and the
[01:02:16] essentially super arguable and the you'll be bouncing back and forth
[01:02:18] you'll be bouncing back and forth between the phases. Does that make
[01:02:19] between the phases. Does that make sense? Yeah.
[01:02:20] sense? Yeah. Would you not need a
[01:02:21] Would you not need a PRD for your prototype?
[01:02:23] PRD for your prototype? Say again, sorry. Would you not want to
[01:02:25] Say again, sorry. Would you not want to have a PRD for your prototype? The
[01:02:26] have a PRD for your prototype? The question was, do you want to go through
[01:02:28] question was, do you want to go through this whole session just to sort of
[01:02:29] this whole session just to sort of create a prototype? You don't need a PRD
[01:02:31] create a prototype? You don't need a PRD for your prototype as well. Let's just
[01:02:33] for your prototype as well. Let's just quickly talk about prototypes for a
[01:02:34] quickly talk about prototypes for a second.
[01:02:35] second. Um there was a question about how do you
[01:02:37] Um there was a question about how do you make this work for front end?
[01:02:39] make this work for front end? Like how do you cuz front end is like
[01:02:42] Like how do you cuz front end is like really sensitive to human eyes. You need
[01:02:44] really sensitive to human eyes. You need human eyes looking at the front end all
[01:02:45] human eyes looking at the front end all the time to make sure that it looks
[01:02:47] the time to make sure that it looks good.
[01:02:48] good. AI doesn't really have any eyes. It can
[01:02:51] AI doesn't really have any eyes. It can look at code,
[01:02:53] look at code, but it front end is multimodal.
[01:02:55] but it front end is multimodal. And so my experiences with trying to
[01:02:58] And so my experiences with trying to plug AI into um let's say agent browser
[01:03:02] plug AI into um let's say agent browser or Playwright MCP to give it
[01:03:05] or Playwright MCP to give it You can give it tools to allow it to
[01:03:06] You can give it tools to allow it to look through a front end and sort of
[01:03:08] look through a front end and sort of look at images, but in my experience the
[01:03:10] look at images, but in my experience the um it's not very good at that yet and it
[01:03:12] um it's not very good at that yet and it can't create a nice front end in a
[01:03:15] can't create a nice front end in a mature code base. It can sort of spit
[01:03:17] mature code base. It can sort of spit one out. But what it can do is you say,
[01:03:20] one out. But what it can do is you say, "Okay, uh I want some ideas on how uh
[01:03:23] "Okay, uh I want some ideas on how uh this front end might look. Give me three
[01:03:25] this front end might look. Give me three prototypes um that I can click between
[01:03:27] prototypes um that I can click between in a throwaway uh
[01:03:30] in a throwaway uh throwaway route that I can decide which
[01:03:32] throwaway route that I can decide which one looks best." And you take the asset
[01:03:34] one looks best." And you take the asset of that prototype and you then feed it
[01:03:35] of that prototype and you then feed it back into the grilling session or you
[01:03:37] back into the grilling session or you get feedback on it, blah blah blah blah
[01:03:39] get feedback on it, blah blah blah blah blah.
[01:03:39] blah. Answer your question kind of thing?
[01:03:41] Answer your question kind of thing? The prototype is just, you know, it's
[01:03:43] The prototype is just, you know, it's messy. It's supposed to give you
[01:03:44] messy. It's supposed to give you feedback earlier on the process.
[01:03:46] feedback earlier on the process. So, that's a great way of working with
[01:03:47] So, that's a great way of working with front end code, great way of looking at
[01:03:49] front end code, great way of looking at software architecture in general. Let's
[01:03:50] software architecture in general. Let's go one more question here. Yes.
[01:03:52] go one more question here. Yes. >> [clears throat]
[01:03:53] >> [clears throat] >> In your system, how do you integrate
[01:03:54] >> In your system, how do you integrate respecting an architecture and design
[01:03:57] respecting an architecture and design with API contracts and fitting with your
[01:04:00] with API contracts and fitting with your larger system?
[01:04:01] larger system? Uh security constraints, all kinds of
[01:04:04] Uh security constraints, all kinds of constraints like that.
[01:04:05] constraints like that. Yeah.
[01:04:06] Yeah. There's a lot in that question. The
[01:04:07] There's a lot in that question. The question was, how do you conform with
[01:04:09] question was, how do you conform with existing architecture? How do you do um
[01:04:12] existing architecture? How do you do um how do you make it conform to the code
[01:04:13] how do you make it conform to the code standards
[01:04:15] standards like of your code base or Yeah, the
[01:04:17] like of your code base or Yeah, the architecture design APIs, Yeah. security
[01:04:20] architecture design APIs, Yeah. security rules that constrain your design. Yeah.
[01:04:23] rules that constrain your design. Yeah. I'm going to answer that in a bit.
[01:04:25] I'm going to answer that in a bit. That's okay.
[01:04:26] That's okay. So, hopefully we have started to get
[01:04:29] So, hopefully we have started to get some stuff cook cooking. Uh it's just
[01:04:33] some stuff cook cooking. Uh it's just pinging on the explore phase here.
[01:04:39] Hmm, tempted to just start running it AFK.
[01:04:41] AFK. Maybe I will, maybe I won't.
[01:04:43] Maybe I will, maybe I won't. Um
[01:04:45] Um What it's essentially doing is it's
[01:04:46] What it's essentially doing is it's exploring the repo. It's going to then
[01:04:47] exploring the repo. It's going to then start implementing based on what we
[01:04:48] start implementing based on what we wanted.
[01:04:50] wanted. Let's actually have one more question
[01:04:51] Let's actually have one more question just while it's running. Yeah.
[01:04:52] just while it's running. Yeah. Why not AI
[01:04:55] Why not AI QA everything
[01:05:00] Yeah. So, the question was, why do you not get
[01:05:03] So, the question was, why do you not get AI to QA?
[01:05:06] AI to QA? AI to QA.
[01:05:07] AI to QA. I just got uh jargon overload for a
[01:05:09] I just got uh jargon overload for a second. Um why do you not get AI to uh
[01:05:12] second. Um why do you not get AI to uh test its own code? Now, of course, you
[01:05:14] test its own code? Now, of course, you absolutely can. And I think while it's
[01:05:16] absolutely can. And I think while it's doing while it's cooking here,
[01:05:19] doing while it's cooking here, okay, it's got a clear picture of the
[01:05:20] okay, it's got a clear picture of the code base. It's assessing the issues.
[01:05:22] code base. It's assessing the issues. It's doing issue 02 as the next task.
[01:05:25] It's doing issue 02 as the next task. I'm again going to show you that in a
[01:05:26] I'm again going to show you that in a bit, I think. The sort of uh cuz you
[01:05:28] bit, I think. The sort of uh cuz you definitely should do an automated review
[01:05:31] definitely should do an automated review step as part of implementation.
[01:05:33] step as part of implementation. So, you have your implementation, you
[01:05:36] So, you have your implementation, you should then, because tokens are pretty
[01:05:37] should then, because tokens are pretty cheap and AI is actually really good at
[01:05:39] cheap and AI is actually really good at reviewing stuff, you should get it to
[01:05:40] reviewing stuff, you should get it to review its own code before you then QA
[01:05:43] review its own code before you then QA it.
[01:05:43] it. I found that that catches a ton of
[01:05:45] I found that that catches a ton of different bugs
[01:05:46] different bugs and
[01:05:48] and the way that works is I will just do a
[01:05:50] the way that works is I will just do a little diagram is if you have, let's
[01:05:53] little diagram is if you have, let's say, an implementation that sort of like
[01:05:55] say, an implementation that sort of like used up a bunch of tokens in the smart
[01:05:57] used up a bunch of tokens in the smart zone,
[01:05:58] zone, if you get it to sort of try to
[01:06:00] if you get it to sort of try to do its reviewing, it's going to be doing
[01:06:02] do its reviewing, it's going to be doing the reviewing in the dumb zone.
[01:06:05] the reviewing in the dumb zone. And so, the reviewer will be dumber than
[01:06:07] And so, the reviewer will be dumber than the thing that actually implemented it.
[01:06:08] the thing that actually implemented it. If we imagine this is the
[01:06:11] If we imagine this is the uh let's be consistent. That's the
[01:06:13] uh let's be consistent. That's the review.
[01:06:14] review. That's the implementation.
[01:06:16] That's the implementation. Whereas if you clear the context,
[01:06:21] then you're essentially going to be able to
[01:06:22] you're essentially going to be able to just review in the smart zone, which is
[01:06:24] just review in the smart zone, which is where you want to be.
[01:06:29] Let's see how our implementation is doing.
[01:06:30] doing. Okay, good. It's generating a migration.
[01:06:31] Okay, good. It's generating a migration. That looks pretty nice.
[01:06:33] That looks pretty nice. We're getting some code spitting out.
[01:06:39] And while I'm sort of like Aha, here we go.
[01:06:42] while I'm sort of like Aha, here we go. TDD.
[01:06:44] TDD. Let's talk about TDD and then I think
[01:06:46] Let's talk about TDD and then I think we'll have a little another little
[01:06:47] we'll have a little another little break.
[01:06:48] break. TDD I found is absolutely essential for
[01:06:51] TDD I found is absolutely essential for getting the most out of agents. Uh raise
[01:06:53] getting the most out of agents. Uh raise your hand if uh you know what TDD is.
[01:06:56] your hand if uh you know what TDD is. Cool. Okay. TDD is test-driven
[01:06:58] Cool. Okay. TDD is test-driven development. What it's essentially doing
[01:07:01] development. What it's essentially doing is it's doing a something called red
[01:07:03] is it's doing a something called red green refactor. And if you look in the
[01:07:05] green refactor. And if you look in the code base, you'll be able to find a um a
[01:07:08] code base, you'll be able to find a um a skill which really describes how to do
[01:07:11] skill which really describes how to do red green refactor and teaches the AI
[01:07:12] red green refactor and teaches the AI how to do it.
[01:07:14] how to do it. So, what it's doing is it's writing a
[01:07:16] So, what it's doing is it's writing a failing test first. So, it's saying,
[01:07:19] failing test first. So, it's saying, "Okay, I've broken down the idea of what
[01:07:21] "Okay, I've broken down the idea of what I'm doing and I'm just going to write a
[01:07:23] I'm doing and I'm just going to write a single test that fails and then I need
[01:07:26] single test that fails and then I need to make the implementation pass."
[01:07:28] to make the implementation pass." I have found that
[01:07:30] I have found that first of all, this adds tests to the
[01:07:32] first of all, this adds tests to the code base and these this tends to add
[01:07:34] code base and these this tends to add good tests to the code base. And so,
[01:07:36] good tests to the code base. And so, we've got this kind of gamification
[01:07:37] we've got this kind of gamification service.
[01:07:38] service. It looks like it's
[01:07:40] It looks like it's using some existing stuff to create a
[01:07:42] using some existing stuff to create a test database. Test fails because the
[01:07:44] test database. Test fails because the module doesn't exist yet. Okay, we've
[01:07:46] module doesn't exist yet. Okay, we've confirmed red. And then it goes and
[01:07:49] confirmed red. And then it goes and hopefully runs it and it passes.
[01:07:52] hopefully runs it and it passes. I found that uh raise your hand if
[01:07:54] I found that uh raise your hand if you've ever had AI write bad tests.
[01:07:58] you've ever had AI write bad tests. Yeah.
[01:07:59] Yeah. It tends to try to cheat at the tests
[01:08:01] It tends to try to cheat at the tests because it's sort of doing it in layers.
[01:08:03] because it's sort of doing it in layers. It will do the entire implementation and
[01:08:06] It will do the entire implementation and then it will do the entire test layer
[01:08:07] then it will do the entire test layer just below it.
[01:08:09] just below it. Uh
[01:08:09] Uh I'm just going to say yes, you're
[01:08:10] I'm just going to say yes, you're allowed to use NPX V test.
[01:08:13] allowed to use NPX V test. And using this technique, it generally
[01:08:16] And using this technique, it generally is a lot harder to
[01:08:18] is a lot harder to cheat because it's
[01:08:20] cheat because it's sort of instrumenting the code before
[01:08:22] sort of instrumenting the code before it's then writing the code. So, I find
[01:08:24] it's then writing the code. So, I find that TDD is so so good for places where
[01:08:28] that TDD is so so good for places where you can pull it off. In fact, it's so
[01:08:30] you can pull it off. In fact, it's so good that I sort of warped my whole uh
[01:08:32] good that I sort of warped my whole uh technique around getting TDD to work
[01:08:34] technique around getting TDD to work better.
[01:08:36] better. I can see some dripping eyes. It is so
[01:08:37] I can see some dripping eyes. It is so hot in here.
[01:08:39] hot in here. You can't imagine how hot it is up here.
[01:08:40] You can't imagine how hot it is up here. Let's take another 5-minute comfort
[01:08:41] Let's take another 5-minute comfort break. Let's come back at quarter to, I
[01:08:45] break. Let's come back at quarter to, I think. Have a nice generous one.
[01:08:48] think. Have a nice generous one. And we'll be back in about 6 7 minutes
[01:08:50] And we'll be back in about 6 7 minutes and I'll talk about how
[01:08:52] and I'll talk about how uh I think about modules, think about
[01:08:54] uh I think about modules, think about constructing a code base to make this
[01:08:56] constructing a code base to make this possible.
[01:08:57] possible. I've just been sort of fiddling with the
[01:08:59] I've just been sort of fiddling with the AI here and we have ended up with some
[01:09:01] AI here and we have ended up with some with a commit.
[01:09:02] with a commit. So, we have something to test. Issue
[01:09:04] So, we have something to test. Issue number two is complete. Here's what was
[01:09:06] number two is complete. Here's what was done.
[01:09:07] done. This is kind of what it looks like when
[01:09:09] This is kind of what it looks like when a Ralph loop completes is you end up
[01:09:11] a Ralph loop completes is you end up with a little summary.
[01:09:12] with a little summary. Um and we have now something we can QA.
[01:09:15] Um and we have now something we can QA. Because we did the feedback loops
[01:09:17] Because we did the feedback loops because we did the trace bullets because
[01:09:19] because we did the trace bullets because we were uh said, "Okay, give us
[01:09:21] we were uh said, "Okay, give us something reviewable at the end of
[01:09:22] something reviewable at the end of this." We can immediately go and QA it.
[01:09:25] this." We can immediately go and QA it. Now, there's nothing uh less exciting
[01:09:27] Now, there's nothing uh less exciting than watching someone else QA something.
[01:09:29] than watching someone else QA something. But, hopefully we can have a little
[01:09:30] But, hopefully we can have a little play.
[01:09:31] play. Let's just check that it uh works at
[01:09:34] Let's just check that it uh works at all.
[01:09:35] all. In fact, before I go there, I just want
[01:09:36] In fact, before I go there, I just want to sort of work through what just
[01:09:39] to sort of work through what just happened.
[01:09:40] happened. Which is we see that it's created some
[01:09:42] Which is we see that it's created some stuff on the dashboard.
[01:09:45] stuff on the dashboard. And it then ran the feedback loops. So,
[01:09:47] And it then ran the feedback loops. So, it then ran the tests and the types.
[01:09:51] it then ran the tests and the types. Now, TDD is obviously really important.
[01:09:54] Now, TDD is obviously really important. And it's really important because these
[01:09:56] And it's really important because these feedback loops are essential to AI,
[01:09:59] feedback loops are essential to AI, essential to get AI to produce anything
[01:10:01] essential to get AI to produce anything reasonable.
[01:10:02] reasonable. Because without this, AI is totally
[01:10:04] Because without this, AI is totally coding blind, right?
[01:10:06] coding blind, right? You have to have to um
[01:10:09] You have to have to um If if your code base doesn't have
[01:10:11] If if your code base doesn't have feedback loops, you're never ever ever
[01:10:14] feedback loops, you're never ever ever going to get decent AI decent output out
[01:10:16] going to get decent AI decent output out of AI. And often what you'll find is
[01:10:18] of AI. And often what you'll find is that the quality of your feedback loops
[01:10:22] that the quality of your feedback loops influences how good your AI can code,
[01:10:24] influences how good your AI can code, essentially. That is the ceiling. So, if
[01:10:27] essentially. That is the ceiling. So, if you're getting bad outputs from your AI,
[01:10:28] you're getting bad outputs from your AI, you often need to increase the quality
[01:10:31] you often need to increase the quality of your feedback loops.
[01:10:32] of your feedback loops. We'll talk about how to do that in a
[01:10:34] We'll talk about how to do that in a minute.
[01:10:36] minute. Now, so it ran NPM run test, NPM run
[01:10:39] Now, so it ran NPM run test, NPM run type check. It got one type error, and
[01:10:41] type check. It got one type error, and it needed to fix it with a nice bit of
[01:10:44] it needed to fix it with a nice bit of TypeScript magic. Very good. Yeah, type
[01:10:46] TypeScript magic. Very good. Yeah, type of level threshold number. Okay.
[01:10:49] of level threshold number. Okay. Uh you see why I stopped teaching
[01:10:50] Uh you see why I stopped teaching TypeScript cuz just AI knows everything
[01:10:52] TypeScript cuz just AI knows everything now.
[01:10:53] now. Um
[01:10:55] Um So, and it ran the tests, and it passed,
[01:10:57] So, and it ran the tests, and it passed, and it's looking good. So, we now end up
[01:10:59] and it's looking good. So, we now end up with 284 tests in this repo. Pretty
[01:11:01] with 284 tests in this repo. Pretty good.
[01:11:04] good. I I do find uh front end really hard to
[01:11:06] I I do find uh front end really hard to test here. We're essentially just
[01:11:07] test here. We're essentially just testing the service. So, we've created a
[01:11:10] testing the service. So, we've created a gamification service, if we look up
[01:11:12] gamification service, if we look up here.
[01:11:13] here. And then we have a test for that
[01:11:14] And then we have a test for that service. You can see that the service
[01:11:16] service. You can see that the service and the test itself.
[01:11:18] and the test itself. Now, if I was doing code review here, I
[01:11:19] Now, if I was doing code review here, I would then go to I would first go to
[01:11:21] would then go to I would first go to review the tests, make sure the tests
[01:11:24] review the tests, make sure the tests were testing reasonable things,
[01:11:26] were testing reasonable things, and then go and kind of review the code
[01:11:28] and then go and kind of review the code itself just to make sure that it's it's
[01:11:30] itself just to make sure that it's it's not doing anything too crazy, right?
[01:11:33] not doing anything too crazy, right? The essential thing is I need to
[01:11:34] The essential thing is I need to actually um look at the dashboard.
[01:11:37] actually um look at the dashboard. I'm going to log in as a student.
[01:11:40] I'm going to log in as a student. Oh, if it'll let me. Maybe it won't let
[01:11:42] Oh, if it'll let me. Maybe it won't let me.
[01:11:43] me. Come on, son. There we go.
[01:11:45] Come on, son. There we go. Let's log in as Emma Wilson.
[01:11:47] Let's log in as Emma Wilson. Head into courses.
[01:11:49] Head into courses. Uh let's say I've got an introduction to
[01:11:51] Uh let's say I've got an introduction to TypeScript.
[01:11:53] TypeScript. Continue learning.
[01:11:55] Continue learning. Uh yes, I completed this lesson.
[01:11:58] Uh yes, I completed this lesson. And something went wrong. I imagine it's
[01:12:00] And something went wrong. I imagine it's because I don't have
[01:12:03] because I don't have Uh SQLite error. I don't have the right
[01:12:05] Uh SQLite error. I don't have the right table. So, I need a table point events.
[01:12:08] table. So, I need a table point events. Point events is a strange table name.
[01:12:10] Point events is a strange table name. I'm not sure quite what it was thinking
[01:12:11] I'm not sure quite what it was thinking there.
[01:12:12] there. Uh let's suspend. Let's run uh NPM DB
[01:12:16] Uh let's suspend. Let's run uh NPM DB migrate.
[01:12:17] migrate. Push, I think.
[01:12:19] Push, I think. I can't remember which one it was.
[01:12:22] I can't remember which one it was. But, you kind of get the idea, right? I
[01:12:23] But, you kind of get the idea, right? I I'm not going to subject you to uh
[01:12:25] I'm not going to subject you to uh watching me do QA because it's so dull.
[01:12:28] watching me do QA because it's so dull. Um but at this point, I would
[01:12:29] Um but at this point, I would essentially go back in. I would um
[01:12:32] essentially go back in. I would um Let me open the project back up.
[01:12:35] Let me open the project back up. Uh and I would
[01:12:37] Uh and I would This This is a crucial moment, um and
[01:12:39] This This is a crucial moment, um and it's so important to um
[01:12:42] it's so important to um QA it manually here because QA Oh, dear,
[01:12:45] QA it manually here because QA Oh, dear, oh dear. What's going wrong? There we
[01:12:46] oh dear. What's going wrong? There we go.
[01:12:47] go. QA is how I then um impose my
[01:12:52] QA is how I then um impose my uh
[01:12:53] uh opinions back onto the code base, how I
[01:12:55] opinions back onto the code base, how I impose my taste.
[01:12:56] impose my taste. What you'll often find is that um there
[01:12:59] What you'll often find is that um there are teams out there who are trying to
[01:13:00] are teams out there who are trying to automate everything, like every part of
[01:13:02] automate everything, like every part of this process. And they will tend to
[01:13:06] this process. And they will tend to uh if you try to like automate the sort
[01:13:09] uh if you try to like automate the sort of creation of the idea, automate
[01:13:11] of creation of the idea, automate uh the QA, automate the research,
[01:13:13] uh the QA, automate the research, automate the prototype, you end up with
[01:13:16] automate the prototype, you end up with uh apps that I feel just lack taste
[01:13:19] uh apps that I feel just lack taste and are bad.
[01:13:22] and are bad. Maybe they just don't work, or they they
[01:13:24] Maybe they just don't work, or they they don't even work as intended, or there's
[01:13:26] don't even work as intended, or there's just no
[01:13:27] just no You need a human touch when you're
[01:13:28] You need a human touch when you're building this stuff because without
[01:13:30] building this stuff because without that, you just end up with slop.
[01:13:32] that, you just end up with slop. And we are not producing slop here.
[01:13:34] And we are not producing slop here. We're trying to produce high-quality
[01:13:35] We're trying to produce high-quality stuff, and so that's what the QA is for.
[01:13:38] stuff, and so that's what the QA is for. Mhm.
[01:13:39] Mhm. So, I'm going to do two things in this
[01:13:42] So, I'm going to do two things in this final section.
[01:13:43] final section. Which is I'm going to first tell you how
[01:13:45] Which is I'm going to first tell you how to
[01:13:47] to There's probably a question in your mind
[01:13:48] There's probably a question in your mind here, which is let's say I have a code
[01:13:50] here, which is let's say I have a code base that I'm working on.
[01:13:52] base that I'm working on. And it's a bad code base. It's a code
[01:13:55] And it's a bad code base. It's a code base that's like really complicated, uh
[01:13:58] base that's like really complicated, uh that AI just never does good work in,
[01:14:00] that AI just never does good work in, and maybe actually most humans that go
[01:14:01] and maybe actually most humans that go into that code base don't do good work.
[01:14:03] into that code base don't do good work. How what How do I improve that code
[01:14:06] How what How do I improve that code base?
[01:14:07] base? And the second thing is I'll show you my
[01:14:08] And the second thing is I'll show you my setup for parallelization.
[01:14:10] setup for parallelization. So, let's go with um
[01:14:12] So, let's go with um bad code first.
[01:14:15] bad code first. Now,
[01:14:16] Now, where is it? Where's the diagram? Here
[01:14:17] where is it? Where's the diagram? Here it is.
[01:14:22] In his book, um The Philosophy of Software Design,
[01:14:23] Software Design, John Ousterhout talks about
[01:14:26] John Ousterhout talks about the ideal type of module.
[01:14:29] the ideal type of module. And let's imagine that you have a code
[01:14:31] And let's imagine that you have a code base that looks like this. Each of these
[01:14:33] base that looks like this. Each of these uh blocks here are individual files.
[01:14:35] uh blocks here are individual files. And these files
[01:14:37] And these files export things from them. You know, they
[01:14:38] export things from them. You know, they have um things that you pull from the
[01:14:41] have um things that you pull from the files that you then use in other things.
[01:14:42] files that you then use in other things. And so, you might have these weird
[01:14:44] And so, you might have these weird dependencies where this file over here
[01:14:46] dependencies where this file over here might rely on this file, or might rely
[01:14:48] might rely on this file, or might rely on that file, for instance.
[01:14:50] on that file, for instance. Now, if these files are small and they
[01:14:52] Now, if these files are small and they don't kind of ex- like
[01:14:54] don't kind of ex- like export many things, then John Ousterhout
[01:14:56] export many things, then John Ousterhout would call these shallow modules,
[01:14:58] would call these shallow modules, essentially. Where they're not very um
[01:15:02] essentially. Where they're not very um They kind of look like uh this, if I No,
[01:15:05] They kind of look like uh this, if I No, actually no. I can't can't make a good
[01:15:07] actually no. I can't can't make a good diagram of it.
[01:15:08] diagram of it. They're essentially lots and lots of
[01:15:09] They're essentially lots and lots of small chunks. Now, this is hard for the
[01:15:11] small chunks. Now, this is hard for the AI to navigate
[01:15:13] AI to navigate cuz it doesn't really understand the
[01:15:14] cuz it doesn't really understand the dependencies between everything. It
[01:15:16] dependencies between everything. It can't work out where everything is. You
[01:15:17] can't work out where everything is. You know, it has to sort of manually track
[01:15:19] know, it has to sort of manually track through the entire graph and go, "Okay,
[01:15:21] through the entire graph and go, "Okay, this relies on this. This one relies on
[01:15:23] this relies on this. This one relies on this one. This one relies on this one."
[01:15:26] this one. This one relies on this one." And it's then also hard to test this, as
[01:15:28] And it's then also hard to test this, as well, because where do you draw your
[01:15:29] well, because where do you draw your test boundaries here?
[01:15:31] test boundaries here? Do you test each module individually?
[01:15:37] Like just literally draw a test boundary No, don't do that.
[01:15:39] No, don't do that. Around this one?
[01:15:40] Around this one? And then maybe another test boundary
[01:15:42] And then maybe another test boundary around the next one, and then the next
[01:15:44] around the next one, and then the next one?
[01:15:46] one? Or should you sort of do big groups of
[01:15:48] Or should you sort of do big groups of it? Should you say, "Okay, we're going
[01:15:50] it? Should you say, "Okay, we're going to test all of these related modules
[01:15:52] to test all of these related modules together, and just sort of, you know,
[01:15:54] together, and just sort of, you know, hope and pray that they work."
[01:15:57] hope and pray that they work." Now,
[01:15:58] Now, >> [sighs]
[01:15:59] >> [sighs] >> this means that if I think that bad
[01:16:01] >> this means that if I think that bad tests mostly look like that, where the
[01:16:04] tests mostly look like that, where the AI essentially tries to sort of wrap
[01:16:06] AI essentially tries to sort of wrap every tiny function in its own test
[01:16:09] every tiny function in its own test boundary, and then just sort of test
[01:16:10] boundary, and then just sort of test that those individually work. But, what
[01:16:13] that those individually work. But, what that does is it means that when, let's
[01:16:15] that does is it means that when, let's say, this module over here calls those
[01:16:17] say, this module over here calls those two,
[01:16:19] two, so it depends on both of these, then
[01:16:22] so it depends on both of these, then this module might miss order the
[01:16:23] this module might miss order the functions, or there might be sort of
[01:16:25] functions, or there might be sort of stuff inside that poor module that's
[01:16:27] stuff inside that poor module that's worth testing on its own. And if you
[01:16:29] worth testing on its own. And if you then wrap this in a test boundary, what
[01:16:31] then wrap this in a test boundary, what do you do? Do you mock the other two
[01:16:33] do you do? Do you mock the other two modules? How does that work?
[01:16:40] So, actually figuring out how to um build a code base that is easy to test
[01:16:44] build a code base that is easy to test is essential here. Because if our code
[01:16:46] is essential here. Because if our code base is easy to test, then our code our
[01:16:49] base is easy to test, then our code our feedback loops are going to be better,
[01:16:50] feedback loops are going to be better, and the AI is going to do better work in
[01:16:52] and the AI is going to do better work in our code base. Does that make sense?
[01:16:54] our code base. Does that make sense? So, what does a good code base looks
[01:16:56] So, what does a good code base looks like look like?
[01:16:58] like look like? Well, not like that.
[01:17:00] Well, not like that. It looks like this.
[01:17:03] It looks like this. Where you have
[01:17:05] Where you have what John Ousterhout calls deep modules.
[01:17:08] what John Ousterhout calls deep modules. Modules that have a little interface on
[01:17:10] Modules that have a little interface on there that expose a small, simple
[01:17:12] there that expose a small, simple interface that have a lot of
[01:17:14] interface that have a lot of functionality inside them.
[01:17:16] functionality inside them. Now,
[01:17:18] Now, what this means is that these are easy
[01:17:20] what this means is that these are easy to test cuz you just Let's say that
[01:17:22] to test cuz you just Let's say that there's a dependency between this one
[01:17:24] there's a dependency between this one and this one.
[01:17:26] and this one. My arrow working? Yeah, there we go.
[01:17:29] My arrow working? Yeah, there we go. Then,
[01:17:31] Then, what you do is you just wrap a big test
[01:17:33] what you do is you just wrap a big test boundary around that one module, around
[01:17:34] boundary around that one module, around this one up here,
[01:17:36] this one up here, and you're going to catch a lot of good
[01:17:38] and you're going to catch a lot of good stuff.
[01:17:40] stuff. Because there's lots of functionality
[01:17:42] Because there's lots of functionality that you're testing, and really the
[01:17:44] that you're testing, and really the caller, the person calling the module,
[01:17:46] caller, the person calling the module, is going to have a simple interface to
[01:17:47] is going to have a simple interface to work from. So, it's not not too tricky.
[01:17:50] work from. So, it's not not too tricky. That makes sense? Deep modules versus
[01:17:52] That makes sense? Deep modules versus shallow modules. This is good.
[01:17:54] shallow modules. This is good. This shallow version is bad. And what I
[01:17:57] This shallow version is bad. And what I find is that unaided
[01:18:00] find is that unaided um or if you don't
[01:18:03] um or if you don't uh
[01:18:04] uh if you don't watch AI carefully, it's
[01:18:06] if you don't watch AI carefully, it's going to produce a code base that looks
[01:18:07] going to produce a code base that looks like this.
[01:18:08] like this. So, you need to be really, really
[01:18:10] So, you need to be really, really careful when you're directing it.
[01:18:12] careful when you're directing it. And that's why, too,
[01:18:13] And that's why, too, is that if we look inside the PRD,
[01:18:16] is that if we look inside the PRD, uh where is the PRD gone? It's inside
[01:18:18] uh where is the PRD gone? It's inside the issues. It's inside the gamification
[01:18:20] the issues. It's inside the gamification system.
[01:18:22] system. Uh not found. Of course, it's not. Here
[01:18:23] Uh not found. Of course, it's not. Here it is.
[01:18:25] it is. Then I have
[01:18:27] Then I have uh inside here
[01:18:30] uh inside here data model the modules.
[01:18:32] data model the modules. So, it's specifically saying, "Okay,
[01:18:34] So, it's specifically saying, "Okay, this gamification service is a new deep
[01:18:37] this gamification service is a new deep module, which we're going to test
[01:18:38] module, which we're going to test around.
[01:18:39] around. It's going to have this particular
[01:18:41] It's going to have this particular interface.
[01:18:42] interface. And it's going to have um Okay, we're
[01:18:45] And it's going to have um Okay, we're modifying the progress service, too.
[01:18:47] modifying the progress service, too. We're modifying the lesson route. We're
[01:18:48] We're modifying the lesson route. We're modifying the dashboard route, etc. So,
[01:18:50] modifying the dashboard route, etc. So, it's I'm being really specific about the
[01:18:52] it's I'm being really specific about the modules that I'm editing, and I'm making
[01:18:54] modules that I'm editing, and I'm making sure that I keep that module map in my
[01:18:56] sure that I keep that module map in my mind at all times, throughout the
[01:18:58] mind at all times, throughout the planning, and then throughout the
[01:18:59] planning, and then throughout the implementation. Does that make sense?
[01:19:02] implementation. Does that make sense? Very, very useful.
[01:19:03] Very, very useful. It's useful for one other reason, too.
[01:19:05] It's useful for one other reason, too. Not only does it make your app more
[01:19:06] Not only does it make your app more testable,
[01:19:07] testable, but you get to do a little mental trick.
[01:19:13] And I'm going to refill my water while you wait for what that is.
[01:19:20] Uh let me Let me get a question from you guys. So,
[01:19:21] Let me get a question from you guys. So, raise your hands if you feel like
[01:19:29] Uh if you feel like you're working harder than ever before with AI.
[01:19:32] harder than ever before with AI. Yeah.
[01:19:33] Yeah. Uh raise your hands if you feel like you
[01:19:36] Uh raise your hands if you feel like you know your code base less well
[01:19:38] know your code base less well than you used to.
[01:19:40] than you used to. Yeah.
[01:19:45] This is a real thing. Um because we're moving fast, because we're
[01:19:47] because we're moving fast, because we're delegating more things, we end up losing
[01:19:50] delegating more things, we end up losing a sense of our code base. And if we lose
[01:19:52] a sense of our code base. And if we lose the sense of our code base, we're not
[01:19:55] the sense of our code base, we're not going to be able to improve it, and
[01:19:56] going to be able to improve it, and we're essentially delegating the shape
[01:19:58] we're essentially delegating the shape of it to AI.
[01:19:59] of it to AI. I [snorts] don't think that's good. But
[01:20:01] I [snorts] don't think that's good. But then how do we
[01:20:03] then how do we how do we make it so that we can move
[01:20:05] how do we make it so that we can move fast while still keeping enough space in
[01:20:07] fast while still keeping enough space in our brains?
[01:20:08] our brains? I think that this is a way to do it.
[01:20:10] I think that this is a way to do it. Because what you're doing here is not
[01:20:12] Because what you're doing here is not only are you thinking about creating big
[01:20:15] only are you thinking about creating big shapes in your code base, big services.
[01:20:19] shapes in your code base, big services. What I think you should do is
[01:20:22] What I think you should do is design the interface for these modules,
[01:20:24] design the interface for these modules, but then delegate the implementation.
[01:20:27] but then delegate the implementation. In other words, these modules can become
[01:20:29] In other words, these modules can become like gray boxes, where you just need to
[01:20:31] like gray boxes, where you just need to know the shape of them, you need to know
[01:20:33] know the shape of them, you need to know what they do, and it's sort of how they
[01:20:34] what they do, and it's sort of how they behave, but you can delegate the
[01:20:36] behave, but you can delegate the implementation of those modules. I found
[01:20:39] implementation of those modules. I found this is really nice. I don't necessarily
[01:20:40] this is really nice. I don't necessarily need to code review everything inside
[01:20:42] need to code review everything inside that module. I don't necessarily need to
[01:20:44] that module. I don't necessarily need to know everything of what it's doing. I
[01:20:46] know everything of what it's doing. I just need to know that it behaves a
[01:20:47] just need to know that it behaves a certain way under certain conditions,
[01:20:49] certain way under certain conditions, and that it does its thing. So, it's
[01:20:51] and that it does its thing. So, it's kind of like
[01:20:52] kind of like okay, I've got a big overview of my code
[01:20:54] okay, I've got a big overview of my code base, and I understand kind of the
[01:20:56] base, and I understand kind of the shapes inside it, understand what the
[01:20:57] shapes inside it, understand what the interfaces all do, but
[01:21:00] interfaces all do, but I can delegate what's inside.
[01:21:02] I can delegate what's inside. I found that has been a really nice way
[01:21:04] I found that has been a really nice way to retain my sense of the code base
[01:21:06] to retain my sense of the code base while preserving my sanity.
[01:21:09] while preserving my sanity. Make sense?
[01:21:15] And so, you might ask, how do I take a code base
[01:21:16] code base that looks like this
[01:21:18] that looks like this and then turn it into a code base that
[01:21:20] and then turn it into a code base that looks like this? How do I deepen the
[01:21:22] looks like this? How do I deepen the modules?
[01:21:23] modules? Well, we have Hopefully, it's in here.
[01:21:26] Well, we have Hopefully, it's in here. Pretty sure it is. We have a skill.
[01:21:28] Pretty sure it is. We have a skill. And that skill is called improve code
[01:21:30] And that skill is called improve code base architecture.
[01:21:33] base architecture. Nice and direct.
[01:21:35] Nice and direct. Uh let's run it.
[01:21:37] Uh let's run it. What this skill is going to do is it's
[01:21:39] What this skill is going to do is it's essentially just going to do it a scan
[01:21:40] essentially just going to do it a scan of our code base and looking for what's
[01:21:42] of our code base and looking for what's available here. And feel free to run
[01:21:44] available here. And feel free to run this yourself if you're um
[01:21:46] this yourself if you're um uh
[01:21:47] uh running the exercises.
[01:21:48] running the exercises. And it's exploring the architecture,
[01:21:50] And it's exploring the architecture, exploring um
[01:21:52] exploring um essentially how to work within this code
[01:21:54] essentially how to work within this code base, and it's going to attempt to
[01:21:57] base, and it's going to attempt to uh find places to deepen the modules.
[01:22:01] uh find places to deepen the modules. Pretty simple. One really cool um thing
[01:22:05] Pretty simple. One really cool um thing that it found here is part of my uh part
[01:22:08] that it found here is part of my uh part of my course video manager app is a
[01:22:10] of my course video manager app is a video editor. A video editor built in
[01:22:12] video editor. A video editor built in the browser, which is really hardcore.
[01:22:14] the browser, which is really hardcore. Uh it's a decent bit of engineering. And
[01:22:16] Uh it's a decent bit of engineering. And I wanted a way that I could wrap the
[01:22:18] I wanted a way that I could wrap the entire front end all the way to the back
[01:22:21] entire front end all the way to the back end in like a single big module, so that
[01:22:23] end in like a single big module, so that I could test the fact that I press
[01:22:25] I could test the fact that I press something on the front end and it goes
[01:22:27] something on the front end and it goes all the way to the back end. And so, I
[01:22:28] all the way to the back end. And so, I found a way essentially by using a kind
[01:22:31] found a way essentially by using a kind of discriminated union between the two
[01:22:32] of discriminated union between the two types here by sort of I was able to use
[01:22:36] types here by sort of I was able to use this uh skill to essentially have a huge
[01:22:40] this uh skill to essentially have a huge great big module that just tested from
[01:22:42] great big module that just tested from the outside, it was testable from the
[01:22:43] the outside, it was testable from the outside, this video editor
[01:22:45] outside, this video editor infrastructure. And it meant that AI
[01:22:47] infrastructure. And it meant that AI could see the entire flow, could act on
[01:22:49] could see the entire flow, could act on the entire flow, and test on the entire
[01:22:51] the entire flow, and test on the entire flow. And honestly, it was just night
[01:22:53] flow. And honestly, it was just night and day in terms of the uh ability of AI
[01:22:56] and day in terms of the uh ability of AI to actually make changes, cuz AI working
[01:22:58] to actually make changes, cuz AI working on a video editor is pretty brutal if
[01:23:00] on a video editor is pretty brutal if you don't give it good tests. So, that
[01:23:02] you don't give it good tests. So, that is
[01:23:03] is Honestly, I
[01:23:04] Honestly, I If you take one thing away from today,
[01:23:05] If you take one thing away from today, just try running this skill
[01:23:07] just try running this skill on your repo and see what happens.
[01:23:10] on your repo and see what happens. Let's go to Slido. Let's ask a
[01:23:12] Let's go to Slido. Let's ask a check a couple of questions as well this
[01:23:13] check a couple of questions as well this is running.
[01:23:16] is running. So, let's see. Have you tried Claude's
[01:23:17] So, let's see. Have you tried Claude's auto mode with Claude enable auto mode?
[01:23:19] auto mode with Claude enable auto mode? That way you can avoid many of the
[01:23:20] That way you can avoid many of the obvious permission checks. We'll talk
[01:23:21] obvious permission checks. We'll talk about permission checks in a second.
[01:23:24] about permission checks in a second. Do I keep the markdown plans and issues
[01:23:27] Do I keep the markdown plans and issues for later reference?
[01:23:29] for later reference? Okay.
[01:23:30] Okay. This is a great question.
[01:23:32] This is a great question. So,
[01:23:36] let's say that you uh have a great idea, you turn
[01:23:38] that you uh have a great idea, you turn it into a PRD,
[01:23:40] it into a PRD, raise and you then implement that PRD,
[01:23:43] raise and you then implement that PRD, and the PRD is essentially done.
[01:23:45] and the PRD is essentially done. Raise your hand if you keep that
[01:23:47] Raise your hand if you keep that information in the repo, so you turn it
[01:23:49] information in the repo, so you turn it into a markdown file. Raise your hand if
[01:23:51] into a markdown file. Raise your hand if you want to keep that around.
[01:23:54] you want to keep that around. Cool. Okay. And raise your hand if you
[01:23:56] Cool. Okay. And raise your hand if you if you don't want to keep it around. If
[01:23:58] if you don't want to keep it around. If you want to get rid of it as soon as
[01:23:59] you want to get rid of it as soon as possible. Yeah, this is I think an
[01:24:02] possible. Yeah, this is I think an a question that doesn't have a clear
[01:24:04] a question that doesn't have a clear answer.
[01:24:05] answer. What I'm really scared of
[01:24:08] What I'm really scared of with any documentation decision is that
[01:24:12] with any documentation decision is that let's say that we have a PRD for this
[01:24:13] let's say that we have a PRD for this gamification system, we keep it in the
[01:24:15] gamification system, we keep it in the repo.
[01:24:16] repo. We go on, go on, go on. Let's say a
[01:24:17] We go on, go on, go on. Let's say a month later, we want some edits to the
[01:24:20] month later, we want some edits to the gamification system.
[01:24:21] gamification system. And we go in with Claude, and it finds
[01:24:23] And we go in with Claude, and it finds this old PRD and says, yes, I found the
[01:24:26] this old PRD and says, yes, I found the original documentation for the PRD
[01:24:27] original documentation for the PRD system.
[01:24:28] system. Well, it turns out that the actual code
[01:24:30] Well, it turns out that the actual code has changed so much from the original
[01:24:32] has changed so much from the original PRD that it's almost unrecognizable. The
[01:24:34] PRD that it's almost unrecognizable. The names of things have changed, the um
[01:24:35] names of things have changed, the um file structure has changed, even the
[01:24:37] file structure has changed, even the requirements may have changed. We might
[01:24:38] requirements may have changed. We might have actually tested it with users. This
[01:24:41] have actually tested it with users. This is doc rot, where the documentation for
[01:24:44] is doc rot, where the documentation for something is rotting away in your repo
[01:24:46] something is rotting away in your repo and influencing Claude badly. Or Claude,
[01:24:49] and influencing Claude badly. Or Claude, agents badly.
[01:24:51] agents badly. So, I tend to not keep it around. I tend
[01:24:54] So, I tend to not keep it around. I tend to get rid of it. And for me, because my
[01:24:56] to get rid of it. And for me, because my setup uses GitHub issues, I just mark it
[01:24:59] setup uses GitHub issues, I just mark it as closed. It can fetch it if it wants
[01:25:01] as closed. It can fetch it if it wants to, but it's got a visual indicator that
[01:25:02] to, but it's got a visual indicator that it's done. So, I tend to prefer
[01:25:05] it's done. So, I tend to prefer ditching these.
[01:25:08] ditching these. Thoughts on the BEADS framework from
[01:25:09] Thoughts on the BEADS framework from Steve. Uh I've not tested it, but it
[01:25:11] Steve. Uh I've not tested it, but it seems like sort of um another way to
[01:25:13] seems like sort of um another way to manage Kanban boards and issues. Seems
[01:25:16] manage Kanban boards and issues. Seems uh very good, but I've not tried it.
[01:25:19] uh very good, but I've not tried it. Um
[01:25:21] Um >> [clears throat]
[01:25:22] >> [clears throat] >> Uh let me just quickly check the uh
[01:25:25] >> Uh let me just quickly check the uh setup here.
[01:25:27] setup here. Let's take a couple of questions from
[01:25:28] Let's take a couple of questions from the room. Anybody got any questions at
[01:25:30] the room. Anybody got any questions at this point about anything that we've
[01:25:31] this point about anything that we've covered so far, especially this last
[01:25:32] covered so far, especially this last bit? Yes.
[01:25:34] bit? Yes. I thought it was
[01:25:35] I thought it was interesting your answer about like the
[01:25:37] interesting your answer about like the markdown files that you delete because
[01:25:39] markdown files that you delete because they
[01:25:40] they create like doc rot.
[01:25:41] create like doc rot. How about migrations? Like with
[01:25:43] How about migrations? Like with migration files, would you also squash
[01:25:45] migration files, would you also squash them after that?
[01:25:47] them after that? Like database migrations? Yeah.
[01:25:51] Like database migrations? Yeah. I don't know.
[01:25:53] I don't know. I hope that answers your question. I'm
[01:25:55] I hope that answers your question. I'm so sorry. No, no. I think database
[01:25:57] so sorry. No, no. I think database migrations are a different thing because
[01:25:58] migrations are a different thing because you have a sort of running record of
[01:25:59] you have a sort of running record of exactly what changed, and it's more
[01:26:01] exactly what changed, and it's more deterministic. And I think
[01:26:04] deterministic. And I think Yeah, it's an interesting analogy. I'm
[01:26:06] Yeah, it's an interesting analogy. I'm not sure. Let's talk about it
[01:26:07] not sure. Let's talk about it afterwards.
[01:26:09] afterwards. That's a good way of saying I've no
[01:26:10] That's a good way of saying I've no idea.
[01:26:11] idea. Yeah. Yeah. So, you mentioned that you
[01:26:13] Yeah. Yeah. So, you mentioned that you don't delete the PRD. You mentioned you
[01:26:15] don't delete the PRD. You mentioned you don't review the PRD once it's done.
[01:26:16] don't review the PRD once it's done. Sorry, guys. Um I'm just trying to
[01:26:18] Sorry, guys. Um I'm just trying to listen to this guy's question. Have you
[01:26:19] listen to this guy's question. Have you considered
[01:26:20] considered uh using a deep think like ChatGPT or
[01:26:22] uh using a deep think like ChatGPT or something
[01:26:27] to tell it, "Look at this PRD and tell me if it
[01:26:29] me if it It takes about an hour.
[01:26:31] It takes about an hour. Yeah, the question
[01:26:33] Yeah, the question The question here is um
[01:26:35] The question here is um should I um in the sort of early
[01:26:37] should I um in the sort of early planning stage be trying to optimize the
[01:26:39] planning stage be trying to optimize the plan?
[01:26:40] plan? This is something I actually see a lot
[01:26:42] This is something I actually see a lot of people doing, and it's a really good
[01:26:44] of people doing, and it's a really good um
[01:26:45] um idea. So, when you
[01:26:51] Let's go back to the phases. So, let's say that you have all of these
[01:26:53] So, let's say that you have all of these phases here.
[01:26:55] phases here. And you
[01:26:57] And you uh you get to the point where you've
[01:26:58] uh you get to the point where you've sort of figured out everything with the
[01:27:00] sort of figured out everything with the LLM, you understand where you're going,
[01:27:02] LLM, you understand where you're going, you've created this sort of uh journey
[01:27:03] you've created this sort of uh journey destination documents here. How do you
[01:27:06] destination documents here. How do you then
[01:27:07] then uh
[01:27:08] uh Like should you then try to optimize and
[01:27:10] Like should you then try to optimize and optimize and optimize that PRD until
[01:27:12] optimize and optimize that PRD until it's the perfect PRD you can possibly
[01:27:14] it's the perfect PRD you can possibly imagine?
[01:27:15] imagine? I don't think there's a lot of value in
[01:27:17] I don't think there's a lot of value in that.
[01:27:18] that. Because I think the journey is really
[01:27:20] Because I think the journey is really just sort of a hint of where you want to
[01:27:22] just sort of a hint of where you want to go, and the place that you need to be
[01:27:24] go, and the place that you need to be putting the work is in QA.
[01:27:26] putting the work is in QA. And you can sort of do that AFK, I
[01:27:28] And you can sort of do that AFK, I suppose, but in my experience, you're
[01:27:30] suppose, but in my experience, you're not going to get a lot of juice out of
[01:27:31] not going to get a lot of juice out of it. Like it's the
[01:27:33] it. Like it's the The thing that really matters is getting
[01:27:35] The thing that really matters is getting alignment with the AI, which is you do
[01:27:37] alignment with the AI, which is you do in the grilling session initially.
[01:27:40] in the grilling session initially. Let's have one more question. Anyone got
[01:27:42] Let's have one more question. Anyone got any more? Yeah. How do you get in in
[01:27:44] any more? Yeah. How do you get in in your workflow to get it to code the way
[01:27:46] your workflow to get it to code the way you want it to code it so by the time
[01:27:48] you want it to code it so by the time you get to code review, it's at least
[01:27:49] you get to code review, it's at least familiar, it uses the libraries you
[01:27:51] familiar, it uses the libraries you wanted to use, Yeah. Um we had this
[01:27:54] wanted to use, Yeah. Um we had this question before, actually, which was
[01:27:55] question before, actually, which was like uh how do you uh enforce your
[01:27:57] like uh how do you uh enforce your coding standards on the agents,
[01:27:59] coding standards on the agents, essentially? How do you get it to code
[01:28:01] essentially? How do you get it to code how you want it to code?
[01:28:03] how you want it to code? Now, there's essentially two different
[01:28:04] Now, there's essentially two different ways of doing it.
[01:28:06] ways of doing it. Um you've got
[01:28:08] Um you've got I don't know. Come on. Push.
[01:28:12] I don't know. Come on. Push. And you've got pull.
[01:28:15] And you've got pull. What do I mean mean by push and pull?
[01:28:17] What do I mean mean by push and pull? Um
[01:28:18] Um Push is where you push instructions to
[01:28:21] Push is where you push instructions to the LLM.
[01:28:22] the LLM. So, you say, okay, if you put something
[01:28:24] So, you say, okay, if you put something in Claude.md,
[01:28:26] in Claude.md, uh talk like a pirate, that instruction
[01:28:28] uh talk like a pirate, that instruction is always going to be sent to the agent,
[01:28:30] is always going to be sent to the agent, right? So, that is a push, actually.
[01:28:32] right? So, that is a push, actually. You're pushing tokens to it.
[01:28:34] You're pushing tokens to it. Pull is where you give the agent an
[01:28:37] Pull is where you give the agent an opportunity to pull more information.
[01:28:40] opportunity to pull more information. And
[01:28:42] And that's for instance like skills. So, a
[01:28:45] that's for instance like skills. So, a skill is something that can sit in the
[01:28:46] skill is something that can sit in the repo, and it has a little description
[01:28:48] repo, and it has a little description header that says, okay, agent, you may
[01:28:50] header that says, okay, agent, you may pull this when you want to.
[01:28:53] pull this when you want to. My thinking, my current thinking about
[01:28:55] My thinking, my current thinking about code review and about coding standards
[01:28:58] code review and about coding standards looks like this.
[01:28:59] looks like this. When you have an implementer,
[01:29:05] What's going on? There we go. Implementer.
[01:29:07] Implementer. I'm going to make this less red in a
[01:29:08] I'm going to make this less red in a second.
[01:29:09] second. Um then
[01:29:12] Um then you want the coding standards to be
[01:29:13] you want the coding standards to be available via pull. If it has a
[01:29:15] available via pull. If it has a question, you want it to be able to sort
[01:29:17] question, you want it to be able to sort of answer it.
[01:29:18] of answer it. But if you then have an automated
[01:29:21] But if you then have an automated reviewer afterwards, then you want it to
[01:29:24] reviewer afterwards, then you want it to push. You want to push that information
[01:29:25] push. You want to push that information to the reviewer. You want to say, "These
[01:29:27] to the reviewer. You want to say, "These are our coding standards. Um make sure
[01:29:29] are our coding standards. Um make sure that this code um follows them."
[01:29:32] that this code um follows them." So if you have skills for instance, then
[01:29:34] So if you have skills for instance, then you want to push that stuff to the
[01:29:36] you want to push that stuff to the reviewer so the reviewer has both the
[01:29:38] reviewer so the reviewer has both the code that's written and the coding
[01:29:40] code that's written and the coding standards to compare to.
[01:29:42] standards to compare to. Hopefully that answers your question. I
[01:29:43] Hopefully that answers your question. I can show you an automated version of
[01:29:45] can show you an automated version of this as well actually.
[01:29:46] this as well actually. Um
[01:29:47] Um Yeah, let's do that now just while it's
[01:29:48] Yeah, let's do that now just while it's fresh in my mind.
[01:29:50] fresh in my mind. I recently um spent
[01:29:54] I recently um spent uh
[01:29:55] uh maybe a week or so
[01:29:56] maybe a week or so uh building this thing called
[01:29:57] uh building this thing called Sandcastle.
[01:29:59] Sandcastle. And Sandcastle is a
[01:30:01] And Sandcastle is a I was sort of unhappy with the options
[01:30:03] I was sort of unhappy with the options out there for
[01:30:05] out there for um running agents AFK.
[01:30:07] um running agents AFK. And what this does is it's essentially a
[01:30:09] And what this does is it's essentially a TypeScript library for running these
[01:30:11] TypeScript library for running these loops. So you have
[01:30:14] loops. So you have uh a run function
[01:30:16] uh a run function that creates a work tree, um sandboxes
[01:30:19] that creates a work tree, um sandboxes it in a Docker container,
[01:30:20] it in a Docker container, and then allows you to run a prompt
[01:30:22] and then allows you to run a prompt inside that.
[01:30:24] inside that. And in that work tree then, it's just a
[01:30:26] And in that work tree then, it's just a Git branch and you have that code and
[01:30:27] Git branch and you have that code and you can then merge it later.
[01:30:30] you can then merge it later. If I open up
[01:30:32] If I open up um
[01:30:34] um there are some really really nice ways
[01:30:36] there are some really really nice ways of viewing this and it essentially
[01:30:37] of viewing this and it essentially allows you to run these kind of
[01:30:39] allows you to run these kind of automated loops and allows you to
[01:30:42] automated loops and allows you to parallelize across multiple different
[01:30:44] parallelize across multiple different agents really simply.
[01:30:45] agents really simply. So I'll go into my Sandcastle file, go
[01:30:47] So I'll go into my Sandcastle file, go into main.ts here.
[01:30:49] into main.ts here. And let's just walk through this.
[01:30:52] And let's just walk through this. So this is kind of like I showed you um
[01:30:55] So this is kind of like I showed you um a sort of version of the Ralph loop
[01:30:56] a sort of version of the Ralph loop earlier. This is where we take it from
[01:30:58] earlier. This is where we take it from sequential into parallel.
[01:31:02] sequential into parallel. We have here first of all a planner
[01:31:04] We have here first of all a planner that takes in it's has a plan prompt
[01:31:06] that takes in it's has a plan prompt here that looks at the backlog and
[01:31:09] here that looks at the backlog and chooses a certain number of issues to
[01:31:12] chooses a certain number of issues to work on in parallel. Remember I showed
[01:31:13] work on in parallel. Remember I showed you that Kanban board where it had all
[01:31:15] you that Kanban board where it had all the blocking relationships? It works out
[01:31:16] the blocking relationships? It works out all the phases. So this one will say
[01:31:19] all the phases. So this one will say okay, uh let's say we have
[01:31:21] okay, uh let's say we have uh you can ignore all this glue code
[01:31:23] uh you can ignore all this glue code here. This is essentially
[01:31:25] here. This is essentially just a set of issues, GitHub issues with
[01:31:27] just a set of issues, GitHub issues with a title and with a a branch for you to
[01:31:31] a title and with a a branch for you to work on.
[01:31:32] work on. And then for each issue, we create a
[01:31:36] And then for each issue, we create a sandbox
[01:31:38] sandbox and then we run an implementer in that
[01:31:40] and then we run an implementer in that sandbox
[01:31:41] sandbox passing in the issue number, issue
[01:31:42] passing in the issue number, issue title, and the branch. This is like the
[01:31:44] title, and the branch. This is like the loop that we ran just before.
[01:31:46] loop that we ran just before. Then
[01:31:47] Then if it created some commits, we then
[01:31:50] if it created some commits, we then review those commits.
[01:31:51] review those commits. This is essentially the loop.
[01:31:54] This is essentially the loop. What do we do with those commits?
[01:31:56] What do we do with those commits? We pass those into a
[01:31:59] We pass those into a merger agent.
[01:32:01] merger agent. Which takes in a merge prompt, takes in
[01:32:03] Which takes in a merge prompt, takes in the branches that were created, takes in
[01:32:05] the branches that were created, takes in the issues, and it just merges them in.
[01:32:07] the issues, and it just merges them in. If there are any issues with the merge,
[01:32:08] If there are any issues with the merge, you know, with the types and tests and
[01:32:09] you know, with the types and tests and that kind of thing, it solves them.
[01:32:12] that kind of thing, it solves them. And this has been my uh flow for quite a
[01:32:13] And this has been my uh flow for quite a while now for working on most projects.
[01:32:16] while now for working on most projects. It works super super well. And uh yeah,
[01:32:19] It works super super well. And uh yeah, I recommend you check out Sandcastle if
[01:32:21] I recommend you check out Sandcastle if you want to sort of learn more.
[01:32:23] you want to sort of learn more. And to answer your question properly is
[01:32:25] And to answer your question properly is that in the reviewer
[01:32:28] that in the reviewer uh I would push the coding standards.
[01:32:30] uh I would push the coding standards. In the implementer, I would allow it to
[01:32:32] In the implementer, I would allow it to pull.
[01:32:33] pull. And I'm actually using uh Sonnet for
[01:32:35] And I'm actually using uh Sonnet for implementation and Opus for um
[01:32:39] implementation and Opus for um reviewing cuz I consider reviewing sort
[01:32:41] reviewing cuz I consider reviewing sort of I need I need the smarts then.
[01:32:47] Any question Actually, let me uh before we do more questions, let's go back
[01:32:48] we do more questions, let's go back here.
[01:32:49] here. Okay, where are we at?
[01:32:51] Okay, where are we at? Okay.
[01:32:54] Okay. We sort of zooming everywhere in this uh
[01:32:55] We sort of zooming everywhere in this uh talk because I'm kind of having to run
[01:32:57] talk because I'm kind of having to run things in parallel. So let's go back to
[01:32:59] things in parallel. So let's go back to the improve code base architecture. It
[01:33:01] the improve code base architecture. It has finally finished running and it's
[01:33:03] has finally finished running and it's found a bunch of architectural
[01:33:05] found a bunch of architectural improvement candidates.
[01:33:06] improvement candidates. So it's got essentially a cluster of
[01:33:09] So it's got essentially a cluster of different modules that are all kind of
[01:33:11] different modules that are all kind of related that could probably be tested as
[01:33:12] related that could probably be tested as a unit.
[01:33:13] a unit. Got number one, the quiz scoring
[01:33:15] Got number one, the quiz scoring service. There's some reordering logic
[01:33:17] service. There's some reordering logic extraction as well.
[01:33:19] extraction as well. It has arguments for why they're coupled
[01:33:22] It has arguments for why they're coupled and it has a dependency category as
[01:33:23] and it has a dependency category as well. So local substitutable in SQL
[01:33:26] well. So local substitutable in SQL light within memory test DB.
[01:33:29] light within memory test DB. Quiz scoring service just currently has
[01:33:30] Quiz scoring service just currently has zero tests. This is the biggest gap. So
[01:33:32] zero tests. This is the biggest gap. So this is what it looks like when we come
[01:33:33] this is what it looks like when we come back of
[01:33:34] back of uh improve code base architecture.
[01:33:38] uh improve code base architecture. Okay.
[01:33:40] Okay. So
[01:33:41] So we have nominally kind of 17 minutes
[01:33:43] we have nominally kind of 17 minutes left.
[01:33:44] left. I don't know about you guys, but I'm
[01:33:45] I don't know about you guys, but I'm knackered.
[01:33:46] knackered. >> [laughter]
[01:33:47] >> [laughter] >> Um I want to
[01:33:50] >> Um I want to >> [clears throat]
[01:33:51] >> [clears throat] >> Let me let me kind of sum up for you.
[01:33:53] >> Let me let me kind of sum up for you. Cuz I think we're sort of
[01:33:55] Cuz I think we're sort of reaching the end of our stamina. I'm
[01:33:56] reaching the end of our stamina. I'm going to be available for the full time
[01:33:57] going to be available for the full time if you want to um come and ask me
[01:33:58] if you want to um come and ask me questions. Um I might do one more check
[01:34:00] questions. Um I might do one more check of the slide over, but let's kind of sum
[01:34:01] of the slide over, but let's kind of sum up where we've got to.
[01:34:07] So this is essentially the flow.
[01:34:12] Where throughout this whole process, we're bearing in mind the shape of our
[01:34:14] we're bearing in mind the shape of our code base.
[01:34:15] code base. This is not a spec to code compiler.
[01:34:18] This is not a spec to code compiler. This is not an AI that's sort of just
[01:34:20] This is not an AI that's sort of just like churning out code. We are being
[01:34:22] like churning out code. We are being very intentional with the kind of
[01:34:23] very intentional with the kind of modules and the shape of the code base
[01:34:25] modules and the shape of the code base that we want. We are making sure that we
[01:34:27] that we want. We are making sure that we are as aligned as possible by using the
[01:34:29] are as aligned as possible by using the grilling session, by really hammering
[01:34:31] grilling session, by really hammering out our idea. We're not over indexing
[01:34:34] out our idea. We're not over indexing into the PRD, we're not trying to read
[01:34:35] into the PRD, we're not trying to read every part of it. We're not thinking too
[01:34:37] every part of it. We're not thinking too much about it even. We're then just
[01:34:39] much about it even. We're then just turning that into a set of
[01:34:40] turning that into a set of parallelizable issues which can be
[01:34:42] parallelizable issues which can be worked on by agents in parallel.
[01:34:44] worked on by agents in parallel. We implement it
[01:34:45] We implement it and we QA and code review the hell out
[01:34:47] and we QA and code review the hell out of it and then keep going back to that
[01:34:49] of it and then keep going back to that implementation. One thing I didn't
[01:34:50] implementation. One thing I didn't really mention is that in the QA phase
[01:34:54] really mention is that in the QA phase what the QA phase is for is creating
[01:34:56] what the QA phase is for is creating more issues for that Kanban board.
[01:34:58] more issues for that Kanban board. So while it's implementing even, you can
[01:34:59] So while it's implementing even, you can be QAing the stuff and going back,
[01:35:01] be QAing the stuff and going back, adding more issues. And the Kanban board
[01:35:03] adding more issues. And the Kanban board just allows you to add blocking issues
[01:35:04] just allows you to add blocking issues kind of um sort of infinitely really.
[01:35:08] kind of um sort of infinitely really. And then once that's all done, once
[01:35:09] And then once that's all done, once you've got code that you're happy with,
[01:35:10] you've got code that you're happy with, once you've got work that you're happy
[01:35:11] once you've got work that you're happy with, then you can share it with your
[01:35:13] with, then you can share it with your team and you can get a full review.
[01:35:15] team and you can get a full review. So this is kind of like once you get
[01:35:17] So this is kind of like once you get here, this is kind of one developer or
[01:35:18] here, this is kind of one developer or maybe a couple of developers sort of um
[01:35:20] maybe a couple of developers sort of um managing this and then it's kind of up
[01:35:22] managing this and then it's kind of up to you to figure out how to merge it
[01:35:23] to you to figure out how to merge it back in.
[01:35:25] back in. >> [sighs]
[01:35:29] >> Of course all of this can be customized by you.
[01:35:31] all of this can be customized by you. This is just something that I have found
[01:35:33] This is just something that I have found works. I'm not trying to like sell you
[01:35:35] works. I'm not trying to like sell you on a kind of approach here. What I
[01:35:37] on a kind of approach here. What I recommend if you take one thing away
[01:35:39] recommend if you take one thing away from this session is that you should
[01:35:41] from this session is that you should head back, you should head to Amazon and
[01:35:43] head back, you should head to Amazon and just buy a ton of those old books
[01:35:45] just buy a ton of those old books because
[01:35:46] because I mean, I just found it so enlightening
[01:35:48] I mean, I just found it so enlightening reading them. Uh
[01:35:50] reading them. Uh you know,
[01:35:51] you know, pre-AI writing is always like a a really
[01:35:53] pre-AI writing is always like a a really fun to read anyway.
[01:35:55] fun to read anyway. And
[01:35:57] And I just on every single page I found that
[01:35:59] I just on every single page I found that there was something useful and something
[01:36:00] there was something useful and something interesting to to read.
[01:36:02] interesting to to read. So thank you so much. Thank you for
[01:36:04] So thank you so much. Thank you for putting up with the heat. Um hopefully
[01:36:05] putting up with the heat. Um hopefully your body temperatures will reset soon.
[01:36:07] your body temperatures will reset soon. Uh
[01:36:09] Uh thank you very much.
[01:36:11] thank you very much. >> [applause]

All frames

Total: 80. Hero frames flagged with star.

  • frames/frame_0001.jpg (t=00:00) frames/frame_0002.jpg (t=02:44) frames/frame_0003.jpg (t=02:59) frames/frame_0004.jpg (t=03:20) frames/frame_0005.jpg (t=03:33) frames/frame_0006.jpg (t=04:07) frames/frame_0007.jpg (t=04:18) frames/frame_0008.jpg (t=05:54) frames/frame_0009.jpg (t=06:02) frames/frame_0010.jpg (t=06:19) frames/frame_0011.jpg (t=06:41) frames/frame_0012.jpg (t=07:02) frames/frame_0013.jpg (t=07:12) frames/frame_0014.jpg (t=07:52) frames/frame_0015.jpg (t=08:33) frames/frame_0016.jpg (t=09:01)
  • frames/frame_0017.jpg (t=09:43) frames/frame_0018.jpg (t=10:05) frames/frame_0019.jpg (t=10:40) frames/frame_0020.jpg (t=11:32) frames/frame_0021.jpg (t=11:44) frames/frame_0022.jpg (t=11:45) frames/frame_0023.jpg (t=11:58) frames/frame_0024.jpg (t=12:16) frames/frame_0025.jpg (t=12:16) frames/frame_0026.jpg (t=12:33) frames/frame_0027.jpg (t=13:51) frames/frame_0028.jpg (t=15:51) frames/frame_0029.jpg (t=16:12) frames/frame_0030.jpg (t=16:42) frames/frame_0031.jpg (t=17:32) frames/frame_0032.jpg (t=18:56)
  • frames/frame_0033.jpg (t=19:13) frames/frame_0034.jpg (t=20:30) frames/frame_0035.jpg (t=21:53) frames/frame_0036.jpg (t=22:13) frames/frame_0037.jpg (t=22:45) frames/frame_0038.jpg (t=22:56) frames/frame_0039.jpg (t=23:23) frames/frame_0040.jpg (t=23:27) frames/frame_0041.jpg (t=23:39) frames/frame_0042.jpg (t=24:56) frames/frame_0043.jpg (t=25:08) frames/frame_0044.jpg (t=27:10) frames/frame_0045.jpg (t=27:36) frames/frame_0046.jpg (t=27:53) frames/frame_0047.jpg (t=28:59) frames/frame_0048.jpg (t=30:15)
  • frames/frame_0049.jpg (t=31:11) frames/frame_0050.jpg (t=32:48) frames/frame_0051.jpg (t=33:24) frames/frame_0052.jpg (t=34:03) frames/frame_0053.jpg (t=34:07) frames/frame_0054.jpg (t=35:13) frames/frame_0055.jpg (t=36:13) frames/frame_0056.jpg (t=36:13) frames/frame_0057.jpg (t=36:18) frames/frame_0058.jpg (t=36:25) frames/frame_0059.jpg (t=36:39) frames/frame_0060.jpg (t=36:51) frames/frame_0061.jpg (t=37:25) frames/frame_0062.jpg (t=37:35) frames/frame_0063.jpg (t=37:36) frames/frame_0064.jpg (t=37:37) frames/frame_0065.jpg (t=38:35) frames/frame_0066.jpg (t=38:56) frames/frame_0067.jpg (t=38:57) frames/frame_0068.jpg (t=39:00) frames/frame_0069.jpg (t=39:18) frames/frame_0070.jpg (t=39:36) frames/frame_0071.jpg (t=39:45) frames/frame_0072.jpg (t=39:57) frames/frame_0073.jpg (t=40:16) frames/frame_0074.jpg (t=40:42) frames/frame_0075.jpg (t=41:26) frames/frame_0076.jpg (t=41:50) frames/frame_0077.jpg (t=42:11) frames/frame_0078.jpg (t=42:37) frames/frame_0079.jpg (t=43:19)
  • frames/frame_0080.jpg (t=43:49)