Spec-Driven Dev Is Back. But Not How You Think • Daniel Terhorst-North & Gojko Adzic • GOTO 2026 — Transcript
Full transcript
- 0:13Well, hello.
- 0:15Well, hello
- 0:16what are you doing there? Hey, I'm doing
- 0:18wonderful. How are you doing?
- 0:21I'm very well, thank you.
- 0:23So, one of the things I'm I'm kind of
- 0:25really curious to
- 0:26get your opinion on is whether this
- 0:29whole spec-driven thing is going back to
- 0:31waterfall and whether it's negating
- 0:34pretty much everything we've talked
- 0:35about in the last 30 years or is it kind
- 0:39of really giving us superpowers to do
- 0:41fast feedback the way we never had
- 0:43powers to do.
- 0:45And so let let let's I guess we should
- 0:47probably start with some terms. The the
- 0:49thing that I've
- 0:51I've seen spec-driven
- 0:53a lot on the LinkedIn. I don't know why
- 0:55I'm on LinkedIn. It's just kind of it's
- 0:56become the new Twitter. It's where
- 0:58people go and just It's a bit less
- 1:00racist. It's what? It's a bit less
- 1:03racist. It's it's a bit less hatey. It's
- 1:05a bit more respectful.
- 1:07But certainly [laughter]
- 1:09there's still a lot of nonsense on
- 1:10there. Spec-driven then is where someone
- 1:14puts together a to-do list or a list of
- 1:18bullets or something.
- 1:20Um they say, "Right, this is what the
- 1:21system needs to do." And it might be
- 1:23prose. It might be a description of a
- 1:25product. It might be
- 1:27a bullet list of features.
- 1:30Everyone agree? Haiku is best.
- 1:32>> It could be high I mean haiku is
- 1:33fantastic. I I still want to see an
- 1:35entirely limerick-driven
- 1:38GenAI. I think that'd be wonderful. Just
- 1:40after St. Patrick's Day, I feel like
- 1:42that's a thing. But no no I I think I
- 1:44think what I'm seeing is we're using
- 1:47spec-driven in two very different
- 1:48contexts and it's the
- 1:50the context that matters. So,
- 1:52spec-driven as a one-shot is the thing
- 1:55that I think you're referring to and I
- 1:56it's just it's never going to work,
- 1:58right? I'm going to put it out there.
- 1:59It's never going to work. You can't
- 2:01describe a fully functional, fully
- 2:03complete application
- 2:06and give it to
- 2:07a bot or a swarm of bots or whatever and
- 2:10get a product out the other end. I don't
- 2:12think that's a thing. Um or at least I
- 2:14don't think that's the thing that I
- 2:15would ever want to put into production
- 2:17with any kind of security, resilience,
- 2:20availability, compliance, accessibility
- 2:23guarantees anywhere, right?
- 2:25But I think the
- 2:27the idea of the agent doing the coding
- 2:30bit
- 2:32in a in an iterative spec-driven world,
- 2:36I I haven't yet done this, but I don't
- 2:39see any reason why that shouldn't
- 2:41be a thing and be the thing that gets
- 2:43better and better.
- 2:45Because, you know, I keep hearing this
- 2:47all the programming's the easy part, the
- 2:48coding's the easy part. No, I mean it's
- 2:50it's the easier part. It's the more
- 2:52deterministic part of a very large
- 2:54number of parts. It's still not easy or
- 2:56at least if it were easy, I would see a
- 2:59lot more I would consider good,
- 3:01readable, legible, habitable code in the
- 3:03world and I don't.
- 3:05So, it's very easy to type things into a
- 3:08computer. It's very easy to type things
- 3:10in such a way that a an appropriate
- 3:13compiler or interpreter can run them and
- 3:15do stuff.
- 3:16Um as Martin Fowler said as far back as
- 3:191996, any idiot can write
- 3:22code for a computer that a computer can
- 3:23understand. Programming is about writing
- 3:25software that humans can understand. And
- 3:28I think we're a long way off any of the
- 3:29GenAIs, any of the frontier models
- 3:31writing software that a that a human can
- 3:33understand.
- 3:35But I think if we're going to go in in
- 3:36little iterative loops with plenty of
- 3:38feedback, automated feedback,
- 3:40prompt-based feedback, developing the
- 3:43spec as we go, that kind of really is
- 3:45BDD, right?
- 3:46Yeah, I get the same feeling. So,
- 3:48there's a couple of things I tried last
- 3:49few months. There's there's some tooling
- 3:52around this spec-driven development
- 3:54that's promoted by Microsoft/GitHub. So,
- 3:57there's the spec kit, there's the open
- 3:58spec that's like an open open-source
- 4:01version of it. There's a Although this
- 4:02one is open-source as well. So, we're
- 4:04getting an open-source version of an
- 4:06open-source tool.
- 4:07>> [laughter]
- 4:08>> And then there's like Kiro from Amazon.
- 4:10There's a bunch of other things and
- 4:12everybody and their dog seems to be
- 4:14publishing their own kind of spec-driven
- 4:16process now, which is a kind of a bunch
- 4:19of markdown files effectively
- 4:21implementing what what's it like
- 4:23the password for this is an RPI loop
- 4:25like research, plan, and and implement.
- 4:28Kind of my experience is that
- 4:30a lot of these things are basically
- 4:33creating a a sourdough starter for a
- 4:36process where
- 4:38you're supposed to take that and then
- 4:40heavily modify it for your use. Some
- 4:41I've kind of had
- 4:44a reasonable success teaching Claude
- 4:46code how to develop the code in a way I
- 4:48like to. Mhm. And it's producing code
- 4:50that is
- 4:51if you take me for a human then humanly
- 4:54developed. Um it took a lot of work to
- 4:57get it there and and I've kind of
- 4:59inspired by some of these frameworks or
- 5:02elements of of kind of reduced it to the
- 5:04amount that's useful for me and that's
- 5:06what I I think
- 5:08is going to happen is that people will
- 5:10take these things and
- 5:12reduce them or or modify them in a way
- 5:16that's useful for their process where
- 5:19if you just take Kiro or or take spec
- 5:21kit, you're effectively
- 5:24uh implementing Microsoft's process, not
- 5:27Amazon's process, not your process. I I
- 5:30think the problem with a bunch of these
- 5:32things is kind of the generator wall of
- 5:33text that nobody reads and and we know
- 5:35that from like last 30 years of work.
- 5:41I I still remember working with business
- 5:44analysts who would produce like a
- 5:45500-page Word document that the
- 5:47developer is supposed to read and we're
- 5:49getting to the point where
- 5:52these tools are becoming those business
- 5:54analysts producing 500 pages of text
- 5:56that nobody reads and then approves and
- 5:58and no wonder the result is kind of not
- 6:00up to spec. So, I think I I agree with
- 6:02you in a sense where yeah, we can we can
- 6:05force through small iterative loops and
- 6:07that would be amazing and that is
- 6:08actually kind of BDD and and that's
- 6:11where kind of all these good ideas
- 6:14around clarifying things come in. Um
- 6:17I'm concerned though that
- 6:19people are going to be overly
- 6:22enthusiastic about just
- 6:26browsing through walls of text and
- 6:28approving them and getting getting
- 6:29really surprised on the other end. And
- 6:31you know, you used the word compiler.
- 6:34I think the danger is where people start
- 6:36assuming that agents are compilers and
- 6:40that they can actually transform
- 6:42a spec into a product in a
- 6:45deterministic, reproducible way and and
- 6:47that's not what's happening at the
- 6:49moment. Maybe it will in the future.
- 6:51>> [laughter]
- 6:51>> Well, and I think you need to follow the
- 6:52money here. I mean,
- 6:54when you say, you know, there's there's
- 6:55these products coming out, these tools
- 6:57coming out, I I get the same the same
- 7:00flavor as things like the case tools of
- 7:02the '90s or the model-driven
- 7:03architecture tools of the 2000s
- 7:06where there's a buzz around a thing and
- 7:09the the the thing this time is using
- 7:11natural language to get a computer to
- 7:14write code for another computer.
- 7:16And if we anthropomorphize the middle
- 7:18computer, we can call it an agent and
- 7:20use the words like understanding where
- 7:21there is no understanding cuz there's no
- 7:23sentience.
- 7:24But it's it's exciting to then say,
- 7:26"Hey, enterprise senior purchasing
- 7:28person, you can buy this tool and this
- 7:31tool will be your business analyst."
- 7:33Right? Um assuming that the role of a
- 7:35business analyst is writing documents
- 7:38rather than understanding a problem
- 7:39domain.
- 7:40Right?
- 7:41>> [laughter]
- 7:41>> And coming in with a vast amount of
- 7:44pre-existing domain knowledge.
- 7:46Um in the same way that programming is
- 7:48is typing tokens into a computer rather
- 7:50than understanding how the stack works
- 7:53and mechanical sympathy and any of that,
- 7:55you know, good engineering stuff. So, I
- 7:57think from the commercial angle, I I I
- 7:58understand why these tools are coming
- 8:00into existence and
- 8:02I predict exactly the same commercial
- 8:05arc for them as happened with with the
- 8:07case tools, with the MDA tools, with the
- 8:09the various other attempts at removing
- 8:11humans.
- 8:12And and but but the the frustrating I
- 8:15>> [clears throat]
- 8:15>> you know, you I'm going to keep on
- 8:17banging on about this. I'm going to keep
- 8:18on I suspect a lot of folks like me are
- 8:20going to.
- 8:21>> [snorts]
- 8:21>> It's a machine, right? It's a very
- 8:23clever mimicking machine. Yeah, back to
- 8:25Emily Bender's like lovely phrase,
- 8:27stochastic parrot.
- 8:28It it the the the robots have no
- 8:31understanding. The robots have no
- 8:33semantic awareness. In particular, the
- 8:35robots don't care about your stuff cuz
- 8:36they don't care, right?
- 8:39So, any attempt at code quality has to
- 8:41come from not just defining guardrails
- 8:44cuz that's not hard, right? And I
- 8:45suspect
- 8:47the Venn diagram of lots of different
- 8:49people's quality code quality guardrails
- 8:51does start to converge on a circle or at
- 8:54least a circle with some bumps on it,
- 8:55you know?
- 8:56Uh I imagine if I were to write down in
- 8:58markdown files the things I care about
- 9:00and you were So, I don't think that's
- 9:02the hard bit. The hard bit is is keeping
- 9:06the the GenAI, keeping the agents,
- 9:09keeping the bots on the rails with all
- 9:11that written. I've been I mean, you
- 9:12know, you've been doing this in anger
- 9:14for a while. I'm sort of dipping my toe.
- 9:19And what I'm finding and it's prob could
- 9:21well be user error, could be my lack of
- 9:23understanding of how this stuff works.
- 9:25I'm giving Claude code in my case very
- 9:28clear rules that it stashes away as
- 9:31memories and it has global memories and
- 9:33it has project memories of specific
- 9:35things I wanted to do or not do.
- 9:37And then it immediately just carries on
- 9:39and does them
- 9:40>> [laughter]
- 9:41>> about 10 minutes later.
- 9:43And I say things like that you So, I'm
- 9:46I'm desperately trying not to
- 9:48anthropomorphize it. The model I'm using
- 9:50is I'm imagining it's a text-based
- 9:52adventure game. You know, open box, go
- 9:55north, get key, that kind of thing,
- 9:57right? Rather than you do this and
- 9:59having a chassis interface with it.
- 10:01And one of the rules I have is do not
- 10:03speak in the first person.
- 10:04Right, I don't want the robot having
- 10:05[clears throat] a personality.
- 10:07But yeah, I I'm I'm clearly failing at
- 10:10these guardrails, right? At defining the
- 10:12guardrails and and having it stick to
- 10:13the guardrails. And when I say, "You're
- 10:15not sticking to the guardrails." it
- 10:16goes,
- 10:17"Catch." Or something equally chirpy.
- 10:20Like, I just deleted your stuff.
- 10:22>> on that, here's my thought on that and
- 10:24I've I've kind of hit the same bump and
- 10:26I've actually I think I have a good
- 10:27solution for that.
- 10:29So, Uh genius.
- 10:32Yeah,
- 10:32>> [laughter]
- 10:32>> so so that
- 10:33you know, given that this is kind of
- 10:35supposed to be a chat, I'll give you a
- 10:36slightly convoluted and a convoluted
- 10:38kind of way to get there because I I
- 10:40want to give you the thinking model
- 10:41behind this.
- 10:42>> All right, all right, please say. So, I
- 10:43I had a couple of these very very
- 10:45domain-specific rules around writing
- 10:47JavaScript.
- 10:49There's a specific class called workflow
- 10:52and you're not supposed to mock uh
- 10:53certain elements of the workflow. You're
- 10:55supposed to use them directly in tests
- 10:56and when you
- 10:57>> All right. production. So, this is very
- 10:59very project domain-specific. Really
- 11:01project domain-specific.
- 11:02And I I I I I wrote markdown files and
- 11:07markdown files and exception to markdown
- 11:08files and got Claude to write its own
- 11:11markdown files
- 11:12and then occasionally it still made
- 11:13mistakes.
- 11:15And I was thinking about this like
- 11:17I'm using ESLint to lint things,
- 11:21but it's linting things that are like
- 11:23use tabs, not spaces, lint this, lint
- 11:25that. If I had a tool like ESLint that
- 11:28could do my domain-specific stuff,
- 11:31then I wouldn't have to rely on these
- 11:33markdown files. I could even unit test
- 11:34that this works well.
- 11:36And I I
- 11:39was kind of thinking about well, how
- 11:40would I do this? And then I I asked
- 11:42Claude like
- 11:45write a custom ESLint rule
- 11:48that detects
- 11:50a workflow class being mocked and give
- 11:53yourself an error of saying, "Never mock
- 11:56this method, use the real method
- 11:57instead."
- 11:58And then I got it to write a unit test
- 12:00for this and I got it to run the unit
- 12:02test so I can see that ESLint is with a
- 12:04positive and negative doing these things
- 12:05correctly.
- 12:07And from then on, I have a fully
- 12:09deterministic, properly automated check
- 12:12for my domain rules.
- 12:14And
- 12:15once the first one worked, I really kind
- 12:17of that started going off the rails
- 12:18because now I have hundreds of
- 12:20domain-specific rules for very very
- 12:23particular things that are particular to
- 12:25my project. I have custom HTML linting
- 12:28tools. I have custom CSS linting rules.
- 12:30I have all these things.
- 12:31>> Okay, okay, okay, okay,
- 12:33you're giving away far too much here.
- 12:34What you have is a software quality
- 12:38product, commercial software quality
- 12:40quality product for JavaScript that
- 12:42you're going to now start selling into
- 12:44the enterprise. What I have here What I
- 12:45have here is What I have here is I think
- 12:48this thing where if you look at the, you
- 12:50know, Simon Wardley's how how things
- 12:53transform from like a totally bespoke
- 12:55thing to a
- 12:57commoditized product, some things that
- 12:59kept
- 13:00bumping up and you identify the rules.
- 13:02Once you identify the rules, you kind of
- 13:04transform them into a hard not
- 13:07hard-coded, but into a coded
- 13:08deterministic check that's specific to
- 13:10your project. And really, if I was if I
- 13:13had that superpower 10 years ago, I
- 13:15would have been doing it for all my
- 13:16projects, but
- 13:18there was never enough time to like
- 13:20write custom linting rules. You you
- 13:24communicating to developers, "You
- 13:25shouldn't do this, you shouldn't do
- 13:26this, you shouldn't do this, you
- 13:27shouldn't do this." Or you kept it in,
- 13:29you know, some kind of classic knowledge
- 13:31in in There was never explicit. And I
- 13:33think
- 13:34one of the things I'm I'm kind of
- 13:35thinking about now is like I had a
- 13:38conversation with with with
- 13:40a friend last week and the metaphor we
- 13:43came up with is imagine you had to
- 13:45onboard a new developer to your team
- 13:46every hour because that's what's
- 13:48happening when you're launching an
- 13:49agent.
- 13:51What would you have to do? Well, all the
- 13:52rules like they shouldn't be in Word
- 13:54documents. You know, people should get
- 13:56feedback from the system in a good way.
- 13:58If they do something, the bumpers should
- 14:01be in the system automated. So, if
- 14:02you're coding it the wrong way, Yeah.
- 14:05the system should kind of fix you. And
- 14:07And the other piece of the puzzle came
- 14:08from this conference talk I I saw by
- 14:12somebody from Google doing the MCP for
- 14:15for Chrome
- 14:16where they realized that the error
- 14:18messages for humans
- 14:20were
- 14:22not as good as like the error messages
- 14:24needed for agents because the agents
- 14:26were getting stuck in a loop. They said,
- 14:28"Oh, you know, access denied." And they
- 14:29would just try 10 times instead of a
- 14:32human basically saying, "Access denied,
- 14:33let me check what's wrong with the
- 14:34access keys." Mhm. And they said what
- 14:37the what what one of the key lessons was
- 14:39that error messages have to instruct
- 14:42how to fix the problem. So, "Access
- 14:44denied." is not good enough. "Access
- 14:46denied, check your access keys." or
- 14:48"Access denied,
- 14:50um check your configuration." or
- 14:51something like that. So, all of these
- 14:53custom linting errors have proper here's
- 14:56how to fix me.
- 14:58And I think that that itself is almost
- 15:00at that. You you want some meta rules.
- 15:02You want rules for your rules, right?
- 15:04>> Yeah, yeah, yeah. And And And then And
- 15:06then kind of what's really wonderful is
- 15:08like this is wonderfully useful for for
- 15:10humans as well. It's just good. Yeah,
- 15:12yeah. It's It's And And I can switch
- 15:15from Claude to some other system
- 15:17tomorrow.
- 15:19I don't have to worry about whether they
- 15:20read markdown the same way. I have this
- 15:22in ESLint. It can't be ignored because
- 15:24the CI system runs linting rules
- 15:26separately from Claude and and Claude,
- 15:29you know, Claude will need to take
- 15:30feedback from the CI system. It can't
- 15:32push things out that don't pass CI. You
- 15:35can do pre-commit hooks. You can do all
- 15:36sorts of things. So, I think the
- 15:38guardrails
- 15:40as they stabilize should be pushed to
- 15:42existing tools, not not to And And this
- 15:44saves tokens so you're not wasting time
- 15:47on this kind of meta textual analysis.
- 15:49It makes it more kind of project-based.
- 15:52It makes it oriented towards humans as
- 15:54well. And I I think that's kind of where
- 15:56these things need to go. And And I think
- 15:58it's quite empowering to be able to
- 16:00build up these bumpers on the road. I I
- 16:02I like this kind of metaphor from
- 16:05product-led growth where they say you
- 16:06have kind of this lane where you need
- 16:07to, but you put bumpers so that users
- 16:10can stay in the lane.
- 16:12And these things are bumpers, really. I
- 16:13mean, if Claude goes there, you just
- 16:15bump it a bit back and you tell it where
- 16:16to go. And instead of keeping it in
- 16:19these markdown files, I think as soon as
- 16:21you figure out what the rule is,
- 16:24Yeah. you get Claude to automate it in a
- 16:26different way. And I got it to write
- 16:28custom CLI tools.
- 16:30I got it to use existing kind of tools.
- 16:33I got it to do grep with with like
- 16:35bizarre grep rules to check for CSS
- 16:39violations and a bunch of other things,
- 16:42but I think that's that's the way
- 16:43really. As soon as you figure out these
- 16:45things, push them into get Claude to
- 16:48push it or write write deterministic
- 16:50rules for itself using something else. I
- 16:53like that. So, for me, Getting Claude to
- 16:55do this for you right now, that's that's
- 16:57cheating.
- 16:58So, [snorts]
- 16:59So, So, I I there's two things I want to
- 17:01tease out there that I found really
- 17:02really I I'm going to take away at
- 17:04least. I found really useful.
- 17:06So, there there there's a class of rule,
- 17:08if you like, there's a class of
- 17:09heuristic that is about your code.
- 17:12And there is something that you could it
- 17:15if there were if there were a linter for
- 17:17it, you could write a linting rule.
- 17:19And if there isn't, you could probably
- 17:20write a linter for it and then write
- 17:22rules for the linter, you know? Yeah,
- 17:24exactly. Can Can you push that kind of
- 17:26linting into that domain? Something that
- 17:27I'm realizing, and again, this might be
- 17:30a learning thing for me or it might be
- 17:31just where the tools are going.
- 17:33I found
- 17:35rather than using Claude to write core
- 17:38stuff,
- 17:39you know, I tend to still write core
- 17:41stuff. Maybe I'm not good enough with
- 17:43Claude yet or whatever on or the
- 17:44tooling. I know we're both talking about
- 17:46Claude cuz we're both using it, but um
- 17:47other other LLMs are available. Other
- 17:49frontier models are available.
- 17:51But I find what what I found is rather
- 17:54than saying, "I'm going to use Claude
- 17:55for this."
- 17:56it's more I'm using it for lots and lots
- 17:59of little itch-scratching things that I
- 18:02would never have got around to
- 18:03otherwise. So, it's like I'm not
- 18:06designing I'm not using it to build a
- 18:08car, but I'm using it to make the
- 18:10headrest a bit more comfortable or to
- 18:13give me a little button on the side that
- 18:14automatically moves things backwards or
- 18:17to have memorized seating position for
- 18:20different drivers or just stuff that I
- 18:22could probably get around to, but I
- 18:24haven't got time for, Yeah. Yeah. It
- 18:26seems to really fit neatly into that
- 18:29niche of if you're going to look at the
- 18:31Neil Nicholson the purpose alignment
- 18:33thing, things that are non-critical,
- 18:37right? They're non-differentiating, but
- 18:39they're quality of life things. And I I
- 18:41I feel like that's a really nice right
- 18:43now at their level of maturity, a really
- 18:45nice kind of niche for them. Absolutely.
- 18:48And I think you know, when when you when
- 18:49you look at something like this, like I
- 18:50always remember in in discussions like
- 18:52this, there was
- 18:54You probably worked on billing systems
- 18:55that reconcile banking information. I
- 18:58don't know
- 18:59>> [laughter]
- 19:00>> What gives you that idea?
- 19:02Realistically, realistically, you know,
- 19:04like money shouldn't be lost between
- 19:06here and here. Right. I But But somehow,
- 19:11you know, we need to build
- 19:12reconciliation systems to to make sure
- 19:14that the money is not lost or or where
- 19:16it's lost, to to find how much is lost.
- 19:18No, there's an entire You need to
- 19:20understand there's an entire domain
- 19:22language around this.
- 19:24So, So, in in banking in in settle So,
- 19:26settlements in banking for those who
- 19:28don't know, basically lots and lots and
- 19:30lots of counterparties all trade with
- 19:32each other and there might be millions
- 19:34of trades in a day worth trillions of
- 19:36dollars and at the end of the day we've
- 19:37got to figure out who owes who what,
- 19:39right? And we could just make everyone
- 19:41make all those payments and that would
- 19:42just take forever. Or we add up all the
- 19:44money Goiko spent, all the money Daniel
- 19:46spent and we figure out that actually
- 19:48Goiko just owes Daniel a few million
- 19:49euros or whatever. And that's called
- 19:51netting. So, settlements and netting.
- 19:52And as you say, this is generally across
- 19:54lots of independent stovepipe systems
- 19:56that all have slightly different
- 19:57rounding rules or currency rules or
- 19:59storage rules or
- 20:00>> A leaky leaky pipe with the water
- 20:01leaking.
- 20:02>> pipe. And and the the
- 20:04>> [laughter]
- 20:04>> and the the language the domain terms
- 20:06for this is breaks and fails.
- 20:09And breaks and fails are your two types
- 20:11of things going wrong. One is where the
- 20:14trade didn't happen at one end or the
- 20:16other, but the other counterparty thinks
- 20:18it did. And the other is where is the
- 20:21leaky pipe. Is logically it's all
- 20:23happened. Semantically it's all
- 20:25happened, but somewhere we're missing 84
- 20:28euro cents, right? And we don't know
- 20:30where they've gone.
- 20:32>> [laughter]
- 20:33>> Or you know, 84 million euros. Or 84
- 20:36million euros, you know, I mean, yeah,
- 20:38between friends, right?
- 20:39>> Yeah, let me say 84 million, so
- 20:42So so so you know, I I remember us
- 20:44working with this client where the
- 20:46business users were insisting that they
- 20:49can't do any automated testing
- 20:52for reasons and and needed to do like
- 20:54human review and things like that. And
- 20:56actually, I mean,
- 20:58some of it made sense because some of it
- 21:00needs like human human you know, like
- 21:04domain knowledge reasoning, whatever.
- 21:06But 99% of a test
- 21:10had nothing to do with that evaluation
- 21:12moment.
- 21:1399% of the time spent in a test was
- 21:16loading the data, cleaning up the data,
- 21:19unloading the data, re-restarting the
- 21:21the thing, restarting the Those were all
- 21:23kind of it's not quality of life, but
- 21:26small chunks, small buttons that that
- 21:28actually got the thing moving. And these
- 21:31were all deterministic parts. I remember
- 21:32kind of when we built a data loader from
- 21:34Excel
- 21:36that allowed them to prepare a test case
- 21:38without opening five different
- 21:40applications and kind of registering
- 21:43different things and approving and and
- 21:45pushing them through the pipeline, just
- 21:46you know, get everything through. They
- 21:48were amazed. And and I think that's
- 21:50where again, there's a lot of benefit
- 21:52for this even if you don't want to get
- 21:54it to do the the like the core core bit.
- 21:56There's so much stuff around it
- 21:59that
- 22:00needs to work,
- 22:02but is not
- 22:03the differentiating factor. It's not
- 22:06the the kind of human making this
- 22:08evaluation. It's not your key domain
- 22:11knowledge. It's just like loading Excel
- 22:13into five databases.
- 22:15Well, I mean, I can give you an example
- 22:17of where I I was clawed one time. But
- 22:20actually, before I do that, I just want
- 22:21to pick out again something that you
- 22:22mentioned. I think it's I really want to
- 22:23kind of pull it out and give it a name.
- 22:25I feel like you're talking about the
- 22:26difference between semantic validation
- 22:28versus like syntactic or structural
- 22:30validation. I mean, you say it's just
- 22:32validation. I'm talking about how you
- 22:33have you have kind of you know, stuff
- 22:36that
- 22:38uh is is deterministic and and and is a
- 22:40side quest or a you know, a supporting
- 22:43task that
- 22:45basically just can't be done in in a
- 22:47reasonably good way and we can farm it
- 22:49out to machines. Yeah. Yeah.
- 22:53And and well, I I as opposed to stuff
- 22:55that needs a human in terms of domain
- 22:57knowledge or experience or context or
- 22:58whatever. So, so quick sidebar, I was at
- 23:01a large American bank many years ago
- 23:04and they had a one of their core again,
- 23:06but perhaps attached to the settlements
- 23:07process was a system that would
- 23:10it it used to take I don't know,
- 23:11millions and millions of trades and put
- 23:12them into lots of buckets, couple
- 23:15hundred buckets. It's all it's one of
- 23:16the banks in America, is it?
- 23:18It could well be one of the largest
- 23:20banks in America, yes.
- 23:21>> [laughter]
- 23:23>> And and they had a large complicated I
- 23:26think it was Oracle PL/SQL thing
- 23:29that would go through, you know,
- 23:30bajillions of rows. Okay.
- 23:33That's
- 23:34>> [clears throat]
- 23:34>> And and and for each row each record it
- 23:37would put it into one of these buckets.
- 23:39And this process had gradually over time
- 23:41had created more and more rules. And the
- 23:43rules were literally if, you know, this
- 23:45this field has this value in it and this
- 23:47field matches this and da da da da da da
- 23:48da da da da da dozen of these things.
- 23:50And so many many hundreds of checks.
- 23:53And if it also failed, suddenly it was
- 23:55like a catch-all bucket at the bottom.
- 23:56And it would do this big if else if else
- 23:58if else for each of several bajillion
- 24:00records.
- 24:01>> easily hide like if name equals Goiko,
- 24:03then you know,
- 24:04>> Easily. Absolutely. You know, let give
- 24:06me the rounding error into my offshore
- 24:07account. And this thing, you know, had
- 24:10gradually crept up, you know, from 20
- 24:12minutes to an hour to two hours to and
- 24:14it was now it had gone from nine hours
- 24:16to And the problem is going from nine
- 24:18hours to 10 hours is a lot more serious
- 24:19than going from seven hours to eight
- 24:21hours because going from nine hours to
- 24:2210 hours means that if I start at the
- 24:25close today, it won't be finished by the
- 24:28open tomorrow. And suddenly it was this
- 24:30big deal.
- 24:31And it was a Friday afternoon and we'd
- 24:33basically finished what we needed to do.
- 24:35And I said to a couple of the folks, I
- 24:36said, "I don't understand this domain
- 24:38model at all. My my PL/SQL is pretty
- 24:40good, right?
- 24:42Uh I'm going to try Well, I looked at
- 24:43your stored proc and it's basically the
- 24:45same thing over and over and over again.
- 24:47Guess what, right? Copy paste stuff.
- 24:49And I feel like that is not what stored
- 24:52procs do. Stored procs do set-based
- 24:55operations, right? Relational databases.
- 24:57Whereas a language like Python or Java
- 25:00or whatever is really really good at
- 25:02sequences of things.
- 25:03So, I'm going to I'm going to just as a
- 25:05as a Friday afternoon thing, we'll
- 25:07timebox it to two hours.
- 25:09We will pull out all of the records,
- 25:12apply the same logic, again, guess what,
- 25:14using graph and set and or can whatever
- 25:16to pull out the logic bits and turn it
- 25:18into some Python code.
- 25:20Turn it into the equivalent Python code
- 25:22and run it.
- 25:23And it turned out that the the Python
- 25:26code you know, we tested it against the
- 25:28last several days worth of data and the
- 25:30buckets that it all ended up in. So, it
- 25:32wasn't test-driven or anything. It
- 25:33literally it was just a spike. And this
- 25:35spike got the right records in the right
- 25:38buckets for all of the data
- 25:40except that it was now taking something
- 25:43like 11 seconds
- 25:45instead of nine hours.
- 25:47>> [laughter]
- 25:48>> Because it was the right tool. And
- 25:50again, it was it turns out it was a
- 25:51two-hour fix, right? With without any
- 25:52robots. No one in that team had enough
- 25:56breadth across more than one technology
- 25:58and no one outside of that team cared
- 26:00enough about going in and helping them
- 26:02to do this.
- 26:04Um I then went away. Someone whose
- 26:06Python was much better than mine made it
- 26:07like eight seconds.
- 26:09And then someone else migrated that to
- 26:12Java and then that ran in like three
- 26:14seconds.
- 26:15And the brilliant thing with a
- 26:17three-second job as opposed to a
- 26:18seven-hour job is that you can then put
- 26:20a web app in front of it cuz it's only
- 26:22reading. It's only a read lock.
- 26:24And you can put a web app in front of it
- 26:26and now hand it to the audit teams
- 26:29because it was an audit job and they
- 26:31could now run this thing real time
- 26:34intraday
- 26:35whenever they liked. It was no longer
- 26:37part of the nightly run book. So, I
- 26:39accidentally [laughter]
- 26:41took this job out of the run book and
- 26:42turned it into an app. I mean,
- 26:43ironically you know, you can run Java
- 26:46Java stored procs in Oracle. Like you I
- 26:48think that that was that was impossible
- 26:51for a long time. So, I don't know when
- 26:52you did that, but
- 26:54I mean, this is still not where I would
- 26:56want to have held my I'd love to know
- 26:58about the version control or source
- 27:00control of Java code embedded in Oracle.
- 27:03It's where you know, we we we did we did
- 27:05like something
- 27:07something where the code was in in
- 27:09version control, but there was a
- 27:10publishing process that was updating the
- 27:12database. So, it's like it's a
- 27:14deployment thing. It's uh but Yeah, but
- 27:16you know, I mean, the the yeah, but the
- 27:18the the the point really of all that is
- 27:20A, you don't need robots to do this. But
- 27:23you know, I I I again, I'm looking at
- 27:25LLM as you know, it's a tool, right?
- 27:27It's neither necessary nor sufficient.
- 27:29It can be useful in the right context.
- 27:31And if you put it in the right context
- 27:32and you use it well, it can be a massive
- 27:34multiplier. Most cases I'm seeing most
- 27:37content most environments I'm seeing,
- 27:39they're not using it well. They're using
- 27:40it as a blanket edict. Yeah, you have to
- 27:42rub AI into this otherwise you don't get
- 27:44your bonus.
- 27:45And they're not being given the support.
- 27:46They're not being given the learning
- 27:47tools. And they're not being given that
- 27:49tinker time. I mean, the thing about
- 27:50being independent, I'm both independent,
- 27:53is you can decide Goiko as Goiko's boss
- 27:56can decide to give Goiko a couple of
- 27:59days just to muck around with this and
- 28:01see what happens.
- 28:02Right? And I would argue that everyone's
- 28:05boss should be giving them a couple of
- 28:06days to muck around with this and see
- 28:07what happens cuz that's how learning
- 28:08works,
- 28:10And they're not. They're being told,
- 28:11"Whatever you're delivering right now,
- 28:13carry on delivering that and rub some
- 28:15co-pilot into it or whatever.
- 28:17Um other you know, otherwise otherwise
- 28:19there's going to be trouble. And also
- 28:21double your throughput."
- 28:23And
- 28:24>> [laughter]
- 28:24>> And none of this makes sense.
- 28:27Mhm.
- 28:28So, I I I kind of you know, there's
- 28:30there's a couple of things there. I
- 28:31think people generally don't
- 28:35accept [clears throat]
- 28:36like how do you put this?
- 28:38I think
- 28:39our industry is kind of obsessed with
- 28:41automation. I mean, by by by by the
- 28:43definition, we're obsessed with
- 28:45automation. And I think people think
- 28:47that automation makes things better, but
- 28:48it doesn't. Automation makes things
- 28:50faster.
- 28:52Well, I see Does it make it better or
- 28:54worse? It just makes it faster. I want
- 28:55to unpack this this this obsession
- 28:57thing. I There's a There's a certain
- 29:00level of executive certain level in
- 29:01organization that's obsessed with
- 29:03cheaper. Yeah. And the association is
- 29:05that automation means cheaper
- 29:08>> [clears throat]
- 29:09>> and we can get rid of a bunch of
- 29:10headcount.
- 29:11I think the
- 29:12There has I think we we we we like we
- 29:14like automation, but it's you're
- 29:16absolutely right. It
- 29:18It doesn't just make things faster. And
- 29:20this is the really important thing with
- 29:21automation. Automation is a trade-off.
- 29:24It makes [clears throat] things faster
- 29:26and it makes them the same.
- 29:29And when I say the same, that means if
- 29:32you got the description or the
- 29:33definition of the thing wrong,
- 29:35it will continue to be wrong every time.
- 29:38If you got it absolutely right and the
- 29:40world moves on and it becomes wrong, it
- 29:43will continue to remain wrong every
- 29:45time. So, as soon as you automate
- 29:47something, you lock it in, right? You
- 29:49lock it into whatever. If the thing
- 29:51you're locking it into is stable, is
- 29:54stable across time, is stable across the
- 29:56portfolio, whatever, brilliant. So, I
- 29:58build automation, path to live
- 30:00automation is a fantastic idea once your
- 30:03product is reasonably stable.
- 30:05You know, if the tech if the tech stack
- 30:06in your product is is volatile, is
- 30:08changing all the time,
- 30:10any effort you spend automating, you're
- 30:12going to throw away tomorrow to automate
- 30:14something else.
- 30:16So, that ties back really nice with with
- 30:17the kind of, you know, tooling thing we
- 30:18were talking about. You know, you start
- 30:20with your rules, you kind of clarify
- 30:22them in markdown. Once they become
- 30:24stable enough,
- 30:26you automate them using a linter, or you
- 30:28automate them and and you were talking
- 30:29about this kind of semantic and and
- 30:31syntactic and things like that. And I
- 30:32think, yeah, that was for syntactic
- 30:34stuff, this is kind of trivially easy.
- 30:36For semantic stuff, I I I think we still
- 30:39have a way to go to to, you know, have
- 30:41tools that semantically validate things.
- 30:43But, I think it's not it's not beyond
- 30:46implementing something that checks like
- 30:48semantically this needs to be in this
- 30:50way. We just need to kind of figure out
- 30:52what the rules are. And
- 30:54I I I think
- 30:55quite often on a semantic level,
- 30:58people don't have stable rules. These
- 31:00things evolve. They're kind of broad
- 31:01guidelines uh that are in people's heads
- 31:04that evolve. And And that's the
- 31:05interesting part, like how would you
- 31:07express that in a meaningful way?
- 31:10Yeah, I think And something else I I'd
- 31:12actually wanted to ask your advice on
- 31:14really, ask your Again, you've been
- 31:15around this You've been sort of
- 31:17tinkering with this more than I have.
- 31:19So, we've been talking about the rules,
- 31:21the the heuristics, the the guardrails
- 31:24for the product, right? Whether that be
- 31:26the code base, the whatever it is.
- 31:29I'm the the the thing I keep on tripping
- 31:31over at the moment is the rules, the
- 31:34heuristics for the
- 31:36bot itself.
- 31:38So, I'm saying to Claude, this is how I
- 31:40want you to operate.
- 31:43This is how I want you to do things.
- 31:45Phrases that don't don't refer to
- 31:47yourself in the in the first person.
- 31:49Don't you know, don't come back with
- 31:50chirpy, you know, whatever. Act like a
- 31:53computer cuz you're a computer, sort of
- 31:55thing. And it says, "Okay." And then it
- 31:58does start acting like it for about 5
- 31:59minutes. Then it says,
- 32:00"I think that's a great idea." And I'm
- 32:02like,
- 32:03you have a memory to not use the first
- 32:05person. "Oh, good catch."
- 32:09>> [laughter]
- 32:09>> Uh
- 32:10and so, I like I I'd love to figure out
- 32:13a way to
- 32:14to keep that stuff honest cuz it's it's
- 32:18clearly not. So, I I I do some of this
- 32:21through a pre-command and post-command
- 32:24tools. So, for example, I I wanted to
- 32:28never use a directory change in a
- 32:31command in the same kind of CD something
- 32:34and then something else because then it
- 32:36can't check what's been pre-approved in
- 32:38the other command and it keeps asking me
- 32:40for stupid stuff to approve that I've
- 32:42already approved. So, I've I've got it
- 32:44to build a pre-tool use hook that
- 32:47detects and and
- 32:49and detects if CD is at the start and
- 32:51and basically gives it a
- 32:53message saying don't combine CD and this
- 32:55thing, do something else. So, it would
- 32:57be reasonably simple to get it to write
- 33:00a command that says, you know, if you
- 33:02catch any of these words like great or I
- 33:05or whatever,
- 33:06just, you know, don't don't reply
- 33:10in like
- 33:11anthropomorphized
- 33:13>> Yeah. Yeah. And and yeah, it it's it's
- 33:15kind of So, I think anything anything
- 33:18that you can define in a reasonably good
- 33:20way, I think you can get it to write a
- 33:22tool for itself to to kind of
- 33:23self-correct. And and I would punish it
- 33:27by by doing this. You know, waste more
- 33:30tokens, but tokens are not the problem,
- 33:32your time is. And and
- 33:34the more it can review itself, the less
- 33:36you have to review it. And I think
- 33:38again, that, you know,
- 33:40all these tools now support hooks.
- 33:42Claude supports hooks for lots and lots
- 33:43of different things. Get it to kind of
- 33:47respect its hook get it to respect its
- 33:49its commands its instructions by hooks.
- 33:52But then again, they're bytecode in
- 33:54Claude, so it's not beyond them to kind
- 33:56of bytecode something that stops
- 33:58respecting hooks, but
- 34:00we'll see.
- 34:02Fantastic. So, okay, so we we started we
- 34:04started on on spec driven. We we
- 34:07discovered a bifurcation there. We're
- 34:09like spec driven meaning one shot versus
- 34:11spec driven meaning iterative.
- 34:13Then we got on through heuristics into
- 34:15rules into linting
- 34:18checks, which that's I I I really like
- 34:21that. That's that's my takeaway. That's
- 34:22my back pocket takeaway.
- 34:24And then we were thinking, okay, what
- 34:25would the lint
- 34:27uh analog be for a bunch of other use
- 34:29cases,
- 34:31up to and including pre and post hooks
- 34:34for for Claude itself.
- 34:36Uh um the idea that that
- 34:38perhaps right now with the level of
- 34:40maturity we've got, we should be using
- 34:42it much more for the the quality of life
- 34:44things than the
- 34:46than the core domain itself, but who
- 34:48knows? I think it changed it enough to
- 34:50to do like core domain the way I want to
- 34:51do it, but it took a few months to get
- 34:53it to do that. Yeah.
- 34:55>> So,
- 34:56um and and you know, the nice thing
- 34:57about it being a robot is that once you
- 34:59do it for one project, you just kind of
- 35:02scale it to other projects as well. And
- 35:04that's what makes it really powerful
- 35:05because I have I'm I'm currently working
- 35:07on two products, and I'm kind of
- 35:09effectively because it evolved on one
- 35:11product, I was able to just apply it on
- 35:13the other product without
- 35:14having to show it. But, I I do think it
- 35:17does take
- 35:18it does take quite a quite an investment
- 35:20in time to to train it to work properly.
- 35:22And okay, so so you said we're wrapping
- 35:24up. Where where would I look for that?
- 35:26So, I'm I'm potentially I'm advising
- 35:29some folks on on exactly this journey.
- 35:31You know, some higher-up has said adopt
- 35:33blah.
- 35:34And rather saying, you know,
- 35:36push back or adopt it blindly, how do we
- 35:38do this in a sensible way that's going
- 35:40to be sustainable, realistic, work for
- 35:42us?
- 35:43What would a good place cuz there's so
- 35:45much noise out there. There's so little
- 35:47signal.
- 35:48>> is publishing their own frameworks. I
- 35:49think Yeah. I I I really think about
- 35:51them as sourdough starters. So, any of
- 35:54them is going to be equally bad for for
- 35:56what you need to do.
- 35:58But,
- 35:58>> [laughter]
- 35:58>> I I if you take something that works for
- 36:00somebody else and quickly iterate on on
- 36:03removing the parts that don't work for
- 36:04you,
- 36:05and and and noticing really really
- 36:07noticing where
- 36:12you're hitting your head or where the
- 36:15machine is constantly making the same
- 36:16mistakes, and then you're quickly
- 36:18evolving rules around that for your your
- 36:20stuff. I I think that's the way to go.
- 36:22And And from that perspective, it really
- 36:24doesn't matter if you adopt like one of
- 36:27these B mod or or or was it Spark or any
- 36:31of these other kind of published
- 36:32frameworks, or just like start yourself
- 36:35with automating bits and pieces of your
- 36:37process. I think that's also a good
- 36:38thing where
- 36:40spotting parts in your process where
- 36:42you're wasting time.
- 36:44Yeah.
- 36:45And automating parts of that. So, at the
- 36:47moment, I'm And I'm not saying copy
- 36:49this, I just want to kind of give you an
- 36:50example of what I have is I have a
- 36:54command that helps me write like a
- 36:57commander's intent template and reminds
- 37:00me to do goals, anti-goals, constraints,
- 37:03and things like that. Just because it
- 37:05can do some code analysis and and and
- 37:07figure out similar things in the past.
- 37:08Anti-goals are probably going to be the
- 37:10same for kind of a bunch of things we
- 37:11do.
- 37:12Then I have a command that does
- 37:15from that impact analysis on an idea
- 37:18that goes through the code base and
- 37:19figures out all the places that need to
- 37:21be changed without changing them and and
- 37:24figuring out what what we're missing in
- 37:26terms of functionality, demo pages, UI
- 37:29design, APIs, and and just documenting
- 37:32these things. Then I have another
- 37:33command that from that like creates an
- 37:37iterative implementation plan where a
- 37:40user can actually see observe results at
- 37:43every every step and do change no more
- 37:46than three files at every step. So, I
- 37:48can review it quickly through Git diff.
- 37:50And then I I basically just let it run.
- 37:53So, I think this whole kind of a set
- 37:54that the mental model for this is the
- 37:56RPI loop like research, plan, and and
- 37:58invest implement, but people do it in in
- 38:01different ways. Some people like seeing
- 38:02pseudo code. Some people like seeing
- 38:05Like, for example, with this product I'm
- 38:07working on now, I get it to do static
- 38:10HTML pages that I can review.
- 38:12Like key moments
- 38:14of the application, how the application
- 38:16changes, and then I can play on the
- 38:17static pages. Once that's
- 38:19to my satisfaction, I just let it
- 38:21implement.
- 38:23Um so, diff- different products,
- 38:24different things will need different
- 38:26approaches, but I think kind of figuring
- 38:28out what your process is and kind of
- 38:29codifying it is really important. And
- 38:32then starting with any of these kind of
- 38:34frameworks
- 38:36is is perfectly fine as long as you
- 38:38approach it as as like we are very
- 38:40quickly going to kind of modify it to
- 38:42our stuff.
- 38:43That sounds like some
- 38:45solid gold advice to leave our listeners
- 38:47with.
About this transcript
This page contains the full transcript of Spec-Driven Dev Is Back. But Not How You Think • Daniel Terhorst-North & Gojko Adzic • GOTO 2026 by GOTO Conferences, generated from the public captions YouTube serves with the video. The transcript has 7,254 words across 1,144 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.