HomeVideos

The Cure for the Vibe Coding Hangover — Corey J. Gallon, Rexmore

Now Playing

The Cure for the Vibe Coding Hangover — Corey J. Gallon, Rexmore

Transcript

1330 segments

0:15

Inspiration strikes. You've got an idea

0:18

and you know exactly how you're going to

0:20

build it.

0:24

You fire up your favorite AI coding

0:26

agent. You jam in those prompts and then

0:29

you hand it over.

0:31

Hey, look at him go.

0:35

[music] He's done it. That is to say,

0:37

you've done it. The app works. This is

0:40

what 10x engineering really feels like.

0:42

You're a genius. A rebel in the AI

0:45

revolution.

0:47

But then Monday rolls around. You want

0:50

to add a feature or you want to change

0:53

the way that it works and you realize

0:55

that you don't understand it. You can't

0:57

maintain it and you have to throw most

1:00

or all of it away.

1:03

Vibe coding is the low-spec zero

1:06

planning approach to AI accelerated

1:08

development that feels productive but

1:11

results in brittle unmaintainable demo

1:14

wear. The hangover is the resulting

1:17

despair when you try to build

1:19

maintainable, understandable software

1:21

this way.

1:24

Don't worry though, there is a cure and

1:27

it's the framework for building with AI

1:28

coding agents that we're going to

1:30

discuss today.

1:32

So, you'll enjoy this talk if you value

1:34

programming as a daily learning

1:37

experience.

1:38

If you want to understand and own the

1:41

software that you write using AI coding

1:43

agents just as you do all of the other

1:45

software that you write. If you want to

1:48

be the boss of the coding agents and not

1:50

their confused intern.

1:52

If working with agents makes you feel

1:54

like a prompt jockey these days and no

1:56

longer an AI engineer. If you're sick of

1:59

throwing away code, burning time and

2:02

tokens, or if you want to use coding

2:04

agents to build production applications

2:07

that do real work,

2:09

on the other hand,

2:14

>> it's not for you, Jen.

2:17

>> It's not for you, JEN. [laughter]

2:22

>> It's not for you, Jen.

2:26

This talk is not for you if programming

2:30

is a job and not a craft that you're

2:32

refining and that works for you. If

2:35

you're satisfied just having AI do it

2:38

for you without needing to understand

2:40

how or why or if vibe coding gets you

2:43

what you need and that's good enough.

2:45

And these statements aren't a judgment.

2:49

They're just very different paths than

2:51

what we're taking today.

2:54

I'm Corey. I run an AI native holding

2:56

company where we're actively buying and

2:59

building businesses in the technology

3:02

investments and education verticals.

3:05

I've been feverishly building AI coding

3:07

agents since 2022.

3:11

I love and am passionate about all

3:13

things technology. I am a massive coffee

3:16

nerd. In fact, catch me in the hallway

3:18

track and ask me about the Ethiopian

3:21

yoga chef from Misty Valley that I've

3:24

been obsessively roasting lately. And

3:27

I'm a pickle ball fanatic. I'm playing

3:29

in a tournament tomorrow. In fact,

3:32

so let's talk about the framework in

3:35

overview.

3:37

The framework's comprised of three

3:39

pillars. There are the principles which

3:41

are the philosophy underpinning all of

3:44

it.

3:45

There is the process which is the

3:47

workflow for actually getting software

3:49

built using AI and then there are tools

3:53

which are accelerators or enablers of

3:55

the process but also reflect our

3:58

principles. So you may ask what can you

4:01

build with the framework and the answer

4:03

is really anything. The framework's

4:06

adaptive to all types of software, but

4:08

here are a few examples of working

4:10

software in the wild right now that's

4:12

been built with this approach.

4:14

[clears throat]

4:16

uh specialized litigation support

4:18

applications for law firms,

4:22

real-time appliance monitoring packages

4:24

for cooking,

4:26

digital publishing systems for dynamic

4:29

content replatforming,

4:31

and on and on and on and on. The point

4:36

is that these aren't toys. These are

4:39

real software applications

4:42

that do real work every day. And

4:45

critically they're evolved and

4:47

maintained by AI engineers who apply

4:50

this framework.

4:53

So let's make a start and get into the

4:55

principles. Principles broadly map

4:58

across three categories. sort of general

5:01

principles that apply overarchingly and

5:04

then principles that skew more towards

5:07

the planning phase of the process and

5:10

principles that skew more towards the

5:12

implementation phase of the process. 10

5:15

in all. So [clears throat] let's talk

5:17

about each of them. Our first overall

5:20

principle is that AI engineering is

5:23

accelerated learning.

5:25

What were the problems that this came

5:27

from? Well, treating AI coding agents as

5:30

pure productivity tools just to crank

5:33

out code faster, using AI to generate

5:36

software and not learning anything from

5:38

the process and then 6 months later

5:40

being no better as engineers having

5:43

plateaued or worse becoming dependent on

5:46

AI for so many things, debugging,

5:48

modifications, architectural decisions.

5:52

That's the opposite of AI augmentation.

5:54

That's AI dependency.

5:57

So the big idea here is that the

5:58

framework is not just about building

6:01

faster. It's about learning as we go.

6:05

Every step in the framework creates

6:08

specific learning opportunities. So that

6:11

you're not just shipping software,

6:13

you're building yourself.

6:15

The software is valuable, but the

6:16

engineer that you become is

6:18

exponentially more valuable. And that's

6:21

why we say always be learning or you may

6:24

say a always b

6:28

larning always be learning.

6:33

Our next general principle is that you

6:36

are the architect and the agent is the

6:39

implement.

6:41

Treating AI agents as replacements for

6:43

architectural thinking rather than

6:46

implementers of your decisions when

6:48

they're well specified is a big problem.

6:51

So the primary idea here is keep the

6:54

architect and implement boundary crystal

6:57

clear. You own the thinking and that

7:00

means architecture and interfaces, the

7:03

intent of the system, the structure,

7:06

[clears throat]

7:07

design decisions and the associated

7:09

tradeoffs. And then the agent handles

7:12

the doing. That's implementation, typing

7:15

code, following patterns, implementing

7:17

the tests that you specify, banging out

7:20

boilerplate. That's why we say delegate

7:22

the doing and not the thinking.

7:29

Our third general principle is a little

7:31

bit counterintuitive, but it's slow down

7:34

and iterate in order to go fast.

7:39

The problem is the starting over cycle.

7:43

Without deliberate iteration on

7:46

validated work, you end up repeatedly

7:48

starting from scratch. And so 3 months

7:51

in, you've had multiple abandoned

7:54

attempts instead of consistently

7:56

[snorts]

7:56

improving on one single system. So the

8:00

big idea here is that deliberate

8:02

iteration enables compounding returns on

8:05

both understanding and on productivity.

8:08

And so yeah, week one feels slow, but

8:12

week two builds momentum and then week

8:14

three is dramatically faster.

8:17

We say compound progress, accelerate

8:20

velocity.

8:27

So the first of our planning related

8:30

principles is that specification

8:33

is far greater than prompt engineering.

8:37

Prompt engineering treats AI

8:39

interactions as an optimization problem

8:42

rather than a communication problem.

8:45

Trying to find magic words that produce

8:47

the right output rather than clearly

8:50

defining what right means.

8:53

So the big idea here is that

8:55

specifications are very different than

8:58

prompts in the classic sense.

9:00

Specifications are structured precise

9:03

definitions of requirements of behavior

9:07

interfaces and acceptance criteria.

9:11

Writing specifications forces

9:12

architectural thinking. You must

9:15

understand the problem completely and

9:18

then define interfaces precisely and

9:21

anticipate edge cases.

9:24

In turn, specifications provide clear,

9:27

unambiguous direction. The agent

9:30

implements what you specified and not

9:33

what it interprets from conversational

9:35

prompts.

9:38

We say write the blueprint, not the

9:40

prompt.

9:44

Our next planning related principle is

9:47

define done before implementing.

9:51

Starting implementation without

9:53

executable tests and observable success

9:56

criteria means that agents lack clear

9:59

completion criteria and immediate

10:00

feedback. They can't self- validate.

10:04

They can't self-correct

10:06

and they don't know when they're done,

10:07

at least not in consistence with your

10:10

specifications. And so the big idea here

10:14

is defining done before implementation

10:17

keeps you thinking deeply about

10:20

requirements and then it enables the

10:22

agent to work autonomously.

10:25

By defining tests up front, we give

10:28

agents clear stop conditions that then

10:31

enable them to get immediate feedback

10:33

during implementation and self-correct

10:36

wherever necessary. We'll talk more

10:38

about multiensory validation later.

10:41

But we enable agents to observe through

10:44

visual like what renders senses,

10:48

auditory senses like what they can hear

10:50

through logs and errors and tactile

10:52

senses meaning how they interact with

10:54

the system. Tests verify correctness of

10:58

spec of implementation whilst sensors

11:01

reveal the actual behavior of the

11:03

software as it's being implemented. And

11:05

so done means that a feature is done

11:08

when it tests pass and when the sensors

11:12

come back validating that everything's

11:14

working as expected.

11:16

We say specify success then build

11:22

feature atomicity is our next principle.

11:25

Writing non-atomic features means

11:27

leaving the decomposition work for

11:30

implementation time which forces agents

11:33

to make architectural decisions on the

11:35

fly. The primary idea here is that

11:39

feature atomicity forces us to

11:42

completely decompose

11:44

each feature during specification and

11:47

then in turn enable the agents to

11:50

implement within a manageable scope.

11:52

Features in this sense become

11:55

implementation work units. They're

11:58

atomic, irreducible tasks that are ready

12:00

for an agent to execute completely.

12:04

Keep features as small as possible to

12:06

make agent implementation as successful

12:08

as possible.

12:10

We say reduce until irreducible.

12:19

So the last of our planning related

12:22

principles is dependencydriven

12:24

development.

12:26

Implementing without explicit dependency

12:28

analysis means treating all features as

12:30

independent when in fact we know that

12:32

they form an interconnected graph. So

12:35

the big idea here is that

12:36

dependencydriven development forces you

12:38

to understand how features relate and

12:41

how they integrate and then in turn that

12:44

he ensures that agents never implement

12:47

features that depend on incomplete work.

12:51

We say schedule implementation by

12:53

dependencies.

12:57

And so now on to our implementation

13:00

related principles. We start with

13:02

implement one atomic feature at a time.

13:06

Working on multiple features treats

13:08

implementation as parallel streams of

13:11

work that can be context switched

13:13

freely. But we know that implementation

13:16

quality is contingent on sustained

13:19

focus, complete context and very tight

13:22

feedback loops.

13:25

Jumping between features fragments our

13:27

focus.

13:29

So the big idea here is that agents

13:32

implement one single feature that's been

13:34

defined atomically as previous. You

13:37

study it and understand it. You validate

13:40

that it works. You commit it as a

13:42

checkpoint and then you move on to the

13:45

next feature.

13:46

This rhythm creates both momentum and

13:49

also deepening understanding. We stop

13:52

juggling multiple features

13:54

simultaneously.

13:56

We implement features sequentially with

13:58

complete focus studying each

14:00

implementation to maintain understanding

14:03

and then commit each of them as a

14:05

checkpoint to build both working

14:08

software and engineering knowledge.

14:11

We say complete one commit one continue.

14:17

Our next implementation related

14:19

principle is context engineering and

14:21

management.

14:22

Treating context as something that just

14:24

happens automatically rather than

14:26

something you actively engineer is a big

14:28

problem. You let conversation history

14:31

passively accumulate instead of curating

14:34

actively what really matters for context

14:38

and then if you don't build context

14:40

resilience

14:42

state will not persist eventually and we

14:46

lose resilience and continuity to that

14:49

matter. So the primary idea here is do

14:52

not rely on conversational state

14:54

persisting capture architectural

14:56

decisions in persistent documents like

14:59

specifications plans and design

15:01

documents and we'll talk about what

15:02

those mean here in the process section

15:04

and then build context from these

15:06

artifacts not from your memory. We say

15:10

curate context don't accumulate it.

15:14

And our last principle is make it work,

15:18

make it right, make it fast. And this is

15:21

borrowed from the annals of software

15:24

engineering. But treating all three

15:27

phases of this as equal from the start

15:30

or trying to achieve them all

15:32

simultaneously is a big problem. The

15:35

framework focuses on getting to make it

15:38

work. working software that can be

15:40

shipped and used and then only after

15:42

real usage reveals what matters do we

15:45

selectively invest in make it right and

15:49

make it fast. So the big idea here is

15:52

stop pursuing elegance and performance

15:53

upfront. Explicitly direct the agents to

15:57

make it work and we'll talk about how to

16:00

define that. But we want simple

16:03

functional implementation that passes

16:05

tests and enables us to ship quickly and

16:07

then let real usage reveal what deserves

16:11

further investment. We say burn sorry we

16:14

say build, learn,

16:17

improve. So there we have them. our 10

16:20

principles,

16:24

the philosophy that makes the framework

16:27

work.

16:30

Now, let's check back in with our hung

16:32

over vibe coder as he's been exposed to

16:35

the principles of the framework.

16:39

Yeah, mind sufficiently blown yet? Well,

16:43

stick with us, mate. It gets even

16:44

better.

16:46

All right. Now, let's transition to

16:49

process.

16:50

The process is where we put all of the

16:53

principles to work. You can think about

16:55

this as principles in action. The

16:58

framework process has two distinct

17:00

phases. There's the planning phase where

17:03

you do all of the architectural thinking

17:05

to define what to build and then the

17:07

implementation phase where the agent

17:10

executes your specifications with both

17:12

your oversight and validation.

17:15

Planning produces the artifacts that

17:17

enable autonomous agent implementation.

17:21

Implementation then uses those artifacts

17:24

to build working software feature by

17:26

feature.

17:28

All right, on to the planning phase.

17:31

Planning is where you complete your

17:32

architectural thinking. You transform a

17:36

vague project idea into atomic sequenced

17:40

fully specified features ready for

17:42

implementation.

17:43

This is purely your work. Architectural

17:46

decisions, decomposition, specification

17:49

writing, dependency analysis. The agent

17:53

can assist as a thinking partner, but

17:55

you make every decision.

17:58

The five planning steps are sequential

18:01

and build on each other. Vision,

18:04

features, specification, dependencies,

18:08

plan.

18:11

You'll notice that this is a highly

18:13

iterative process of extracting and

18:15

refining thinking into tangible

18:17

artifacts that can be used to build

18:19

software with the agent. The inputs and

18:23

outputs of each step in the planning

18:25

phase are templates and completed

18:28

templates respectively. Heaps of work

18:30

has been done in advance to create

18:33

well-thought well ststructured templates

18:36

to both guide thinking and capture the

18:39

results.

18:41

So the first step of planning is vision

18:44

capture. And the purpose of this step is

18:46

to transform your vague project idea

18:49

into a complete structured master

18:52

project specification that articulates

18:54

the problem, the users, functionality,

18:58

scope and workflows.

19:00

So the problem that this step in the

19:02

planning phase solves is that your

19:04

initial project idea exists only in your

19:07

head usually and it's incomplete. When

19:09

we start, this is typically the case.

19:11

You have some general sense of the

19:13

problem and an approach, but details are

19:15

fuzzy. Implicit assumptions are

19:17

unexamined and critical aspects are

19:19

uninformed.

19:20

So without structured exploration and

19:23

refinement, you can't communicate your

19:25

thinking, you can't articulate

19:27

requirements clearly, and you can't

19:29

create a shared foundation that agents

19:31

can build upon. You need to examine and

19:34

refine your thinking before you can

19:36

decompose it into features or

19:37

architecture. And so what we're going to

19:40

do here is think out loud with an agent.

19:43

Optionally, but strongly recommended to

19:46

refine and capture your vision through

19:48

five sections.

19:51

Project purpose. So we clarify the pro

19:54

the problem that you're solving, who

19:56

experiences it, and the core value that

19:58

your software delivers.

20:01

Essential functionality.

20:03

Identify the three to five fundamental

20:06

workflows that solve the problem. Scope

20:09

boundaries. Make explicit decisions. And

20:12

we call these now, not next. So now as

20:16

in must have it for the make it work

20:19

version. Not meaning it's out of scope

20:22

and next meaning future enhancements.

20:26

Then technical context.

20:29

answer basic questions like where does

20:31

it run? How do users interact? What

20:33

systems does it connect to? And then

20:35

lastly, workflow details. So for each of

20:38

those three to five core workflows,

20:40

document the goal, document the highle

20:43

steps for each of the the workflows and

20:45

then the expected outcome.

20:47

And we iterate through these sections

20:50

until your vision is clear and complete.

20:54

Working with an agent here is really

20:55

great because it can help surface gaps,

20:57

suggest edge cases and probe

20:59

assumptions. But critically, you make

21:01

all decisions about the vision.

21:04

The primary output of this step

21:07

[clears throat] is the master project

21:08

specification.

21:10

And this is a structured artifact that

21:12

captures your complete vision for the

21:14

software in its make it work version.

21:16

This becomes the foundation for

21:18

extracting features in planning step

21:21

two. And as we go through every step in

21:25

the process, you can see down here on

21:28

the bottom left corner which of the

21:30

principles are applied in that step. We

21:33

won't talk through each of the

21:34

principles, but this demonstrates the

21:36

cohesiveness of the framework.

21:41

All right, step two in planning is

21:43

feature identification and

21:45

categorization.

21:46

And the purpose of this step is to

21:48

systematically extract all units of

21:50

functionality from your master project

21:52

specification and then organize them

21:54

into a categorized feature inventory.

21:58

The problem that this solves is you

21:59

don't jump directly from highle vision

22:02

to detailed feature specifications.

22:04

That's too big of a leap. Your master

22:07

project specification captures what the

22:10

software does at a high level, but you

22:12

need an intermediate step that

22:13

progressively refineses this thinking

22:15

into concrete, manageable units of

22:17

functionality.

22:19

Without systematic extraction and

22:21

categorization, you're trying to specify

22:24

features without a complete inventory of

22:25

what needs to be built, and you can't

22:28

see natural groupings and relationships.

22:31

You lack the structured artifact that's

22:32

needed for the next refinement step and

22:35

you're forced to hold all functionality

22:37

in your head rather than externalizing

22:39

it for analysis.

22:41

The input to this step is the master

22:43

project specification from the previous

22:45

step. And so what we're going to do here

22:47

is systematically analyze the master

22:49

project specification to extract all

22:51

units of functionality and then

22:53

categorize them.

22:55

[clears throat and cough] H so work

22:57

through the master project specification

23:00

step by step or section by section

23:02

rather with targeted extraction

23:05

questions. So it's like for project

23:07

purpose what foundational capabilities

23:10

does this system need for essential

23:13

functionality what discrete capabilities

23:15

are required for each of the workflows

23:17

for scope boundaries. What

23:19

infrastructure is needed to make the

23:22

make it work version work now for

23:26

technical context? What platform

23:28

integration and interface features are

23:30

needed for each of the key workflows?

23:34

What handles input? What processing

23:36

occurs? What output is there? Which

23:38

errors should we anticipate? And how do

23:40

we feed back? And then cross cutting

23:43

needs across all of this. what security

23:46

logging configuration and testing

23:48

features span the entire system. We're

23:50

going to document each feature source

23:53

for traceability and that's where it

23:55

came from in the master project

23:56

specification.

23:58

Next, we build the raw feature list. So,

24:01

we capture every capability [sighs] that

24:04

you identify, but we're not going to

24:05

organize these just yet. Just ensure

24:07

that we have comprehensive extraction.

24:12

We want to challenge completeness with

24:14

questions like what handles errors or

24:16

what validates input? What provides

24:18

feedback?

24:20

Next, we move on to analyzing those

24:22

features. So, we analyze the entire

24:24

feature list to start identifying

24:26

natural groupings based on your features

24:29

and your project type. You identify,

24:32

it's not a hard rule, but three to seven

24:34

categories that kind of reflect how your

24:37

specific software is structured. And

24:39

then we move on to categorization.

24:41

Determine the categories. We assign each

24:44

feature to its best fit category. And

24:46

then we create a unique feature ID like

24:49

for example core 001 or API 101. These

24:55

categories emerge from analyzing your

24:57

actual features and not from

24:58

predetermined category templates.

25:01

And then [clears throat] lastly, we

25:03

estimate feature complexity. And this is

25:04

just an initial estimate of how complex

25:06

each extracted feature is. Is it easy?

25:09

Is it medium? Is it hard? So the output

25:12

from this step is the feature inventory.

25:15

It's a complete categorized list of all

25:18

discrete units of functionality. Each

25:20

feature includes a unique ID, a

25:22

description, a complexity estimate, and

25:24

we're able to trace it back to its

25:26

source section in the MPS.

25:31

Step three is iterative specification

25:35

development.

25:36

>> [clears throat]

25:37

>> The purpose of this step is to transform

25:39

each feature from your feature inventory

25:42

into a complete atomic implementation

25:46

ready specification that defines exactly

25:48

what needs to be built, how it will be

25:51

validated and what it depends on. The

25:54

problem that this critical step solves

25:56

is you can't jump directly from a

25:58

feature inventory to feature

25:59

implementation. That's again too big of

26:02

a leap. So your feature inventory lists

26:05

discrete capabilities, but each feature

26:07

still needs to be fully specified before

26:10

a coding agent can implement it. Without

26:13

iterative features,

26:15

[clears throat and cough]

26:15

sorry, without iterative specification

26:18

development, you're giving coding agents

26:20

highle descriptions and hoping that they

26:22

infer details correctly. You can't

26:25

validate that features are truly atomic

26:27

until you try to specify them. You have

26:30

no systematic way to identify

26:32

dependencies.

26:34

You lack the implementation blueprints

26:36

that enable autonomous agent work. And

26:40

ultimately, you're relying on prompt

26:42

engineering instead of comprehensive

26:44

specifications.

26:46

The input to this step is the feature

26:49

inventory from the previous step. And so

26:51

what we're going to do here is

26:53

collaborate with an agent to transform

26:55

each feature using a three-level

26:57

refinement pattern.

27:00

So first we draft a user story in the

27:04

typical user story fashion. As a user

27:07

type, I want to perform some action so

27:10

that I can obtain some benefit. This

27:13

captures who needs this, what they're

27:14

doing, and why it matters.

27:17

Next, we def determine our

27:20

implementation contracts, and

27:22

[clears throat] these exist in three

27:25

iterative levels of refinement. So we

27:27

start at level one in plain English.

27:31

Just describe what the feature does in

27:32

natural language. Walk through what

27:34

happens, what it receives, what it does,

27:37

and what it produces. We then take that

27:41

[clears throat] and refine it further to

27:43

level two to logic flow. Kind of the

27:46

input, logic, output. We translate the

27:49

description into structured pseudo code

27:52

with clear input, step-by-step logic,

27:55

and then defined output. And this really

27:58

forces clarity about what comes in, what

28:01

happens, and what goes out.

28:04

And then we refine further to level

28:06

three, which is formal interfaces. And

28:08

here's where we define and formalize

28:10

contracts with exact signatures, data

28:13

structures, and API specifications.

28:16

We define exact input types, return

28:19

types, and errors for each component.

28:23

Next, we move on to specifying

28:24

validation contracts.

28:27

And again, we do this in three levels.

28:31

Level one is once again plain English.

28:33

So, we describe the scenarios, identify

28:36

all situations that need validation,

28:39

happy path, error cases, edge cases,

28:42

security properties. We then refine that

28:45

to level two which is our test logic and

28:48

we use given when then structure for

28:51

that. So we translate each scenario into

28:54

structured verification logic with setup

28:56

trigger and expected outcomes.

29:00

We further then refine that to our third

29:02

level which is once or analogous to the

29:04

previous step formal test definition.

29:06

And so this is where we define exact

29:08

test interfaces with setup inputs

29:11

precise assertions and any tear down.

29:15

And at this point we need to validate

29:18

the atomicity of the feature. We need to

29:20

make sure that the feature can be

29:22

implemented in a single focused session

29:25

and that it is truly one atomic feature.

29:28

We've defined feature atomicity

29:30

previously. But if this feels at this

29:33

point like the specification is

29:34

scattered or it defines or describes

29:37

multiple capabilities, we're going to

29:39

split the feature into multiple features

29:43

and then repeat the process.

29:46

Then lastly, after we've determined that

29:49

the feature is atomic, we're going to

29:52

identify dependencies. And this is now

29:54

where we really determine what other

29:55

features must exist before this one can

29:58

be implemented. We document explicit

30:01

binary dependencies meaning this either

30:03

depends on another feature or it

30:06

doesn't. There's no partial dependency.

30:09

The output for this step in the process

30:12

is a complete atomic feature

30:15

specification for every single feature

30:18

in the feature inventory.

30:20

And that spec defines the user story,

30:23

the technical blueprint which again is

30:25

comprised of those three levels, the

30:28

validation strategy and its three

30:30

levels, all of the dependencies and any

30:33

implementation notes.

30:37

Step four in the planning process is

30:39

dependency analysis. And so here the

30:43

purpose is to transform our complete set

30:45

of feature specifications into a

30:46

validated dependency matrix that will

30:49

then define the exact order in which

30:51

features can be implemented. This

30:54

eliminates circular dependencies and

30:55

reveals very natural phases of

30:58

implementation.

31:00

The problem that this step in the

31:02

process solves is severalfold. that your

31:05

feature specifications contain accurate

31:08

dependency declarations, but these

31:10

dependencies are scattered across

31:11

individual documents. So you've got a

31:13

local picture like feature X depends on

31:16

feature Y, but we don't have the global

31:18

picture yet. And without this global

31:20

view synthesized into a dependency

31:22

matrix, you can't see the complete

31:25

dependency graph, detect circular

31:28

dependencies that span multiple

31:29

features, identify the natural

31:32

implementation phases where groups of

31:34

features can be built together, or

31:36

determine which features must be

31:38

implemented first versus which can wait.

31:42

So the input to this step is the feature

31:45

specifications or sorry are the feature

31:48

specifications with dependency

31:49

declarations that have come out of the

31:51

prior step.

31:53

So what we're going to do here is

31:55

synthesize scattered dependency

31:56

declarations into one unified matrix and

31:59

then we're going to validate it. So we

32:02

start by extracting the matrix. Here we

32:04

gather all dependencies from individual

32:06

feature specifications into a visual

32:08

grid. So each row is a feature and each

32:12

column is also a feature. And then we go

32:15

row by row and mark an X where a row

32:18

feature depends on a column feature.

32:22

Next we generate a graph. So we create a

32:25

visual diagram using graph viz or

32:27

mermaid or you pick it from the matrix

32:30

showing features as nodes and

32:33

dependencies as edges.

32:36

The graph makes circular dependencies

32:38

immediately visible as closed loops and

32:40

reveals the natural layered structure of

32:43

the dependencies of the application.

32:47

Next, we validate and clean. So, we

32:49

apply the binary dependency test to

32:51

every mark dependency and that goes

32:54

something like does the row feature

32:57

require the column features specific

32:59

output configuration or functionality to

33:02

work? If yes, then yes, it's a

33:05

dependency. If no,

33:08

then remove it. And we track changes in

33:11

the matrix. And so like it may be a

33:13

technical dependency.

33:16

This this step helps us clarify things

33:17

like maybe coordination only or tool

33:19

sharing, right? Like not true hard

33:22

formal dependencies. And then we go to

33:24

the next step. We we regenerate the

33:26

graph, right? We're going to kind of

33:27

iterate this way. And last, we detect

33:31

cycles. So we're going to visually

33:33

inspect the graph and the agent can help

33:34

us here with this too. Uh for circular

33:37

dependencies

33:39

and if we find them we apply resolution

33:42

strategies across one of four but really

33:46

three steps. First we try dependency

33:49

elimination meaning let's go back and

33:51

reexamine it with the binary test. If

33:53

that doesn't work then we try revised

33:55

specification. So let's revise the

33:58

interfaces. We can rethink contracts. So

34:00

features don't need each other's output.

34:03

Thirdly, we try feature splitting. And

34:05

so that's try and fe split it down

34:07

again. May this feature may not be

34:09

atomic. And then it's a last resort. And

34:11

this is where it gets messy. The

34:12

consolidation is like the last resort

34:14

strategy here. But we're not going to

34:15

touch too much on that today. And then

34:18

we iterate after each cycle. We update

34:20

the matrix. We regenerate the graph. And

34:22

we recheck for cyclical dependencies

34:25

until zero remain.

34:28

The outputs for this step are twofold.

34:31

We [clears throat] have a validated

34:32

dependency matrix which is again our

34:33

visual grid that shows complete

34:36

dependency graph with all circular

34:38

dependencies resolved, all dependencies

34:40

validated as technically necessary and

34:43

clear implementation layers defined.

34:46

And then we have the dependency graph

34:48

which is a visual diagram showing

34:50

features as nodes and dependencies as

34:52

edges making structure and layers

34:55

immediately visible.

34:58

The fifth and final step of the planning

35:01

phase is implementation plan

35:03

development. The purpose is to transform

35:06

your validated dependency matrix into a

35:08

comprehensive phase organized

35:10

implementation road map that sequences

35:12

features into dependency layers,

35:15

identifies parallel development

35:16

opportunities, defines phase completion

35:19

criteria, and establishes the validation

35:22

strategies that enable the

35:23

implementation loop.

35:26

The problems that this step solves are

35:29

that without a comprehensive

35:31

implementation plan, you face

35:33

implementation chaos. Despite having

35:35

complete specifications

35:37

and a validated dependency matrix, you

35:39

can't answer which features should be

35:41

implemented first and in what order.

35:43

Which can be developed in parallel. Now,

35:45

we won't talk about that at all today,

35:47

but it is a feasible accelerator.

35:49

How do you validate that a group of

35:50

features works together before moving

35:52

forward? and when is it safe to begin

35:55

implementing features that depend on

35:56

earlier work. The input to this step is

35:59

the validated dependency matrix and

36:01

dependency graph from step four. And so

36:04

what we're going to do here is transform

36:06

the dependency matrix into an executable

36:09

implementation strategy.

36:11

And that begins with us organizing the

36:14

phases of implementation via a top

36:16

topological sort. So we organize

36:20

features into implementation phases

36:21

based on their depth in the dependency

36:24

map. Features with no dependencies

36:27

become phase one. Features depending

36:30

only on phase one become phase 2. And we

36:33

continue this pattern creating phases

36:35

where each phase depends only on

36:37

previous phases. We then verify that no

36:40

features within the same phase depend on

36:42

each other. And lastly we identify the

36:44

critical path which is the longest

36:46

dependency chain.

36:48

Next it comes parallel analysis, but

36:51

we're going to skip that for today.

36:53

Next is validation strategy planning. So

36:56

for each phase, we define binary success

36:58

criteria. What tests must pass, what

37:01

integration points must work, how you'll

37:03

verify that features work together, and

37:05

then we establish feedback loops that

37:07

enable autonomous agent refinement and

37:09

binary progress tracking. Right? Is a

37:11

feature implemented or is it not? There

37:13

is no 20% implementation tracking.

37:17

Think through what could go wrong when

37:18

features combine and what validation

37:20

provides confidence for dependent

37:22

features in later phases. And then last

37:25

we move on to implementation sequencing.

37:27

This is where we define the complete

37:29

execution strategy. So we have phase

37:31

gates meaning how is it we determine

37:33

we're ready and completely implemented a

37:35

given phase and ready to move on to the

37:37

next one. We have task assignment

37:39

guidance for the agents. how we need to

37:42

tell them how it is they're going to

37:43

select the next feature to work on. In

37:45

the event that they get blocked, we have

37:47

blocker management process where we

37:48

explain how it is that they handle and

37:50

resolve these blockers. And last, we

37:52

have progress tracking mechanisms that

37:54

we define. These are at the feature

37:55

level, at the phase level and also

37:57

monitoring the critical path. The output

38:00

of this phase or sorry this step is the

38:02

implementation plan and that's a

38:05

comprehensive phased organized execution

38:07

strategy that sequences all features

38:10

into dependency layers identifies

38:12

parallel development opportunities

38:14

develops binary validation gates for

38:16

each phase and provides the guidance

38:18

needed for autonomous agent

38:20

implementation sessions.

38:24

All right. And with that, we're now

38:27

ready to talk about the implementation

38:28

loop.

38:30

Implementation is where your planning

38:32

artifacts guide the transformation of

38:34

specifications into working tested

38:36

software. Unlike planning, which is

38:39

linear and proceeds through five

38:41

distinct steps, implementation is a

38:44

tight rapid loop executed repeatedly for

38:48

each atomic feature.

38:50

Before we get too far into that though,

38:52

we need to understand and unpack the

38:54

multiensory feedback loop. This is a

38:56

really key idea in the framework.

39:00

The agent implements code and then it

39:02

executes it while gathering feedback

39:03

through these digital senses.

39:06

The visual sense and you can think about

39:08

that as what renders

39:10

the auditory sense what the system

39:13

reports and the tactile sense how

39:17

interactions respond.

39:19

This sensory feedback provides rich

39:21

diagnostic information about what's

39:23

actually happening in the application.

39:25

The agent runs formal tests to validate

39:27

against acceptance criteria. But by

39:30

correlating sensory feedback with test

39:32

results, the agent both understands what

39:35

failed from the tests and why it failed

39:38

from the sensors. This loop continues

39:41

until all acceptance criteria pass and

39:44

all sensors report clean execution.

39:48

So step one in the implementation loop

39:50

is context assembly.

39:53

And the purpose here is to transform

39:55

planning artifacts into a curated

39:57

context package that enables autonomous

39:59

feature implementation with a single

40:01

coding session for the agent. The

40:05

problem that this solves is that you

40:07

have atomic features fully specified and

40:09

sequenced, but you can't just throw

40:11

everything at the agent and hope it

40:12

figures out what to do. Without

40:14

systematic context assembly, you're

40:16

dumping entire planning documents into

40:19

agent sessions, which wastes context

40:21

window on irrelevant information. This

40:24

results typically in the agent making

40:27

decisions without critical context and

40:29

without you or less less frequently

40:32

stopping and asking for guidance. And

40:34

ultimately though, this turns what

40:36

should be relatively autonomous

40:38

implementation sessions into a constant

40:40

back and forth. It wastes context window

40:44

and it results in validation gaps. So

40:46

the input to context assembly is the

40:50

implementation plan again only sections

40:53

that are relevant for the specific

40:55

atomic feature that's going to be

40:56

implemented. The feature specification

41:01

and all of the referenced dependencies

41:04

that are specified in that that

41:07

specification.

41:10

And what we're going to do here is

41:11

curate the exact information that's

41:13

needed for this one atomic feature

41:16

through four steps. We start with

41:18

feature specification assembly. And this

41:20

is where we include the complete feature

41:22

specification. And you'll recall that

41:24

that's the user story, the technical

41:26

contracts, acceptance criteria, and we

41:29

at reference using the that at symbol,

41:31

right? All dependencies. This is the

41:34

primary blueprint that the agent will

41:36

follow. Our next step is dependency

41:40

context gathering. So we follow all of

41:43

the at references in our feature

41:44

specification.

41:46

And each at reference points to a depend

41:49

a dependency feature specification and

41:52

the actual implemented code. And that's

41:54

critical to note because per the

41:57

framework definition all dependencies

41:59

must be implemented previously. So this

42:01

is both specification and code. We pull

42:04

these in so that the agent understands

42:06

exactly what it needs to integrate with.

42:09

Next, we move on to implementation

42:11

guidance. And this is where we extract

42:13

relevant sections from the

42:14

implementation plan. So, we don't just

42:16

dump the whole implementation plan in.

42:18

The agent needs to know things like what

42:20

phase is this feature in? What are the

42:23

phase completion criteria? What's the

42:25

validation strategy for this phase? We

42:27

just bring in the sections that

42:29

contextualize this features

42:30

implementation and its validation. And

42:33

then last we enable sensory

42:36

capabilities. So we read the features

42:38

acceptance criteria to identify which

42:40

digital sensors are required.

42:43

Visual validation language like sees,

42:46

displays, renders that requires the

42:48

visual sense tools. Logging or error

42:51

language requires auditory sense tools.

42:53

Interaction language like clicks,

42:55

submits, completes requires tactile

42:58

sense tools. So we're going to at

43:00

reference the appropriate tool usage

43:02

guides that we've written by the way and

43:04

we'll talk about this in the tool

43:05

section but once per tool so that it's

43:07

reusable across all features so that the

43:09

agent knows how to gather the required

43:11

sensory feedback.

43:13

The output from this step is the curated

43:16

context package and this is a focused

43:19

assembly of exactly what the agent

43:21

needs. The feature specification,

43:24

dependency code, the for any and all

43:27

features that uh this feature integrates

43:29

with

43:31

relevant implementation guidance and

43:33

sensory tool instructions for

43:35

validation.

43:38

And now we're finally here.

43:41

And note that this is the only one step

43:44

in this entire framework that is the AI

43:47

writes code. But now we get to the

43:49

implementation loop [sighs]

43:51

which is the last step of

43:53

implementation. And the purpose is to

43:55

transform an atomic feature

43:57

specification into working tested code.

44:00

This solves a specific set of problems.

44:02

Without structured implementation,

44:05

agents will either write all code before

44:07

testing anything and that accumulates

44:09

problems that compound or they write and

44:11

test ad hoc without systematic feedback

44:14

and that makes refinement a bit of a

44:16

guessing game.

44:18

The write everything then test approach

44:20

fails because problems accumulate

44:22

undetected and you're ultimately

44:24

debugging multiple interconnected issues

44:26

at once. The ad hoc approach fails

44:28

because without comprehensive sensory

44:30

feedback, you miss problems that tests

44:33

don't catch.

44:34

Tests pass, for example, but the UI

44:36

doesn't render correctly or the workflow

44:39

completes but errors fill the logs. The

44:42

feature quote works but user

44:44

interactions are broken.

44:46

So this step solves all these problems

44:49

through a single multiensory

44:52

implementation loop because features are

44:55

atomic. The complete imple

44:57

implementation fits in one context

44:59

window. The agent maintains full

45:01

understanding from start to finish.

45:03

There's no context loss, no

45:05

reconstruction, and no degraded

45:06

fidelity.

45:08

The input to the implementation loop is

45:10

the context package that was assembled

45:12

previously. And so what we're going to

45:14

do here is execute the tight multiensory

45:18

feedback loop, which starts by writing

45:20

code. The agent implements the code

45:23

following the feature specifications

45:24

technical contracts.

45:27

It translates all three levels of

45:28

contracts into working code ensuring

45:30

interfaces, inputs, outputs, and error

45:33

handling match the specification

45:35

exactly. Then we move on to execute and

45:38

sense. This is where we get

45:39

comprehensive digital feedback. The

45:42

agent immediately executes the code

45:44

that's been written and gathers

45:46

comprehensive sensory feedback through

45:48

the three digital sensors based on

45:49

acceptance criteria requirements. And

45:52

we've talked about the visual, auditory,

45:54

and tactile senses that are at play

45:56

there. The agent captures rich

45:59

diagnostic information about what's

46:01

actually happening during execution and

46:03

then moves on to test and validate. And

46:06

this is where the agent runs all test

46:08

scenarios from the validation contract

46:09

section of the specification and tests

46:12

provide binary pass fail spec uh signals

46:15

against the specification's

46:16

requirements.

46:18

So now we take the output of the last

46:21

two steps of the loop and we correlate

46:24

them all. So the agent correlates

46:26

signals across all active sensors and

46:29

all of the test results. Multiple

46:31

sensors reporting the same issue

46:32

confirms a diagnosis.

46:34

Conflicting signals behind sensors may

46:36

reveal hidden complexity. But this

46:38

integrated analysis reveals both what

46:41

failed from the tests and why it failed

46:44

from sensory feedback which enables

46:46

targeted refinement by the agent.

46:50

And we loop and loop and loop until the

46:54

feature is complete. And the feature is

46:55

complete if all tests pass and all

46:58

sensors report clean execution. So

47:01

there's no errors in blogs, there are no

47:03

UI rendering issues, interactions work

47:06

properly. At that point, the feature is

47:08

complete. Otherwise, the agent refineses

47:10

based on the diagnostic information

47:12

that's been gathered and loops through

47:14

the loop again.

47:18

When we determine that these convergence

47:20

criteria are met, then the feature is

47:23

complete and the agent creates an atomic

47:26

git commit containing only this features

47:28

changes with a structured commit message

47:30

including feature ID, specification

47:32

summary, validation confirmation, and

47:35

implementation nodes. And at that point,

47:37

the feature is fully complete and the

47:40

codebase is ready for the next feature.

47:43

So the output here is we've finally got

47:45

there. We've got a fully working tested

47:49

feature that's passed all acceptance

47:51

criteria, all tests and has been

47:54

validated by all three digital sensors

47:56

and the feature is ready for integration

47:59

into the broader codebase.

48:02

So, let's check back in with our Vibe

48:04

coding dev and see how he's fairing now

48:06

that he's been exposed to both the

48:10

principles and the process of the

48:12

framework.

48:15

Well, it seems that we've even roused

48:17

the tiger's attention and astonishment

48:19

here. Minds have been blown. Minds have

48:22

been expanded. Well, we're rounding the

48:25

corner now. Let's move into tools.

48:32

The framework requires four foundational

48:34

capabilities that enable work done via

48:37

the process.

49:24

So let's talk about the coding

49:26

environment.

49:28

The coding environment is a complete

49:29

development workspace that supports two

49:31

fundamentally different types of work

49:33

that are happening simultaneously.

49:35

your architectural thinking and planning

49:38

and the agents autonomous cap uh

49:40

implementation and testing. And so there

49:42

are four core components of the coding

49:45

environment. The first is an AI coding

49:47

agent obviously. Next is an execution

49:50

sandbox and this is a safe isolated

49:54

environment where all agent written code

49:56

executes and tests are run. Autonomous

50:01

implementation requires the freedom to

50:03

experiment, iterate, and occasionally

50:06

break things. And the sandbox provides

50:08

complete development capabilities in a

50:10

disposable, risk-free environment with

50:13

easy reset and no consequences for

50:15

failure.

50:17

Next, we need an IDE or a text editor if

50:20

you must. And I'm going to avoid the

50:21

holy wars of IDE versus text editor

50:23

here. You pick the one that suits you.

50:26

And last is voice input. And this is the

50:29

rapid capture system that converts

50:32

speech to text at thinking speed.

50:36

Planning work involves externalizing

50:37

architectural thinking and that's often

50:40

incomplete, exploratory, and iterative.

50:43

Voice input removes the typing

50:45

bottleneck, letting you think out loud

50:47

and capture ideas much faster than

50:49

typing. I really can't oversell just how

50:53

massively impactful a good voice input

50:55

tool is in applying the framework.

50:58

Next we have the multiensory feedback

51:00

system. This is a comprehensive

51:03

validation infrastructure that gives

51:04

agents the ability to observe their

51:06

implementations through three

51:08

complimentary digital sensors. Those

51:10

being visual, auditory and tactile and

51:13

it enables autonomous refinement through

51:15

an analogous breadth of observation that

51:18

humans use during development. The core

51:21

components here are visual sense tools

51:24

which enable direct observation of what

51:27

was produced and what exists. They

51:29

capture UI rendering like screenshots or

51:32

layout styling system state so database

51:35

contents configuration session data and

51:38

code structure which is the actual

51:40

implementation. Visual observation

51:43

catches problems that logs and tests

51:45

miss broken rendering incorrect state

51:48

and structural issues.

51:50

Auditory sense tools. These tools

51:52

monitor what the system reports. They

51:55

capture logs and that's the system

51:57

narrating its oper operations if you

51:59

will, errors and warnings, that's

52:02

problems the system detects and API

52:04

responses so interystem communications

52:07

and critically stack traces like

52:09

detailed failure information. This

52:11

diagnostic information explains why

52:13

things fail, not just that they failed.

52:16

And lastly, tactile sensors. These tools

52:19

enable active interaction testing. They

52:23

simulate and execute user workflows. So

52:26

that's completing tasks end to end. API

52:29

interactions, think request response

52:32

cycles, performance validation like

52:34

response times and resource usage,

52:37

security checks and integration testing.

52:40

These interactions reveal whether

52:41

software behaves correctly under actual

52:43

use, not just in isolated test

52:46

scenarios.

52:48

Next we talk about context engineering

52:50

and assembly tools. And this is a

52:52

systematic approach to assembling

52:54

focused complete context packages for AI

52:57

agents through deliberate cross

52:59

references. Think declarative linking

53:02

slash commands for process automation

53:05

templates for structural predictability

53:08

and markdown documentation for efficient

53:11

passable documents. So let's talk about

53:15

the cross referencing system here. This

53:16

is a declarative linking mechanism that

53:18

allows documents to explicitly reference

53:21

other documents or code files or

53:23

sections that enables automatic context

53:26

assembly by following these dependency

53:28

chains. Most good coding agents will

53:34

understand and follow these. Then we

53:37

talk slash commands or whatever the

53:39

equivalent is in your selected coding

53:41

agent environment. But these are process

53:44

automation mechanisms that trigger

53:46

multi-step framework workflows through a

53:48

single invocation. And it's so useful

53:51

for things like context assembly, for

53:53

instantiating a template, for

53:55

implementing sessions uh for

54:01

sorry for uh implementation session

54:03

initialization

54:06

and then the template system. And these

54:09

are the structured document templates

54:11

for every single framework artifact.

54:13

Master project specification, the

54:15

feature specification, dependency

54:17

matrix, implementation plan,

54:19

implementation record. And these ensure

54:21

consistent format and completeness.

54:23

Without templates, you reinvent

54:25

specification structure every time. And

54:29

starting from scratch is exhausting.

54:32

And lastly, markdown documentation

54:34

format. We all know what it is. Uh, but

54:36

agents are so literate in it that it's

54:38

vital to have tooling that rapidly

54:39

converts inputs to markdown. Basically,

54:42

anything that you want to communicate to

54:43

an agent should be instantly convertible

54:45

to markdown in the tool chain.

54:48

Lastly, version control and progress

54:51

tracking. This is a dual mechanism

54:53

system that uses I'm just going to say

54:56

it git for implementation history

54:58

through atomic feature commits and

55:01

secondly the implementation plan for

55:04

feature completion tracking. These work

55:06

together to provide complete project

55:08

provenence and current state visibility.

55:11

And I will say that this is the simplest

55:13

form of project tracking. It can get

55:16

certainly more

55:18

complex and integrated with other

55:21

systems than this.

55:23

But uh for version control, git or the

55:25

equivalent, I think that goes without

55:27

saying. It's like saving progress in a

55:29

video game. It's obvious and essential.

55:32

And then the implementation plan with

55:34

progress tracking, we take that same

55:36

planning artifact created from a

55:38

template earlier and we use it for

55:40

feature tracking. Oh, sorry, for

55:42

progress tracking. So, Git will show us

55:44

what changed and when, but it doesn't

55:46

show us the project state. And the

55:49

implementation plan fills that gap. It's

55:51

a planning artifact that also serves as

55:54

the progress tracker.

55:58

So, here's a quick look at my tool

56:01

stack. I won't spend time talking

56:03

through it in detail, but uh catch me in

56:06

the hallway and I'm happy to go through

56:07

it.

56:13

>> [music]

56:32

[music]

56:33

>> All right. Well, if you've enjoyed this

56:35

talk and you want the slides from it and

56:38

other resources, including the

56:40

soundtrack, I built a site just for this

56:42

talk. So, check it out at

56:44

vibecodinghangover.com.

56:47

[music]

56:54

[music]

57:00

>> [music]

Interactive Summary

This talk provides a structured framework for using AI coding agents effectively, moving away from 'vibe coding'—a disorganized, unmaintainable approach—toward a disciplined engineering process. The framework is built on three pillars: principles (emphasizing continuous learning, architectural oversight, and deliberate iteration), a two-phase process (planning and implementation), and a supporting toolset. The speaker argues that by treating AI as an implementer rather than a replacement for architectural thinking, and by using multi-sensory validation, developers can create robust, production-ready software while actually improving their own engineering skills.

Suggested questions

4 ready-made prompts