Vibe Coding Is The WORST IDEA Of 2025

Duration

17:10

Captions

1

Language

EN

Published

Aug 13, 2025

Description

Vibe coding might sound trendy, but in this video Dave Farley explains why vibe coding is one of the worst ideas in software engineering and software development in 2025. Discover what vibe coding really is, why it fails in real-world projects, and how relying on AI coding tools without proper engineering practices can lead to disaster. If you care about writing better code, improving your programming skills, and avoiding costly mistakes, you need to hear this. - ❗ Get 30% Off ALL Of Dave's BDD and Acceptance Testing Courses THIS WEEK ONLY ❗ Choose the course that's right for you, and use this code at checkout: at-bdd-j8x3k2 Find out more about the courses available HERE ➡️ https://courses.cd.training/pages/acceptance-testing - Dave on X ➡️ https://x.com/davefarley77 Dave on LinkedIn ➡️ https://www.linkedin.com/in/dave-farley-a67927/ Dave on bluesky ➡️ https://bsky.app/profile/davefarley77.bsky.social Modern Software Engineering on X ➡️ https://x.com/ModernSoftwareX Modern Software Engineering on LinkedIn ➡️ https://www.linkedin.com/company/modern-software-engineering Modern Software Engineering on bluesky ➡️ https://bsky.app/profile/modernswe.bsky.social - ⭐ PATREON: Join the Continuous Delivery community and access extra perks & content! ➡️ https://bit.ly/ContinuousDeliveryPatreon 🎥 Join Us On TikTok ➡️ https://www.tiktok.com/@modern.s.engineering - CHANNEL SPONSORS: Equal Experts is a product software development consultancy with a network of over 1,000 experienced technology consultants globally. They increase the pace of innovation by using modern software engineering practices that embrace Continuous Delivery, Security, and Operability from the outset ➡️ https://bit.ly/3ASy8n0 TransFICC provides low-latency connectivity, automated trading workflows and e-trading systems for Fixed Income and Derivatives. TransFICC resolves the issue of market fragmentation by providing banks and asset managers with a unified low-latency, robust and scalable API, which provides connectivity to multiple trading venues while supporting numerous complex workflows across asset classes such as Rates and Credit Bonds, Repos, Mortgage-Backed Securities and Interest Rate Swaps ➡️ https://transficc.com - 👕 T-SHIRTS: A fan of the T-shirts I wear in my videos? Grab your own, at reduced prices EXCLUSIVE TO CONTINUOUS DELIVERY FOLLOWERS! Get money off the already reasonably priced t-shirts! 🔗 Check out their collection HERE: ➡️ https://bit.ly/3Uby9iA 🚨 DON'T FORGET TO USE THIS DISCOUNT CODE: ContinuousDelivery - BOOKS: 📖 Dave’s Book "Modern Software Engineering" is available as paperback, or kindle here ➡️ https://amzn.to/3DwdwT3 and NOW as an AUDIOBOOK available on iTunes, Amazon and Audible. 📖 The original, award-winning "Continuous Delivery" book by Dave Farley and Jez Humble ➡️ https://amzn.to/2WxRYmx 📖 "Continuous Delivery Pipelines" by Dave Farley Paperback ➡️ https://amzn.to/3gIULlA ebook version ➡️ https://leanpub.com/cd-pipelines 📖 "The Software Developers’ Guidebook Amazon ➡️ https://amzn.to/4f9ozFK ebook version ➡️ https://leanpub.com/softwaredevelopersguidebook NOTE: If you click on one of the Amazon Affiliate links and buy the book, Continuous Delivery Ltd. will get a small fee for the recommendation with NO increase in cost to you. - #vibecoding #aicoding #aidevelopment #softwareengineering #softwaredevelopment #programming

Captions (1)

00:00

On February the 2nd this year, Andre

00:02

Karpathy, an OpenAI founder and formerly

00:05

head of AI at Tesla, introduced a new

00:08

term for a style of programming with AI

00:11

assistance. He called it vibe coding.

00:13

Now, I'm no stranger to the ideas of too

00:16

long didn't read and semantic diffusion,

00:19

but I think that this might have been

00:20

some kind of record. This was a thousand

00:23

character tweet, and it seemed that few

00:25

people even got to the second half.

00:28

Andre describes what he means by vibe

00:31

coding in the first 300 or so characters

00:34

of a thousand character tweet. The rest

00:37

describes some of the consequences of

00:39

this naive toy town approach to

00:41

programming. Now, I don't know Andre

00:43

personally, so I can't tell what he had

00:46

in mind with his tweet, but it reads to

00:48

me as sarcasm. Near the end of the

00:51

tweet, he says, "It's not too bad for

00:53

throwaway weekend projects, but it's not

00:56

really coding. I just see stuff, say

00:59

stuff, run stuff, and copy and paste

01:01

stuff, and mostly it works." So, I think

01:04

that Vibe coding is at least up for the

01:07

prize of the worst software idea of the

01:09

year so far. Nevertheless, it seems to

01:11

have gone viral and now is a well-known

01:14

phrase in our domain. And so, that's our

01:18

topic for today.

01:26

Hi, I'm Dave Farley and welcome to the

01:28

modern software engineering channel. If

01:31

you haven't been here before, please do

01:33

hit subscribe and if you enjoy the

01:35

content, hit like. It helps us reach a

01:38

bigger audience. Thank you for your

01:40

help. The idea and reality of having a

01:43

relaxed chat with a large language model

01:45

that results in a working system is

01:48

impressive and seductive, but it seems

01:50

to me to miss the point almost entirely

01:53

of what programming is really about.

01:56

This gets us back to that blight of the

01:59

software industry, the idea that writing

02:01

code is the hard part. Non-technical

02:04

people believe this is true because code

02:06

looks so complex and mysterious to them.

02:09

developers believe that it's true

02:10

because code is comforting and precious

02:13

to them and clearly defines their skills

02:16

and separates them from the

02:17

non-technical people who presumably

02:19

aren't as smart because they can't read

02:21

the code. We've built a technical

02:23

recruitment industry on this premise

02:25

that the defining characteristic of a

02:27

good programmer is the set of languages

02:29

and frameworks that they know. We have

02:32

people who define their jobs by the

02:34

tools that they use. I'm a Java

02:36

programmer. on a React developer and so

02:38

on. I've admitted before that I have

02:41

hired programmers who haven't used the

02:43

same technology that we were using on a

02:45

project and I've never regretted that so

02:48

far. In my experience, you can learn a

02:50

programming language if you're good at

02:51

programming enough to get by with it in

02:54

a few days, maybe a couple of weeks.

02:56

Doing software development well is hard,

02:59

very hard, but the difficulty is not

03:02

created by programming languages. So

03:05

let's think about the starting point in

03:07

Andre's tweet. We can give into the

03:09

vibes and forget that the code even

03:11

exists. Well, the other group of people

03:13

that do that are the sometimes

03:15

non-technical people who want to achieve

03:17

something via a computer. Up to now

03:20

though, we human programmers have played

03:22

the role of the coding assistant in this

03:24

conversation, translating what it is

03:27

that they want into something that

03:28

works. So how well does that usually go?

03:32

Not so well, I'd argue. certainly very

03:34

poorly for any software of any size or

03:36

complexity. This often goes very poorly

03:39

indeed. And so far we humans are still

03:42

smarter than the machines. This isn't

03:44

because it's so difficult to translate

03:46

what people want into a programming

03:48

language. It's because it's so hard to

03:51

bake problems down into the precise

03:54

deterministic instructions that LLM or

03:57

not are still how computers ultimately

04:00

work. Let me pause there and say thank

04:03

you to our sponsors. We're extremely

04:05

fortunate to be sponsored by Equal

04:06

Experts and Transfig. Transfig is a

04:09

financial technology company applying

04:11

advanced continuous delivery techniques

04:13

to deliver low latency trade routting

04:16

services to some of the biggest

04:17

financial institutions in the world.

04:19

Both of these companies though offer

04:21

products and services that are extremely

04:22

well aligned with the topics that we

04:24

discuss on this channel every week. So

04:26

if you're looking for excellence in

04:28

continuous delivery and software

04:30

engineering in general, please do click

04:32

on their links in the description below

04:33

and check them out. If you look at

04:36

programs from years ago and modern

04:39

programs, there's something kind of

04:41

weird going on. There's seemingly a

04:43

persistence, a consistency to the level

04:46

of detail that we need to express to

04:48

make a working program. And that's been

04:51

true for decades. However we encode the

04:54

level of detail that we need to define,

04:56

it's pretty consistent. Programming

04:58

languages aren't strange because of some

05:00

fashion or masochistic trait in

05:03

programmers. They are tools that have

05:06

evolved to be good at expressing an idea

05:08

clearly and with the required level of

05:10

precision to achieve an outcome from the

05:13

box of billions of switches that make up

05:15

a modern computing device. Programming

05:17

languages aren't more complex than real

05:19

world human languages. They're simpler,

05:22

more strictly constrained, and more

05:24

precise. That's to our advantage in

05:26

trying to achieve our goals when

05:28

programming. Programming languages are

05:30

tools that are designed to help us to

05:32

structure our thinking so that we can

05:35

decompose problems into the steps that

05:37

are necessary to achieve the outcomes

05:40

that we are striving for. So the idea

05:42

that we can do better if we adopt a

05:45

vague imprecise expressive richness

05:48

that's in human languages to precisely

05:51

define behaviors in a computer seems to

05:53

be very far from the truth and missing

05:55

the point almost entirely to me. So vibe

05:58

coding is not even close to being the

06:00

right answer really. Another example of

06:02

humans attempting to achieve clarity and

06:04

precision with natural language is the

06:06

law. And if you've ever had to read any

06:09

legal document for any purpose at all, I

06:11

think you'll agree with me that this is

06:13

not really what we might hope for in

06:15

terms of clarity and precision. We can

06:18

think of the act of programming from a

06:20

variety of different perspectives. I'm

06:22

sure that most the most common way to

06:24

think of this is probably to think of

06:26

the act of writing code in a programming

06:28

language. But I am somewhat skeptical of

06:30

the use utility of this. It's rather

06:33

like defining a plumber in terms of

06:35

their use of a wrench. There's more to

06:38

it than that. And the things beyond the

06:40

syntax and organization of code are more

06:43

interesting and more complicated parts

06:45

of programming. The shapes that we paint

06:47

with the code and the outcomes we

06:49

achieve with it are both more

06:51

interesting and more useful than the

06:52

code itself. I think that ultimately

06:55

there are three goals for programming

06:57

languages that really matter. One to

07:00

help us to organize our thinking about a

07:03

problem. Two to communicate our

07:05

understanding to other humans. And three

07:08

to tell a computer what we want it to

07:10

do. Each of these is important to the

07:12

act of programming and represent

07:13

different levels of value in the

07:15

programs that we write. The hardest part

07:18

of programming seems to me understanding

07:20

the problem that we're faced with in

07:22

enough detail that we can see that

07:24

whatever we come up with is likely to

07:26

make a good solution. Programming

07:28

languages solve this problem by giving

07:30

us tools to constrain our thinking in

07:33

ways that help us to compartmentalize

07:35

our picture of the solution that we're

07:37

aiming for so that we can scope it and

07:40

manage the complexity of it. They allow

07:42

us to deal with parts of the problem

07:44

separately from other parts using

07:46

techniques like modularity, cohesion,

07:49

separation of concerns, abstraction, and

07:51

managed coupling. This kind of thinking

07:54

about writing programs is a mix of

07:56

programming language constructs that

07:58

help us to build these structures into

08:00

our code and our innate knowledge and

08:03

understanding of design that we build up

08:05

from experience. Programming languages

08:08

can help to steer our thinking via their

08:10

design and the rest then is down to us.

08:13

A big problem for us as programmers and

08:16

for large language models as programmers

08:19

is that we need to learn to apply some

08:21

sense of good taste in our design

08:24

choices to make effective use of these

08:26

language constructs. And we've all seen

08:28

enough counter examples to know that not

08:31

everyone does that. But our poor large

08:33

language models have been trained on all

08:36

the code, the good, the bad, and the

08:39

ugly. And unfortunately, there's more

08:41

bad and ugly out there than there is

08:43

good. And we as a profession have also

08:46

not been very good at defining what good

08:49

really looks like to differentiate it

08:51

from the bad and the ugly. If you ask 10

08:53

programmers to tell you one thing that

08:55

makes the difference between good code

08:57

and bad, you'll probably get 15

08:59

different answers. This means that large

09:01

language models are probably not going

09:03

to have a great sense of what makes good

09:05

code from their training data. So we

09:08

either have to tell them or accept them

09:11

creating bad code. And to be fair, this

09:14

is all rather complex and nuanced

09:16

because what makes great code in one

09:19

context may be too simple or might be

09:21

overkill in another. I certainly have my

09:24

own set of defaults and my book is an

09:27

attempt to define some generic

09:28

cornerstone ideas that I think are

09:31

generally enough to help. But even then,

09:34

it's still contextual. My background and

09:37

experience has led me to a reasonably

09:39

defensive evolutionary approach to

09:41

design and development. I think that the

09:43

strongest mental approach is to assume

09:45

that our guesses, whatever they might

09:47

be, are probably wrong and so work in

09:49

ways that allow us to correct that when

09:51

we find out where we're wrong. I believe

09:53

that the only meaningful measure of

09:56

quality in our code then is our ability

09:58

to change it. So I always strive for the

10:01

simplest, easiest to read, easiest to

10:03

change solution that I can find. But

10:05

what does ease of change really mean

10:08

when a large language model rewrites all

10:10

of the code from scratch nearly every

10:11

time, however small the change? Does

10:13

that mean that all the code is now

10:15

equally easy to change? Well, not

10:18

really. The code's only easy to change

10:20

if we can also determine that after each

10:23

change, however big or small, it still

10:26

does everything that it's supposed to.

10:28

But how can we determine that unless we

10:30

specify it in detail precisely what our

10:32

system is meant to do? For humans, this

10:35

sense of what is it meant to do is often

10:37

implicit. It isn't usually written into

10:40

the code. But for AI generated code,

10:43

that's an even bigger problem. I think

10:45

there are three big problems that the

10:48

use of AI in programming highlights for

10:51

us. How do we specify what it is that we

10:54

want with any degree of precision? How

10:56

do we confirm that what we that we got

10:58

what we wanted? and how do we retain our

11:01

ability to make measurable progress in

11:04

small controlled steps? The first

11:06

problem goes to the vagueness and

11:08

imprecision of natural language. The

11:11

second highlights the even more

11:13

important role of automated testing for

11:16

code written by an AI. And the third is

11:19

about another quite deep problem, the

11:22

profound difference between the way that

11:24

machines write code and the way that we

11:26

humans do. Fundamentally, this matters

11:29

because of our ability to reliably

11:31

reproduce a result. All successful

11:34

systems evolve over time. That means

11:37

that we need to be able to change them

11:39

when our circumstances or our

11:41

understanding changes. Humans who are

11:44

good at building complex systems do so

11:46

by compartmentalizing the problems so

11:49

that they can retain their ability to

11:51

make change safely in one part of the

11:53

system without those changes leaking out

11:55

into other parts of the system. This is

11:58

true in physical engineering as well as

11:59

software engineering and it results in

12:02

all complex systems being built in this

12:04

sequence of small changes however we

12:07

organize the building of them. So my

12:09

idea that the definition of highquality

12:11

in software is defined by how easy it is

12:13

to change is I think rather important

12:17

because we must nearly always be able to

12:19

change it. This highlights the

12:21

importance of ideas like continuous

12:23

integration and continuous delivery for

12:26

building complex software systems. To me

12:28

this is independent of whether or not we

12:31

use AIs to write the code. AIS though

12:34

don't write code the way that we do.

12:37

Most of them generate the code from

12:39

scratch, often after every small change.

12:41

Ironically, this same problem in

12:44

ignoring the importance and ability to

12:45

revisit and correct or enhance code has

12:48

been the stumbling block that has seen

12:50

off every other attempt at raising the

12:52

level of abstraction in programming from

12:54

4G's and model driven development in the

12:57

1990s to low code and no code systems.

13:00

Now they are all built on the assumption

13:03

that the code would be right first time

13:06

and wouldn't need correcting and so

13:08

roundtpping the ability to go back to

13:10

existing code and correct or enhance it

13:13

was difficult if not impossible. Many of

13:15

these attempts were not even version

13:17

controllable and we seem to be in danger

13:20

of making the same mistake yet again

13:22

with AI programming. Ignoring the

13:25

problem of being able to update the code

13:27

is stupid because it relies on us and

13:30

the world being perfect and neither of

13:32

us are. AI has this problem and it

13:35

doesn't at the same time. If it can

13:37

recreate each even complex software from

13:39

scratch given some instructions then do

13:42

we still really need incrementalism? I

13:44

think there are two answers to this but

13:47

neither line up with vi well with vibe

13:49

coding. If I as a human programmer build

13:52

a complex system, complex enough so that

13:54

I can't hold every last detail of what I

13:57

want and what I did in my head and now I

14:00

want to make a small change to it

14:02

without breaking things. I can only be

14:04

confident of my ability to do that in

14:07

two ways. I can test everything and then

14:09

run all my tests again later to confirm

14:11

that they still pass. or I can design my

14:15

system in a ways that allow me to change

14:17

code in one part place without worrying

14:19

too much about what may happen

14:21

elsewhere. But that second approach is

14:23

foundationally built on the assumption

14:25

of deterministic in incrementalism in

14:28

execution and design. Can I be confident

14:31

that my compiler or language will

14:33

interpret the code that I didn't change

14:36

in exactly the same way as it did last

14:38

time? Can I be equally confident that my

14:40

AI can do the same? What do I version

14:43

control to achieve this? What can I

14:46

version control to achieve this? If I

14:48

can do this, I only have to worry if my

14:50

new change is correct and the isolation

14:52

between the old code and the new code is

14:54

good enough for me to rely on. But if I

14:56

can't, I'm lost. If the AI regenerates

15:00

all the code from scratch every time or

15:02

does that occasionally or is learning

15:04

new things and so changes how it

15:06

interprets my instructions, then I can

15:09

no longer trust it to recreate something

15:11

that works as it did before. So I need

15:14

to check that it does. This makes

15:16

automated testing, continuous

15:17

integration, and continuous delivery

15:19

even more important for AI generated

15:22

code than it is for human written code.

15:24

And this isn't just me saying this. I

15:27

recently saw an excellent video making

15:30

the same point from an open AI

15:32

researcher. My point and his point is

15:34

that the best way to prompt an AI is

15:37

with an executable specification. That

15:40

is a precise accurate example that

15:43

describes exactly how the system you

15:46

that you want to build should behave in

15:49

clearly defined repeatable

15:50

circumstances. So that these

15:52

specifications both clearly define what

15:55

we want the system to do and also allow

15:57

us to verify that it does it.

15:59

Programming moves then from specifying

16:02

implementation detail to more clearly

16:05

and more precisely specifying the intent

16:08

of the system that we want to build. If

16:10

you'd like to learn more about how to do

16:12

that, check out my training course,

16:14

Acceptance Testing BDD from Stories to

16:16

Executable Specifications, which

16:18

includes an example of programming out

16:20

with AI like this. So, Vibe coding

16:22

doesn't address any of these problems.

16:25

It's simply not good enough. Software

16:27

engineering isn't dying, it's changing.

16:30

I'd argue that these three problems are

16:32

fundamental to the nature of code, AI

16:35

generated or not. And any next step in

16:38

programming must address all of them or

16:41

it's not going to work. Thank you very

16:42

much indeed for watching. And if you

16:45

enjoy our stuff here on the Modern Stor

16:47

Engineering channel, please do consider

16:48

supporting our work by joining our

16:50

Patreon community. And if you're already

16:52

a Patreon member, thank you very much

16:55

indeed once again for your support. And

16:57

I hope you're enjoying the privileges

16:59

that you get from being a member. Thank

17:01

you and bye-bye.

Video Information

YouTube ID: 1A6uPztchXk
Added: Aug 17, 2025
Last Updated: 6 months ago