HomeVideos

How Kent Beck shapes the software engineering industry

Now Playing

How Kent Beck shapes the software engineering industry

Transcript

3549 segments

0:00

The human part is the hardest part in

0:02

software engineering.

0:04

>> This is the biggest cosmic practical

0:06

joke ever. We were promised here's this

0:08

computer and if you completely

0:10

understand this computer, you'll be

0:12

fine. That's all you need to do.

0:13

>> When did TDD come along?

0:16

>> I was just kind of farting around and I

0:18

would write the test before I wrote the

0:20

code. And I can remember laughing out

0:22

loud cuz it was such a stupid idea. Why

0:25

would you write a test that you know is

0:27

going to fail? TDD is a good example

0:29

where it almost went out of style

0:31

completely. The big part of it is I work

0:33

on something for a while and then I

0:35

switch to something else. I moved on to

0:36

the next thing. TDD is out there [music]

0:39

and then there were people who used it

0:41

as a moral cudel like you should be if

0:45

you're not using TDD you're not

0:47

professional. Extreme programming was

0:49

born. I didn't want Grady BCH to ever

0:52

say that he was doing this thing. So I

0:55

had to pick a moniker that was

0:57

unattractive enough that somebody would

0:59

try and steal it. A little bit of thumb

1:01

the nose at the establishment. Extreme

1:04

sports were there. I like the analogy

1:06

with extreme sports. 17 people rolled,

1:08

but you're the first one listed. The

1:10

agile manifesto.

1:12

>> Things weren't going very well because

1:14

there's all these people and I want my

1:16

stuff in. No, I want my stuff in and

1:18

that contradicts your stuff. And we took

1:19

a break. We walked out and [music]

1:22

Martin and Jim Highmith stayed behind.

1:25

When we came in from the break, there

1:27

was the basics of [music] the manifesto.

1:30

For a couple of years, we've had AI

1:32

alums. So, one of the things is that the

1:35

pace of development is definitely

1:36

accelerated. One thing I wonder

1:43

Ken Beck is one of the living legends of

1:45

the industry. He's greatly shaped the

1:46

software engineering profession and

1:48

[music] keeps impacting it even today.

1:50

But there's not been a podcast episode

1:51

covering his whole career from start to

1:53

present [music] until today. In this

1:55

conversation, we cover how Ken grew up

1:57

with computers in the 70s and how he

1:59

fell in love with small talk. The origin

2:01

stories behind TDD, extreme programming,

2:02

and the Agile Manifesto and while agile,

2:05

the word was a [music] mistake. lesserk

2:07

known stories like how he got fired from

2:09

Apple, Ken's laws decade in the 2000s,

2:11

and why he thinks TDD has failed, how he

2:14

thinks about and uses AI and what still

2:16

excites him with coding after 40 plus

2:17

years and many more. If you'd like to

2:19

understand how True Legends was shaped

2:21

by the industry and shaped software

2:22

engineering himself, this episode

2:24

[music] is for you. This episode is

2:25

longer than most of my podcast episodes,

2:27

and I do hope that you'll find that it's

2:29

worth the time to listen to Kent longer

2:31

than he's ever told his story in one

2:32

setting before. This episode is

2:34

presented by Antithesis. If you work

2:36

with agents, your job is no longer just

2:37

writing code. It's specifying and

2:39

testing it. And antithesis is the most

2:41

effective method of verifying agenda

2:43

[music] code today. This episode is

2:45

brought to you by Turbopuffer. A fun

2:47

fact about Turbopuffer is how they

2:48

become the search engine for AI agents.

2:51

It seems like every week they add a new

2:52

use case from one of the leading AI

2:54

companies. RAM, Lorra, Harvey, Granola,

2:56

they're all on Turbopuffer. Or as the

2:59

team likes to say it, they're all

3:00

puffing. Turbopuffer offers a full set

3:02

of search tools. vector search, full

3:04

text search, attribute filtering, ragex,

3:06

and more in one API. It's built on

3:08

object storage as a sole stateful

3:10

dependency. So, it's extremely scalable,

3:12

reliable, and cheap. But it's also very

3:14

fast thanks to its intelligent caching

3:16

layer. One cool thing about Turbopuffer

3:18

is you can have unlimited search

3:19

indexes. So, it's perfect for

3:21

multi-tenant AI applications. Build an

3:23

index per tenant, data is isolated by

3:25

default, and you can scale without

3:27

thinking about it. Here's the best part.

3:29

Turbopuffer just announced last week

3:31

that they've dropped their base price

3:32

from $64 per month to $16 per month. So,

3:35

there has never been a better time to

3:36

test it out. Head to

3:37

turbopuffer.com/pragmatic.

3:40

And it's so good to have you in person

3:43

on the podcast. Guy, it's great to talk

3:45

to you again. Yeah, I wanted to kick off

3:47

with something really timely. There was

3:50

this uh tweet going viral by Daario

3:53

where he said, I quote, "Coding is going

3:55

away first than all of software

3:57

engineering." you had some things to say

3:59

about it.

4:00

>> Yeah. My response is that that's a

4:02

statement by someone who doesn't

4:04

understand software engineering. Coding

4:06

is part of what you're doing, but it's

4:08

only a small part of what you're doing.

4:11

Even if it takes up a fair amount of

4:13

time,

4:14

you're building confidence, you're

4:17

building connections with other people,

4:20

you're building your own understanding.

4:23

All those things are happening while

4:25

you're coding. And coding's actually a

4:28

great way to cement understanding. The

4:30

more you program, the more you

4:32

understand the domain that you're

4:34

working in. So to say, well, we're just

4:36

going to pass all that off to a machine.

4:39

Well, you're that's not all there is to

4:42

it. Interesting because one thing that

4:46

is so obvious with LLMs is they just

4:49

code really quickly, right? like it it

4:51

used to take us a lot of time to both

4:53

type it out and also thinking out but

4:54

you're saying that there was thinking

4:57

involved and understanding involved as

4:59

well in that process right so a couple

5:02

of days ago I I I

5:04

saw a phrase and it really hit me that

5:08

we're accumulating code faster than

5:10

we're accumulating trust and that sense

5:13

of trust comes from me

5:17

struggling to understand some domain

5:19

concept I get it. I represent it in the

5:22

code. I have I write tests that

5:25

demonstrate that I really did understand

5:27

it. And now I trust my program. But if

5:31

we're programming together, that act of

5:34

programming together means that we trust

5:36

each other more. If we talk to someone

5:41

an eventual user and we demonstrate that

5:45

we understand their needs and we, you

5:47

know, they tell us, "Well, I want a

5:48

button that does this." We're like,

5:50

well, what problem are you really

5:51

solving? And we go back and forth and

5:54

back and forth. That builds human trust

5:57

as well. None of that can be automated.

6:01

None of that occurs if we prompt the we

6:06

get the finger guns, you know, the genie

6:09

goes, "Yeah, it's all finished, boss."

6:12

And it's like, "Well, hang on. Finish.

6:15

What's finished?" As we're talking about

6:17

software engineering, you mentioned

6:20

trust, connection, understanding.

6:24

You didn't mention technologies, you

6:25

didn't mention programming languages,

6:27

you didn't mention wouldn't even mention

6:29

refactoring. This is really interesting.

6:32

You you've been doing this for what 50

6:33

plus years now. Do I understand that the

6:36

human part is the hardest or most

6:39

important part in software engineering?

6:41

Th this is this is the biggest cos

6:44

cosmic uh uh practical joke ever. As

6:49

young people who some of whom like I

6:52

don't understand humans very well, we

6:54

were promised, okay, here's this

6:56

computer and if you completely

6:58

understand this computer, you'll be

7:00

fine. That's all you need to do. So I

7:03

set out the first part of my career just

7:06

to become the best programmer that I

7:07

could be because that's what it would

7:10

take to be successful. And then woo

7:13

sorry there's this whole human side and

7:17

your ability to affect change in the

7:20

world is gated by your ability to

7:23

communicate with empathize with gh

7:27

empathy

7:29

not my natural strong suit to convince

7:33

to communicate with to soothe to

7:37

understand other human beings and those

7:39

are exactly the skills that I thought I

7:42

didn't need to learn. So I was promised

7:45

just understand the computer and then

7:48

just kidding understand people from a

7:51

position where I was already 10 years

7:53

behind. So I I'd like to go back to to

7:56

right there to the very beginning cuz so

7:58

many people know you from from your

8:00

books from a lot of the techniques and

8:03

and the techniques that that that you've

8:06

co-created or or

8:09

made it made a lot more popular. XP,

8:11

TDD, a bunch of other just small

8:14

refactorings and so on. But going back,

8:16

how did it all start? How did you have

8:20

your first contact with computers? I I

8:23

know your father was an electrical

8:24

engineer.

8:25

>> Yeah. So, my father started out as a an

8:27

electrical engineer. He was in the Navy

8:31

in the Korean War as a radio operator.

8:35

uh came out of that, went to school, got

8:38

an electrical engineering degree,

8:40

started working in uh aerospace

8:44

uh as an electrical engineer, and then

8:46

we moved to Sunnyvale, Silicon Valley

8:50

before it was Silicon Valley. This is

8:51

before the invention of Silicon.

8:53

>> Oh, this was before.

8:54

>> Yes. Before there was this is when there

8:56

were still uh cherry orchards on El

8:59

Camino. And I was born there

9:02

about the time

9:04

So I was in sixth grade. He brought home

9:08

a programmable calculator which was as

9:11

big as not as big as this table, maybe

9:13

half the size of this table.

9:15

>> Probably weighed

9:16

>> 65 or 70 lb. Yeah. Yeah. It was

9:19

>> 65 lbs.

9:20

>> And it had uh it had Nixie tubes. Nixie

9:23

tube is this is before seven segment

9:26

LEDs cuz LEDs hadn't been invented. uh

9:29

you'd have a uh an incandescent light

9:33

bulb with 10 filaments in the shape of

9:36

the numbers. And my first program

9:40

was uh was a loop that would just count

9:44

up and down and up and down because the

9:47

filaments were set one in front of the

9:49

other. 0 1 2 3 4 5 6 7 8 9. So, I I just

9:53

uh wrote a program that would count up

9:55

and down cuz I loved watching this go

9:58

back and forth and back and forth and

10:00

back for hours. I could just was

10:03

>> mesmerizing. Oh,

10:05

>> absolutely. That was the first time I

10:07

had my hands on any real hardware.

10:10

Although I did find my dad would bring

10:12

home books and I was a kind of obsessive

10:17

spectrumy kind of kid. I would

10:19

obsessively read these books and I found

10:21

one of them lately in uh in during a

10:24

move, the Burroughs B6700

10:28

instruction set manual. And this was a

10:31

really interesting machine to imprint on

10:34

early because it has a hardware stack.

10:37

It wasn't register based, it was stack

10:39

based. How they did that with discrete

10:41

transistors, I will never know. But it's

10:44

just a really interesting architecture.

10:45

And that book I would just read the

10:48

pages over and over and I understood

10:52

nothing but I was just fascinated with

10:55

this mechanism. So when I got an actual

10:57

machine and I could play with it and

10:59

something that that resembled assembly

11:01

language and I could get it to do stuff,

11:04

I could have an idea in my head and if I

11:07

understood this mechanism, I could get

11:09

it to do the stuff in my head which

11:11

would spark the next idea.

11:14

That's what really hooked me is is that

11:18

that creative impulse coupled with

11:22

knowledge of the machine together I

11:25

could create things in the world that I

11:26

wanted to see and this was very early

11:29

'7s right Microsoft

11:32

72

11:33

maybe so Microsoft wasn't even founded

11:36

founded in 75

11:37

>> what was it like in terms of how common

11:41

or uncommon were these machines means

11:43

how much or little did you even think

11:47

that they would go anywhere or was it

11:49

just just a a fun thing that has just

11:52

been invented?

11:53

>> Probably the first wave

11:55

of miniaturaturization was the

11:58

programmable calculator.

11:59

>> Mhm.

12:00

>> So the one that your dad brought home.

12:02

>> So no, the like handheld calculators.

12:05

Okay. So, so, so the the big tabletop

12:09

calculators was was one thing, but then

12:13

there were these little calculators. I

12:15

remember my dad buying an HP35 for $400,

12:19

which is I don't have no idea how much

12:21

that would be today, but a lot of money

12:23

just for this little thing.

12:24

>> It'll probably $2,000 location.

12:27

>> Yeah. So you you had to keep the stack

12:30

in your head of what order do I want to

12:33

put the operands in and you know make

12:37

sure that I stack everything and then

12:38

you go plus+ and that would pop stuff

12:41

off the stack. And then the HP45 came

12:45

along and it would it had its own little

12:47

programming language in it and that was

12:50

just like okay this is really really

12:53

cool. And then microprocessors started

12:56

to come out and we had the Z80 and the

12:59

808 and the

13:02

6800 and my dad and I soldered together

13:05

our first 600 6800based

13:09

machine. Then we were programming in

13:12

assembly language.

13:14

Then out came basic then

13:17

>> this was mid70s.

13:18

>> Yeah. Yeah. So, so that was really I I

13:21

was spending a lot of time working on

13:23

that machine. Again, I wouldn't say I

13:26

understood it at a at an elite level,

13:29

but I was fascinated. I Everything I

13:32

could learn about it made me that much

13:34

more effective at that creative impulse,

13:38

imagination of a thing in the world,

13:41

execution. There's a thing in the world.

13:44

And that just has always felt great for

13:47

me. And then when it came to college,

13:50

you you chose University of Oregon,

13:52

right?

13:53

>> Well, University of Oregon kind of chose

13:54

me because no none of the other places I

13:56

applied accepted me.

13:58

>> No way.

13:59

>> Yep. And what did you study there? How

14:01

how did your college years go?

14:03

>> Well, the first year was computer

14:05

science. And

14:06

>> so they already had a computer science.

14:08

Yes. Yes. We had invented computer

14:10

science by then. The first year was CS.

14:13

and and I enjoyed it, but I I still

14:15

wasn't a great programmer, but classes I

14:18

breezed through. So, I was a little bit

14:20

bored. So, before the start of my

14:23

sophomore year, it was really hot and I

14:26

was walking through the music building

14:28

and there were some some flyers for uh

14:32

signing up for auditions. I thought,

14:35

"Oh, I play guitar. Let me see what I

14:37

can do." Next thing I knew, I was a

14:39

music student. So, [laughter]

14:42

>> wow.

14:43

>> So, I'd been playing I started playing

14:46

guitar when I was eight, kind of the end

14:48

of the folk boom. Mrs. Card at a summer

14:52

school class and uh uh there was a

14:55

guitar laying around at our house. And

14:57

so I I went and and again just obsessed.

15:01

She'd show us something and I'd go home

15:03

and I'd play it until my fingers bled

15:05

and come in the next day and and

15:08

everybody else was kind of where they

15:09

were before, but I would have mastered

15:12

some picking pattern, some strumming

15:14

pattern because I just played it for

15:16

three, four hours. So, I was very into

15:19

music and in high school I was in the

15:20

choir and which was the big deal. We

15:24

didn't have a lot of sports at our high

15:25

school, but we certainly had music. It

15:28

was kind of natural that I would study

15:30

music. At the end of a year of music, I

15:33

missed programming, so I went back to

15:35

programming. Then I went back to music

15:37

so I could do my senior recital. Then I

15:41

went back to programming for a master's

15:43

degree uh in another year and and uh

15:48

finished that. And so and as I say, I

15:51

just ended on the wrong year. Yeah.

15:53

Because I I I checked I think it was

15:55

eight years in total. uh that you spent

15:58

at Oregon at University of Oregon.

16:00

>> 5 years full-time and then I had a hard

16:03

time finishing my master's thesis.

16:05

>> Why did you have a hard time? What was

16:06

your master's thesis on?

16:07

>> It was

16:10

a novel query language. Not

16:13

surprisingly, I did not get along with

16:15

the authority figures,

16:17

which is a a theme of my career. Yeah.

16:21

Just had a hard time like checking off

16:23

all the boxes and getting getting the

16:25

whole thing finished. People said, "Oh,

16:27

you're gonna be sorry if you I was just

16:29

ready to quit." Just like, "Yeah, you

16:30

know, this is all hoop jumping and has

16:32

nothing to do with programming and I was

16:34

making a good living as a programmer by

16:36

then. So, oh, but you're going to regret

16:38

it if you don't get your degree. If you

16:40

don't finish, you're so close." And it's

16:43

never never helped me one bit as far as

16:46

I can tell. So, but you completed it.

16:48

>> I did complete it. It is important to

16:51

complete things that in that in that

16:54

process from vision of thing in the

16:56

world to careful activity to the thing

16:58

in the world there has to be some

17:00

finishing even if I'm uh as the Reverend

17:03

Jesse Jackson said uh I'm a tree shaker

17:06

not a jelly maker and that's definitely

17:09

me. Yes it's true true for your work as

17:11

well also for software. Well, I keep I

17:14

keep switching topics. That's uh that's

17:16

something that'll probably come up as we

17:18

go through the various things that I've

17:19

worked on.

17:20

>> What was your first job? It was while

17:22

you were still finishing your degree the

17:25

the last few years. You started to work

17:26

as a programmer, right?

17:27

>> Correct. So during that uh graduate

17:31

student year, a team from Tektronics

17:34

came down to give a presentation about

17:36

the programming environment work they

17:38

were doing. Tektronics was uh started

17:40

out as an electronic test equipment

17:43

company in Portland. Did well in their

17:45

little niche, but they they opened up an

17:48

indust uh industrial lab as lots of

17:52

companies at that point did to do basic

17:54

research and part of that basic research

17:58

was on uh programming environments. They

18:01

came and gave a presentation.

18:04

Uh, I asked them questions they couldn't

18:06

answer and so they invited me out to

18:08

dinner which led to an interview which

18:10

led to a job.

18:11

>> Tektronics was an interesting one

18:13

because this is where you met Ward

18:15

Kunigum, right?

18:16

>> Yeah. So, uh, Tektronics had invested

18:20

early in this crazy object-oriented

18:23

programming language called Small Talk

18:26

and was trying to make a commercial go

18:29

of it.

18:31

And I got there and the looked at the

18:35

the research that had been presented

18:38

down at Oregon and it kind of played

18:41

itself out. But this small talk thing,

18:43

wow, that's cool. So I dove right into

18:46

that. For those of us who have not

18:50

touched small talk, might have heard of

18:52

it. What made small talk so such a hit?

18:57

What pulled you in? What is the language

18:59

like? There's a beautiful paper called

19:01

the design principles behind small talk

19:04

by Dan Engles and the opening line is

19:07

small talk is computer support for the

19:09

creative spirit in everyone which had

19:12

two big

19:16

themes. One was a language of

19:19

programming, the small talk language,

19:21

and another was a language of

19:23

interaction, overlapping windows, mice

19:26

as pointing devices, panes,

19:30

scroll bars, those were all things that

19:32

uh were pioneered out of the user

19:36

interface. Those things are kind of

19:38

ordinary today. But Small Talk, the

19:39

language, was built out of a very small

19:42

number of primitives. There's really

19:43

only three primitives in the language.

19:46

Sending a message, assigning a variable,

19:49

and returning a value. And that's really

19:51

all that there is. And so, um, maybe,

19:56

uh, towards the end we can talk about my

19:59

current projects, one of which is to

20:02

build another a new Small Talk from

20:05

scratch, just because now that's in

20:07

within reach for anybody. But what what

20:10

I found beautiful was that the language

20:14

pushed its own mechanisms to the

20:16

absolute limit. So everything is an

20:19

object in small talk including numbers.

20:22

You don't call a function that adds two

20:24

integers. You send a message plus which

20:27

is received by an integer and takes

20:30

another object as a parameter. If that

20:34

other object happens to be another

20:36

integer, then you add them together.

20:38

This leads to interesting things like

20:41

there are no control structures defined.

20:44

So no if then if then else is not part

20:46

of the language. It's part of the

20:48

library because there's a you send the

20:52

message if true with a closure

20:56

to true and it evaluates the closure.

20:59

You send the message if true to false

21:02

with a closure and it does nothing. Just

21:04

returns null. Everything is built out of

21:07

the same kind of substrate. There

21:09

there's very few special cases in small

21:12

talk which

21:14

means that sometimes you have to get

21:16

clever to understand things like h how

21:18

does how do how do conditionals work but

21:22

also when the time comes for you to

21:24

build abstractions you you don't have a

21:26

bunch of special cases getting in your

21:28

way. It is a different way to think

21:30

especially looking at the modern

21:32

programming languages that have a you

21:33

know the language comes with so many

21:35

things built in whether even if we're

21:38

thinking of like later languages like

21:40

coughlin or swift or any of them they

21:42

they have things like control structures

21:45

and reserved words why would you reserve

21:48

words how rude the programming language

21:50

should give me as much vocabulary as

21:52

possible but I do notice that with small

21:55

talk the people who have used it just

21:58

get really really passionate about it

22:00

and love using it and I understand doing

22:03

my research that there was a time around

22:05

that time for a few years where it

22:08

started to become a lot more popular.

22:09

Can you tell me why it got more popular

22:11

and then what happened? It seems to have

22:13

kind of fizzled out. Yeah, longer story.

22:17

Some of which I was not privy to. Some

22:19

of which comes down to business

22:20

decisions. Objects were were hopping.

22:24

We'd been programming with the previous

22:26

generation of languages cobalt forransc

22:30

alascal

22:33

for a long time and we were used to kind

22:35

of the constraints that those provided

22:36

and along came these objects and objects

22:38

were going to change everything. People

22:41

were really, really excited, but you

22:44

know, objects were going to make

22:46

programmers so much more productive that

22:49

we wouldn't need nearly as many

22:50

programmers. And in fact,

22:53

>> really.

22:53

>> Yeah. And you know,

22:56

it's so much easier to program with

22:58

objects that ordinary people can write

23:01

their own programs. They don't have to.

23:04

>> I've heard this recently. [laughter]

23:06

>> Exactly. But seriously, like this was

23:09

what they were saying where like inside

23:11

of the industry, this was a thing. Use

23:14

objects or small talk and do more with

23:17

do more with less programmers, cheaper

23:20

the works.

23:21

>> Yeah. And and to a degree it was true.

23:24

We would people would come in. So

23:28

built a workstation, there weren't

23:29

workstations. Tecttronics built a

23:31

workstation and started to sell it with

23:34

Small Talk bundled in it. and technical

23:37

people but in different domains like

23:40

chemical engineers or structural

23:42

engineers or hydraulic engineers would

23:45

come in and show us the systems they

23:47

built with small talk and on the surface

23:51

they looked fantastic the solve the and

23:54

oh they were so happy so proud of their

23:57

baby. You look under the underneath

24:00

though at the code and it was just a

24:03

horrible unmaintainable mess. But the

24:06

fact that people could program the

24:09

programs that they wanted was a a

24:12

significant step forward as opposed to

24:16

I'm going to write a thousandpage

24:18

requirements document and then wait 8

24:21

years and not get what I want which was

24:23

the alternative that we were offering at

24:25

the at the time. So it's not the first

24:27

time that we're expanding because again

24:31

if we jump to today similar things are

24:33

happening. People in different domains

24:35

who could never dream of hiring a

24:37

developer are now building their

24:40

programs and the same thing is playing

24:41

out which is if you look under the hood

24:43

if you put your software engineering hat

24:45

on and look under the hood of that mess.

24:48

There's lots of corner cases that aren't

24:50

covered. It's impossible to to modify

24:52

and evolve. Yeah. But so far this story

24:54

with small talk and Tektronics selling

24:57

machines that come with small talk make

24:58

everyone more productive. Clearly it

25:00

pays for itself. That sounds great. But

25:02

then what happened? There were

25:04

alternatives that were easier to

25:06

understand. So for example, small talk

25:10

syntax is uh funky. It's this keyword

25:13

infix syntax.

25:16

Along comes C++ which was originally

25:19

called C with objects. And the syntax

25:22

looks familiar

25:24

even though it's the design philosophy

25:27

is entirely the opposite of small talk.

25:29

There's lots of mechanisms and they're

25:31

very complicated. But just the fact that

25:34

it was approachable that you could there

25:36

was a compiler because we were used to

25:38

having compilers in small talk.

25:41

There'd be some code you'd edit it and

25:43

now you're running with the new code.

25:45

There's no compile and link step. It's

25:48

of course it's just sitting right there.

25:49

And if you're in the middle of, you

25:51

know, you could be editing a some text

25:54

and say, "This doesn't work the way I

25:56

want and hit control C and you get a

25:58

debugger and go down the stack and you

26:01

find the code that's not doing what you

26:03

want and you fix it and you continue on

26:05

your way and then you're you're writing

26:06

again." That was that was that level of

26:10

this is intended to be a personal

26:12

computer. And part of that that sense of

26:15

ownership was that you could see

26:18

everything and you could change

26:19

everything. Now it turns out if you have

26:22

a hundred people working on the same

26:24

program, you need to put the brakes on.

26:28

Everybody can't be changing everything

26:30

in incompatible ways at the same time.

26:32

That just doesn't work. But in terms of

26:35

this is my computer and I feel power

26:38

because I understand it. I can have more

26:41

ideas

26:43

that I can then execute on to create

26:46

things in the world. It worked great for

26:48

that. Now while at Tektronics you work

26:51

with War Kunagum who would later become

26:54

the developer of the first ever wiki. Uh

26:56

he had a huge influence or he helped

26:59

create design patterns. He also helped

27:00

with extreme programming. Can you tell

27:02

me about what it was like working with

27:04

him and and how you and him started to

27:07

get into design patterns which back then

27:10

didn't exist right this was something

27:13

you you would invent later we needed to

27:15

give training classes on small talk and

27:17

Ward had written some small talk code we

27:20

knew each other there were probably 60

27:22

people 80 people in the labs so we knew

27:25

each other by side I had learned a bunch

27:26

about small talk working on my own

27:29

projects I was working on programming

27:31

language for prologue because logic

27:33

programming was also a big deal at that

27:35

time. So I implemented I think three

27:38

different virtual machines for prologue

27:40

including some nice animations showing

27:43

how prologue's unification mechanism

27:47

worked.

27:47

>> And I guess for for those who don't know

27:48

prologue is this declarative language is

27:51

a very different way of thinking. No no

27:52

no variables is I I think

27:54

>> no no it's got variables. No variables

27:57

is FP box. Oh, this FP sorry, but it

28:00

does have some some funky stuff. I I I

28:03

used it a long time ago.

28:04

>> It's fun.

28:06

>> Turns out to be difficult to write big

28:08

programs in, but it's it's it's a good

28:11

exercise because you there there aren't

28:14

control like do this thing, then do this

28:16

thing, then do this thing. It's it's

28:18

more like a theorem prover. So, I was

28:21

working on that. Ward had built this

28:23

example code for the small talk class

28:27

and he said I just want to run you

28:30

through this code. So I sat down next to

28:33

him and he showed me the code for

28:36

plumbing called plumbing and I suggested

28:41

some some improvements. We gave the

28:44

class together.

28:46

I met some people who would later become

28:51

lifelong friends in that class and then

28:54

we just kind of fell into

28:57

a rhythm of well, I wonder if we can

29:00

make Small Talk do this because the

29:03

universe of of what it meant for a

29:07

computer to support programming was just

29:10

exploding. We had the this high

29:12

resolution screen which nobody had ever

29:14

had before. we had this dynamic language

29:18

uh including our own implementation of

29:20

it so we could tweak it if we needed to

29:22

and we just didn't know what was even

29:25

possible. So

29:27

uh at first

29:30

and Ward was always a much better

29:32

programmer than I was in terms of

29:34

low-level technique. He also had a gift

29:37

for design at a higher level and a gift

29:40

as you see in the wiki of uh picking

29:45

powerful top level goals and then making

29:50

something that does that. But I was this

29:53

24 year old punk with attitude and he he

29:58

didn't let me touch the keyboard for a

30:00

while. I could watch him and then

30:02

eventually I was like h those

30:04

parentheses don't balance you need a

30:06

period here and I was actually being

30:10

useful to him even though and I was

30:13

absorbing watching a master programmer

30:15

at work but I wasn't really driving

30:18

stuff eventually though I started you

30:21

know understanding the low-level

30:23

patterns and then building up to the

30:25

next level and the next and then I would

30:27

say why is this called this and not that

30:30

pull out a thesaurus and look it up and

30:32

find just the right word for things and

30:34

then continue.

30:37

And eventually I started making

30:39

suggestions that he wouldn't understand

30:42

right away. And so I would take the

30:45

keyboard for a little while say

30:49

something like this. Oh, I get it. I get

30:50

it. And then he'd take the keyboard

30:52

back. Over the course of a few months,

30:56

we developed both a programming style

30:59

where the keyboard was going back and

31:00

forth where we were talking at multiple

31:03

levels. You know, we talk about here's

31:06

this code, why isn't it working? Is this

31:09

the thing we should be working on at

31:11

all? What programming

31:14

tools would we need for this to be easy?

31:18

What should the design be so this whole

31:20

thing should work well? Should we even

31:22

be doing this at all philosophically?

31:26

We would bounce between all those levels

31:28

in the in the active programming. And we

31:31

had a weekly cadence where Monday

31:34

morning we'd have a coffee and we talk

31:36

about of the list of things because we

31:39

would then out of those conversations

31:42

we'd come I wish we had a thing that did

31:45

a thing. We would talk about that and

31:47

then we'd say okay well let's go down

31:49

and see how far we can get. And over and

31:52

over, Tuesday, Wednesday, we would make

31:55

a bunch of progress on what we were

31:56

working on. Thursday, we'd be giving

31:59

demos and refining it. And Friday, we'd

32:01

write a tech report. So, there's this

32:04

whole string of tech reports that we

32:07

wrote over the course of maybe 6 or 12

32:11

months of really working together

32:13

intensely. Even if one of those weeks

32:15

failed, you know, we'd we'd have our

32:17

coffee Monday, Tuesday, Wednesday. ah,

32:20

this didn't work. We would know why it

32:23

didn't work and what it was that we

32:25

needed in order for that thing to be

32:28

easy in the future. And that goes into

32:30

the hopper for the next Monday's coffee.

32:33

So, we developed a wide range we of

32:38

programming tools and applications,

32:41

some foundational stuff. So, we had a uh

32:44

graphics editor called Hot Draw because

32:47

we we had this graphical interface and

32:50

everybody had been used to text

32:51

interfaces for so long, but now we had

32:53

high-speed graphics. Oh my goodness.

32:55

What can we do with this? So, we kept

32:57

making graphical interfaces, but it was

32:59

hard to make graphical interfaces.

33:00

>> Yeah. I I have a photo of of early draw.

33:04

>> Yes, absolutely. And and this reminds me

33:06

when I look at hot draw this, you know,

33:08

like these boxes and arrows, they do

33:10

remind me later of things like UML and a

33:14

bunch of just the not not the exact

33:17

ideas, but but visualizing and of course

33:20

later I think these days people don't

33:22

use UML, but you still you just go to

33:24

the whiteboard and you draw out boxes

33:26

and arrows and how they connect. Sounds

33:28

like so you did this back in in ' 87 or

33:32

something like that.

33:33

>> Correct. And because we had uh high

33:36

performance for the time graphics

33:38

primitives, the magic moment out of hot

33:41

draw was we drew a series of rectangles

33:46

kind of on top of each other. We

33:47

selected every other one. We clicked on

33:50

it and we started to move it back and

33:52

forth and you could and because we could

33:55

we could do maybe 10 hertz animation. It

33:59

was it was smooth and you could just see

34:01

half of the rectangles, you know, kind

34:04

of moving behind the other half and it

34:06

was just this is so hot. We were just

34:08

really excited about it.

34:09

>> Oh, that that's that's why that's why

34:11

you called it hot draw. That was the

34:12

name because that was the reaction to

34:15

being able to see this smooth animation.

34:17

And before that, writing that kind of

34:20

smooth animation

34:22

was a bespoke thing and took a lot of

34:24

work. And with this, you subclass figure

34:28

and now you have something that works in

34:30

this 2 and 1 halfd world and away you

34:33

go. Those figures though were meant to

34:37

represent something in the interface. It

34:40

wasn't just a rectangle. It was a

34:43

processor, it was a generator, or it was

34:46

a whatever. And then you click on it and

34:49

you get these handles on the figure

34:51

which each of which represents some way

34:54

to manipulate the state, not just of the

34:57

graphic thing, but again of there was

35:01

intended to be meaning behind it. So

35:03

you'd have a handle that would raise and

35:06

lower the temperature and another handle

35:07

that would change the pressure or

35:09

whatever whatever domain you were

35:11

working in. And then you had it was a

35:14

boxes and arrows uh model. So you'd have

35:18

connections between things and the

35:20

connections again were intended to be

35:22

semantic but would follow the figures

35:26

around. And actually the the words

35:29

figure handle drawing uh Ward came up

35:32

with those. Mine were something

35:34

pedestrian drawing object

35:38

drawing handle. I I I didn't have good

35:41

words for it. And this was where the

35:44

thesaurus

35:46

came in was

35:49

Ward would think about okay this is like

35:52

figures in a book. You know we had an

35:54

analogy there. there there was a

35:56

metaphor to what we were doing. But in

35:59

the computer world, you can you can have

36:01

figures and figures and figures.

36:02

>> And do I understand that you actually

36:04

had a physical thesaurus like a book?

36:06

>> Yeah. Yeah. An actual book with words in

36:08

it.

36:09

>> You would actually as a programmer reach

36:11

for this book with words and open up to

36:14

find better words all the time.

36:17

>> Was this just you doing it or did

36:20

programmers in general have like people

36:22

that you knew that they also have the

36:24

satarist? We were on the far end of the

36:26

obsessive scale for this. There were

36:29

other people certainly who were fighting

36:31

for the right words. But this just this

36:34

just reminds me of how programming is is

36:37

just more than just you know like

36:40

writing code. how you need the skills of

36:42

for example if you are well read you can

36:45

probably write more expressive programs

36:47

or if you're not well read having a

36:50

thesaurus of of course you could do it

36:52

online but I assume that by opening up

36:55

the book and looking through and reading

36:56

a lot of other you know words your

36:59

vocabulary was will start to grow there

37:01

therefore making you a better programmer

37:04

or someone who can write a lot more

37:05

understandable or maintainable part of

37:07

the goal of programs is to communicate

37:10

intent to other human beings and now to

37:13

models as well which which is a much

37:16

more open-ended problem. We understand a

37:19

lot more about how to communicate to

37:21

other human beings whether we apply that

37:24

understanding or not. We don't

37:25

understand at all how to communicate

37:27

effectively to models and people are

37:29

trying out all kinds of things which is

37:31

that's great. That's what you do.

37:33

>> Yeah. And and then later Ward went on

37:36

and he he got very much involved with

37:37

design patterns. I can all now see with

37:39

hot draw how you know the design

37:42

patterns in the gang of four later you

37:44

see boxes and arrows how I see some

37:46

resemblance on being able to visualize

37:48

objects on on a monitor. Yes, all of the

37:53

pieces were working together for us. Um

37:57

the patterns work I had become

37:59

interested in Christopher Alexander at

38:02

the University of Oregon. I couldn't

38:04

afford the timeless way of building. So

38:06

I read it standing up in the bookstore

38:10

uh over the course of several visits and

38:14

Ward had also been exposed to

38:16

Christopher Alexander and patterns.

38:19

Alexander wanted to build

38:21

wanted buildings with a certain spirit

38:24

to them. He talks about it in kind of

38:27

mystical terms, but that's okay.

38:30

And he hypothesized that if people made

38:34

their own decisions about the design of

38:36

buildings that this spirit would exist

38:39

in a way that didn't. When the the

38:41

architect would say, "Oh, well, you

38:43

know, tell me what you need in a

38:45

building and then I will program myself

38:47

to dream of your perfect space and then

38:49

I'll tell you I'll bring to you the

38:52

solution." The way he wanted to work was

38:54

to empower people to make decisions

38:58

within constraints. Like me designing a

39:02

house, I'm going to have roofs that fall

39:05

down and walls that don't match and

39:06

whatever cuz I don't know. So, I need

39:08

constraints, but I know more about my

39:12

life. So, I should be the one making the

39:15

decisions about, oh, family family

39:18

dinners are really important. Oh, so so

39:20

this is in the domain of architecture

39:23

like like strictly physical buildings.

39:26

>> Yes.

39:26

>> Wow. So you got a lot of inspiration

39:28

from this domain even though software is

39:31

very much a virtual it's in our head

39:33

right and or in the computer right. So

39:36

the patterns are the constraints.

39:38

You can't just make any decision. You

39:41

make particular decisions at per

39:44

particular times based on the

39:46

constraints that come from the decisions

39:49

you've already made and that creates

39:51

constraints for the next decisions that

39:53

you make. We wanted that for the users

39:56

of programs taking this small talk

40:00

personal computer ethos to the next

40:02

level. And so

40:05

we were consulting on a project that

40:08

wasn't going well at Tektronics. some

40:11

programmers were writing software for

40:14

some test engineers and it just it

40:16

wasn't going well. So Ward came up with

40:19

the initial set of patterns that we

40:22

would use for designing a user

40:23

interface. Again, graphical interfaces

40:26

were brand new. Nobody knew what to do.

40:29

There were all kinds of crazy things

40:32

coming out in in music school. We

40:34

learned about the the evolution of

40:36

musical notation. And when musical

40:39

notation first came out, before then it

40:41

was entirely an oral tradition, then

40:43

musical notation was invented. And some

40:46

of the most complicated music ever

40:48

written was written in like 1200 or

40:51

1300, right after musical notation had

40:55

been invented because nobody knew what

40:57

the limits were. And then then they they

40:59

settled down. It's like, okay, a

41:01

four-part motet, that's fine. and we

41:03

don't need to have 60 different

41:06

instruments doing 60 different things

41:08

all at the same time just cuz we can.

41:10

Well, it was the same kind of way with

41:12

these user interfaces. Nobody knew how

41:15

to organize them. So we gave this

41:18

initial set of patterns that Ward had

41:21

come up with and we'd talked about

41:23

Christopher Alexander and patterns and I

41:26

ran across a copy of notes on the

41:29

synthesis of form at Powell's books in

41:31

Portland and devoured that which is kind

41:34

of the theoretical underpinning of

41:35

patterns. We handed the patterns to the

41:38

test engineers and said okay we're just

41:42

going to start over. use these patterns

41:44

to break your process down into windows

41:49

with pains. And we were careful to only

41:55

allow them to do things that we knew

41:58

that we could implement. So they

41:59

couldn't come up with anything. The

42:01

pains had to be lists or text or

42:03

waveforms.

42:05

The waveforms were special, but that's

42:07

okay. We could do that. Each task that

42:10

you had to do in this testing process

42:12

would have its own window and so so

42:16

there was you know a four or five

42:18

different patterns and they came up with

42:20

an interface that was eminently

42:22

implementable

42:24

and they felt like they owned it and

42:26

then the small talk programmers would

42:29

look at that and go okay well how do I

42:31

implement this how do I implement that

42:33

so that was our first foray into

42:36

patterns People get really fussed about

42:40

this transfer of responsibility.

42:44

They want to think I I am the designer

42:47

of interfaces and I worked hard at this

42:50

and I want to ask you a bunch of

42:51

questions and then I want to cogitate on

42:54

that and then I'm going to bring you the

42:56

solution and then you'll thank me and

42:58

pat me on the head. Of course, that

43:00

doesn't happen. Your understanding of

43:02

somebody else's problem is bounded

43:05

because you're not in the middle of it.

43:08

You don't have the same skin in the

43:10

game. If you're not semiconductor test

43:12

engineer, you don't have as much skin in

43:14

the game as somebody who is because

43:15

they're going to have to be using this

43:17

interface for a long time after you're

43:19

gone.

43:19

>> Yeah. There's also this concept of the

43:21

flyby architect on teams who, you know,

43:24

this very senior person has built a lot

43:26

of stuff and the team is struggling.

43:29

They call them and they call him or her

43:30

in. This person comes,

43:33

does some suggestions and kind of flies

43:35

off.

43:35

>> This is a seagull.

43:36

>> The seagull. The seagull. Because it

43:38

should

43:38

>> You fly in, you make a bunch of noise,

43:40

you crap all over everything, and then

43:42

you fly out. Yeah.

43:42

>> Yeah. And you drop skin in the game.

43:44

Yeah. And it's interesting because we've

43:46

anyone who's worked in in teams of a

43:49

certain size or or certain tenure, you

43:52

see it happen. And it doesn't really

43:54

matter how highly skilled that person

43:56

is. There might be a few exceptions, but

43:58

generally if you don't have skin in the

43:59

game, you just make different decisions.

44:01

And then after Tektronics, you worked at

44:05

Apple. I only realized this about you.

44:08

What how did you get into Apple? This

44:10

was in 1987. It's a very exciting time

44:13

from from my research. How did you get

44:16

in there? What did you do there? So,

44:18

Small Talk was going up like a rocket at

44:21

that time. Xerox had developed Small

44:25

Talk. It handed it to four I think

44:29

companies to see can you also implement

44:32

it or is this something special. So HP,

44:35

Apple, Tektronics and blanking on the

44:40

fourth one. HP really didn't do anything

44:42

with it but Apple and Tektronics ran

44:46

with it. So Apple had its own

44:47

implementation of Small Talk and they

44:50

wanted to not commercialize it in the

44:52

sense of selling it, but commercialize

44:54

it in the sense of having something that

44:58

this was right after the Mac had come

45:01

out, something that you could use on a

45:03

Mac. And so I I knew about that project.

45:07

It was getting too big for my britches

45:09

at Tektronics. I I learned a lot. You

45:13

know, there's a there's a thing there's

45:16

this kind of compression that happens

45:19

when you're growing faster than the

45:21

organization can recognize that you're

45:24

growing, but also you're not growing as

45:26

fast as you think you're growing. And

45:28

eventually that gap between how people

45:31

see you and how you see yourself and

45:34

then somewhere in between is how you

45:36

really are. Those if those gaps get too

45:39

wide, you just have to move. So, I was

45:42

ready to move on. So, I contacted Apple

45:44

and I I worked for about a year on the

45:48

Small Talk project, which ended up going

45:50

nowhere cuz it really didn't make sense.

45:53

Small Talk could work in quite a small

45:57

memory footprint, but the the only

46:01

developer tools Apple really needed was

46:03

a C compiler, Pascal compiler,

46:06

>> because that that's what they built

46:07

their software on mostly C. That's what

46:09

they built their software on. That's

46:11

what everybody else did. There there was

46:13

a thriving third market uh for other

46:16

developer tools. But the small talk

46:20

wasn't going to do really do anything

46:22

for anybody. Maybe school kids or

46:25

something, but it wasn't it wasn't

46:28

driving Apple sales. People who bought

46:30

Apple computers typically didn't want to

46:33

do small talk. Right.

46:34

>> Correct.

46:35

>> Correct. So So we talked about the

46:37

decline of small talk. I'm sensing

46:39

around this time it's if if you know

46:42

like as personal computers started

46:44

spreading it's it seems like it just

46:46

remained the niche right no it was quite

46:49

strong at that time it was growing fast

46:53

um lots of people like relative to the

46:57

previous year were using it a company

47:00

had spun out of Xerox called Park Place

47:04

uh which was selling small

47:08

as a big ticket item for developers and

47:12

this is before there was open-source out

47:15

there. So the idea that you could set

47:16

you could charge money for a language

47:19

implementation was a lots of people were

47:21

doing that kind of thing and this was

47:23

running out of that same kind of

47:25

playbook.

47:26

>> Okay. So it was still doing it. It would

47:28

just didn't make sense for Apple's

47:29

customer base.

47:30

>> Correct.

47:31

>> And and their

47:33

hardware.

47:33

>> Yeah. Also though at the same time a

47:36

bunch of the ex Xerox people had come to

47:39

Apple. So my friend Larry Tesler was

47:42

there and by friend I mean bitter enemy

47:46

who I respected a lot. Sometimes you

47:48

know you there are people who just

47:51

raised the hair on the back of your neck

47:53

and Larry Tesler was one of those to me

47:56

and I don't know if even the feeling was

47:59

reciprocated. He passed a few years ago,

48:02

but so I never got a chance to talk to

48:04

him, but I talked to him, you know, we

48:07

we would check in afterwards. Anyway, he

48:10

was the head of the advanced technology

48:11

group at Apple at that time. Alan K had

48:15

moved to Apple and was working on a

48:17

programming language for kids, another

48:19

programming language for kids called

48:21

Playground.

48:22

Dan Dan Engles was there. So, a lot of

48:26

the Xerox folks were were at Apple and I

48:30

heard about Alen K's project and thought

48:33

that was a dream of mine. Bite magazine

48:35

had an article on small talk. I read

48:38

about the development of Small Talk. The

48:41

project started in like 71 and it was

48:45

1980 before they released anything at

48:48

all publicly. And just imagining working

48:51

in that environment just seemed like

48:52

heaven to me. So, I moved to

48:56

the Alan K's playground project. Now, I

49:00

was horribly ineffective.

49:03

Uh, ended up getting fired from that

49:06

job.

49:06

>> No way.

49:07

>> Yeah. Oh, sure.

49:08

>> As as a programmer, you being

49:11

inefficient. What happened?

49:13

>> I wanted to do my own thing. And this

49:15

was still, you know, I'm still in this

49:18

punk

49:19

mode where I'd listen to somebody else's

49:22

ideas and I go, "Nah, I don't think so.

49:24

I have a better idea." And if you're

49:28

working by yourself, that's okay. But if

49:31

you're working in a team, that's not

49:34

okay. So, uh, uh, the it came to a head.

49:38

I was the program chair for the oops

49:41

conference, which we probably should

49:43

have mentioned earlier. Um there was

49:45

this conference and it was the hottest

49:48

conference and everybody who was ever

49:50

anybody was there and it was growing

49:52

fast and I was involved in it kind of

49:55

stumbled into it but I was in ' 89 I was

49:57

the program chair for oops right for

50:00

oopsla and I spent a month just reading

50:04

papers while uh ignoring my duties to

50:09

the playground project and that was kind

50:12

of the final straw. okay, you're you're

50:14

not helping us, so you you need to move

50:18

on. And then the conference happened and

50:21

my second child was busy not being born.

50:25

So I didn't even get to attend the

50:27

conference, but I had heard about the

50:30

playground project. So I moved to the

50:31

the playground project and and did a

50:34

little bit to help build this

50:36

programming language for kids. That was

50:40

the next thing beyond object-oriented

50:43

programming. You would you would call it

50:47

today you'd call it reactive

50:48

programming. So you didn't you couldn't

50:51

send a message. You could only

50:54

raise some condition that some other

50:56

object would would be waiting on. So

51:00

it's like pub sub but that was the only

51:03

control mechanism. And then I wanted to

51:05

ask you about this this was around this

51:07

time CRC cards. What are CRC cards? I

51:11

know they stand for class responsibility

51:13

collaborator cards but what were they

51:16

and how did you come up with them? You

51:17

have this these imperative programs and

51:19

you have a flowchart which represents

51:22

accurately if kind of verbosely the

51:25

control flow in an imperative program.

51:28

Now we have these objects and you send

51:31

messages which are polymorphic. So you

51:33

don't know exactly what code's going to

51:36

be invoked when you send a message. And

51:40

people were like, well, how do you even

51:43

visualize, internalize?

51:46

For me, I'm um I have kinesesthetic

51:48

synesthesia. So, I can feel

51:52

in my body if I'm looking at some code,

51:55

I can feel in my body. It wants to go

51:58

this way. It's

52:02

Yeah. which is, you know, I've I don't

52:05

know if I've met anybody else who

52:07

describes their experience of

52:08

programming in the same kind of way, but

52:10

but there we go. How do you get a sense

52:14

of however you internalize this of

52:17

what's going on in this program where

52:20

you you can't just say we execute this

52:23

line and then we execute that line

52:25

because as soon as we send a message, we

52:27

don't know what's going to happen. So

52:29

Ward came up with the idea

52:32

to write

52:35

down on cards, index cards, here's

52:38

what's going on. Because we would we

52:40

would talk this way all the time. So you

52:42

know, we've got a we have a rectangle

52:45

and it asks the renderer to do the thing

52:48

and then that goes into the pipeline

52:50

which dah.

52:52

So we would talk with our hands a lot.

52:55

So he said, "Well, why don't we write

52:57

these things down on cards?" So

53:00

a a big challenge in object-oriented

53:03

programming is dividing the

53:05

responsibilities because you're moving

53:07

the computation

53:09

to where the data is. Saying, "Well,

53:12

this object does this and that object

53:14

does that is a really critical decision

53:16

because you want to you want the

53:18

computation near to the data so that

53:19

there's less coupling between them."

53:21

which is a lesson that I I think uh kind

53:24

of got lost in the noise. That's the

53:26

fundamental design move in ob in

53:28

designing object-oriented programs and I

53:30

I think I stand behind that. So so have

53:32

have the data be close to where it's

53:35

used where the computation will happen

53:37

>> uh backwards

53:38

>> backwards

53:38

>> have have the computation move to where

53:41

the data already lives

53:42

>> have the computation move to where the

53:44

data is. So like if you have a rich

53:45

object with the lots of data inside of

53:48

it for example, you want the

53:50

computations to move there. So you want

53:52

the like objects to invoke and just just

53:55

get the data and do whatever computation

53:56

they need to.

53:57

>> If I'm going to operate on stuff that's

53:59

on the inside of a rectangle like area.

54:02

>> Yeah. Do I have height time width

54:06

scattered all over the universe or do I

54:09

have an area inside the rectangle that

54:12

does height and width at the limit? Now

54:15

I don't care that the rectangle has

54:17

height and width

54:19

that's hidden from the rest of the

54:21

world. Like I can I can represent the

54:23

rang rectangle with two corners

54:26

>> or I can represent the rectangle as a

54:29

top left a height and a width. Mhm.

54:32

>> To the rest of the world, it doesn't

54:34

matter as long as they both respond to

54:36

area. So now I can come up with another

54:39

representation and another

54:40

representation and the rest of the world

54:42

doesn't have to care if I've moved the

54:45

computation where the data lives.

54:47

>> Yes. And that means you can have looser

54:50

coupling.

54:50

>> Correct. Understood. It's a good lesson.

54:54

>> Yeah. Yeah. Yeah.

54:54

>> And and even today cuz everything that

54:56

we do is under the hood. Almost

54:58

everything we do is object. A lot of it

55:00

is object-oriented. And I don't think we

55:02

think about these.

55:04

>> Yeah, I see a lot of criticism of

55:06

programs written in object-oriented

55:07

languages that aren't criticisms of

55:10

object-oriented programming or design.

55:13

So after Apple, you moved to a company

55:16

called Maspar.

55:18

And the thing that I notice here is unit

55:21

testing. This was the place where, as I

55:24

understand, you came up with something

55:25

called SUnit. While I was at Tektronics,

55:29

uh, I got interested in testing. At that

55:32

point, testing was a sociological

55:35

divide. If you got A's and B's in

55:38

computer science school, you got to

55:39

program. And if you got C's, you had to

55:41

be a tester. So, it really was like a

55:44

status. I'm not going to test. I'm I'm

55:46

one of these guys, not one of those. But

55:48

I got interested in how would you

55:51

automatically test programs? How would

55:54

you get a sense of confidence in what

55:56

you were doing? So, I tend to be an

55:58

anxious person and the more complicated

56:00

my programs were, the more I had to be

56:02

anxious about. The more experience I had

56:05

with what kind of bugs could possibly

56:06

exist, the more anxious I got. And I

56:08

thought there was just some way to kind

56:10

of quell this without pills. That would

56:13

be great. I tried out a bunch of

56:16

different approaches to writing

56:18

automated tests. At that point in

56:21

addition to this this uh status divide

56:24

there was a tool divide. You had testing

56:26

tools which would have their own kind of

56:29

language and some way to connect with

56:33

the program that was under test. So I

56:37

tried this and that and the other thing.

56:38

It was actually after Maspar that uh I

56:41

think is all ancient history. So we'd

56:44

have to go you know dig through the

56:46

archaeological layers. I started

56:48

consulting and I was going to tell a

56:49

client that they should write tests. I

56:51

was going to fly out to Chicago the next

56:53

day, but I didn't have any way for them

56:56

to write tests. So, out of these five or

56:59

six experiments that I'd done, I

57:01

synthesized

57:03

test case, test suite, and test result.

57:05

That was the it was like three classes

57:08

and 12 methods. But it was a framework

57:10

where you could write tests that would

57:13

execute isolated from each other

57:16

fully automatic and give you a rollup of

57:20

the results of it.

57:21

>> So this was pretty much a unit testing

57:23

framework for small talk.

57:24

>> It was written in yeah the first version

57:26

was written in small talk. So, Maspar

57:29

was a Silicon Valley startup

57:32

venturefunded intended to build an

57:35

entire new architecture which was uh

57:38

SIMDI single instruction multiple data.

57:41

So, we would have a Taurus of process

57:45

processing elements

57:47

uh up to 16,000.

57:49

So, you have 16,000 and they're

57:51

connected in a toridal grid. So you

57:55

could talk to the the processing

57:57

elements in your left, right, up, down,

58:00

and diagonally. And it looks very much

58:03

like the Nvidia architecture now, but

58:08

this was way back when, and it was just

58:11

too early. So three years of that

58:15

building programming environments for

58:17

high performance computing. So the

58:19

intention was to get the kind of

58:20

performance you'd get out of a cray at

58:23

that time um

58:26

but for a tenth the cost and they needed

58:29

a programming environment. So we built a

58:31

programming environment in Small Talk

58:33

that did some really cool stuff. You

58:35

could you could single step a forran

58:38

program

58:39

and build a performance profile at the

58:43

same time.

58:44

>> No way. So you built a runtime that

58:47

allowed you to do in in small talk to

58:49

interpret for example program programs

58:51

and run them.

58:52

>> No the we had a a standard compiler an

58:56

optimizing compiler but because we had

58:59

we controlled the operating system we

59:02

could build really low-level probes to

59:06

collect performance profiling data. So

59:08

we could get line level profiles for

59:12

these four trend programs running on

59:14

16,000 processors and great gobs of

59:17

data.

59:18

>> That's awesome. Like when you're going

59:20

from not just like you're going to lower

59:23

level, you know, like building

59:25

infrastructure that runs programs, but

59:27

then I want to go back to to SUnit. So

59:30

the concept of of SUnit, the the these

59:34

concept you put together a test case.

59:36

What was it? the test case,

59:37

>> test suite and test result.

59:40

>> This really became sticky because then

59:42

there was JUnit which you later created

59:44

with with Eric Gama and there's a whole

59:47

suite uh nunit for uh I think that was

59:51

fornet xunit.net

59:54

all of them took over some of these

59:56

ideas and a lot of modern unit testing

60:00

frameworks are built on some of these

60:02

ideas. Why do you think it was so sticky

60:05

and why do you think it wasn't created

60:07

beforehand? So beforehand

60:11

because of this social divide between

60:14

programmers and testers. There was a lot

60:17

of

60:18

incentive for the testers to have their

60:21

own language. This is my tool. I know

60:24

how to run it. I'm going to run it. And

60:26

it was very adversarial at that time too

60:29

and kind of patronizing like you're a

60:31

programmer. you can't be trusted to

60:34

test, you know, you'll just say it works

60:35

fine. I'm going to be the adult

60:38

supervision,

60:39

you know, and sometime and sometimes the

60:42

programmers really did act that way. So

60:45

I, you know, hard to hard to argue with,

60:48

but I think that encouraged this idea

60:51

that a testing tool is its own its own

60:54

world. the inspired decision to use the

60:57

same language

60:59

to test as you're testing. It was a

61:02

natural decision because I was in small

61:04

talk and you should be able to represent

61:06

anything in small talk. So, you know,

61:08

and I was just used to how do I

61:11

represent this as objects. So, sounds

61:13

like small talk as a language has been

61:16

early to a lot of things. I sense a lot

61:18

of innovation coming from small talk

61:20

because it was one of the first

61:21

languages that did have objects but it

61:23

was a very simple language. So you

61:24

needed to build a lot of things which

61:26

then led to representing a lot of things

61:29

to talking about them design patterns

61:31

and now also you know being able to

61:34

write your test environment if if you or

61:36

being forced to do so if if you wanted

61:38

to do it. Well there was an ethos that

61:40

went along with small talk. So if you

61:43

didn't like the tools, if you're running

61:46

the debugger and the debugger doesn't

61:48

have some feature that you really need

61:50

right now, you just hop on the stack,

61:53

implement the feature that you want, and

61:55

then get back to whatever it was you

61:57

were doing. That was just a natural

61:59

thing because there was never this huge

62:01

gap. You know, imagine today, uh, I'm

62:05

I'm using a C compiler and I realize,

62:08

oh, I wish C had this new feature. We're

62:11

embarking on a multi-year project to go

62:14

and like the huge barrier to entry to go

62:18

to the next level. And in small talk by

62:21

design, for example, you have pop-up

62:23

menus and they you can see all of the

62:24

options right there. That's a deliberate

62:27

pedagogical choice. It says, "Okay,

62:30

well, you know about cut and paste, but

62:34

you don't know the other things that you

62:36

can do right here." So the menu doesn't

62:40

just give you cut and paste. It gives

62:42

you all the things that you can do as a

62:44

way to encourage you to learn about them

62:46

because eventually you're going to I see

62:48

this format item here and I well what

62:51

does that do? So that was very much part

62:53

of the small talk ethos that this system

62:55

would teach you as you kept using it. So

62:58

yeah it was very natural to build the

63:01

testing tool in the language. And of

63:04

course you have to kind of bastardize

63:05

the language a bit here. Here I've got

63:07

this this class for some test case and I

63:11

have a method which is one of the test

63:13

cases and it starts with t is kind of

63:16

magic you know uh this is getting

63:19

squidgy and then when you execute it you

63:22

create one of these objects you send it

63:24

setup because you don't you know may

63:27

have to build some stuff and then you

63:29

send it the test t something or other

63:34

and it executes that one thing and then

63:36

you Then assuming well then regardless

63:39

you run the tear down from that. So it's

63:42

not it looks like the the syntax is the

63:44

same as the language.

63:46

The the representation of the tests

63:53

you kind of borrow from the

63:55

representation of just any kind of code

63:58

and then you interpret it yourself. So

64:01

it's it it it it it's in the language

64:03

but it's not really in the language at

64:05

the same time. But people don't think

64:07

about that. They just think I subclass

64:09

this I give a method with the annotation

64:13

of test or with starts with tst and then

64:16

it just starts working and that's fine.

64:18

I want to jump to a few years later from

64:21

to 1996 you started to work on a project

64:24

at Chrysler and this is where you met

64:26

Martin Fowler. What was this project?

64:29

I'd actually met Martin Fowler a little

64:31

bit before that. So as early as the

64:34

first oops conferences, the question of

64:38

how do we manage projects with objects

64:41

differently than we manage projects with

64:42

the previous generation of tools. The

64:45

previous generation of tools definitely

64:47

gave you a many fewer options for

64:50

change. You'd still have to change code,

64:52

but it was just a lot harder compared to

64:56

working with object-oriented programs.

64:58

So what is the methodology? We had we

65:01

had the structured analysis, structured

65:04

design. What is the methodology for um

65:08

for objects and how should it be

65:10

different? That was the million-dollar

65:11

question at the original 86 oops law. By

65:15

the time 9495

65:18

rolled around, we were starting to get a

65:20

clue what that would look like. There

65:23

were I think uh the rational and unified

65:26

process or the the things that would go

65:29

into the rational unified process

65:31

already existed by that time which was

65:34

>> Brady Buch was involved in that.

65:35

>> Brady BC Evar uh James Rumba Ivar

65:40

Yakabson. So people were coming up with

65:43

some kinds of answers. Ward had come up

65:46

with his own

65:48

uh answer called episodes written into

65:51

as a pattern language because we were

65:54

like you know I don't have a big bag of

65:56

tricks I have to keep using them over

65:58

over again and the same is true turns

66:00

out of of everybody. So you can find

66:02

that episodes

66:04

on uh Ward's C2 site. It's really

66:08

interesting to compare that because I I

66:10

borrowed heavily from that. I borrowed

66:12

from everything else that I had seen and

66:15

experienced. But at that point, I'd been

66:18

when did I leave Masspar? 92. So I had

66:21

been an independent consultant for four

66:24

years at that point. And there were a

66:28

couple of workshops

66:31

uh held in Snowbird. I don't know why we

66:34

picked Snowbird, but somebody else did

66:37

uh about this methodology question.

66:41

Um, and I met Martin at the first one of

66:44

those that I attended. And his

66:46

introduction was, it's just the classic

66:48

Martin introduction. He said, "I am the

66:49

only person here I've never heard of."

66:51

And he was already doing some some great

66:54

work on uh analysis patterns

66:58

uh at the time, which I knew about. So,

67:00

I was excited to to meet him. Get to

67:02

this Chrysler project. The project's

67:05

important for Y2K, but it's not clear

67:07

that it's going to be finished in time.

67:09

Martin was already there as a

67:11

consultant.

67:13

Uh I had met Ron Jeff doing small talky

67:17

stuff. I don't remember exactly how we

67:19

met, but long story short, I came in as

67:25

I know lead consultant or something

67:27

restarting that project in a very

67:30

different development style. And for

67:33

that style,

67:35

I took everything that I knew that was

67:38

useful and cranked it up to 11 and

67:41

discarded all the stuff that I couldn't

67:43

prove we needed.

67:45

So that was the value system behind this

67:49

new style of development. Uh Martin and

67:52

I would visit there periodically. Ron

67:54

was there full-time. I was originally

67:57

brought in as a performance consultant

68:00

because I knew a lot about small talk

68:02

performance and they were using a

68:04

database called gemstone which it was

68:06

small talk objects small talk semantics

68:09

but coupled with persistence

68:11

transactions indexes all that database

68:14

good stuff but it wasn't going fast

68:16

enough so I said well where's the test

68:18

case that makes sure that I don't break

68:21

something if I make some changes and I

68:22

said well actually it's not computing

68:24

the right answers yet. And I said,

68:26

"Well, then I can make it go really

68:28

fast." And they didn't like that answer

68:30

very much. Anyway,

68:34

most change I've ever seen over the

68:36

course of one week. At the end of which,

68:38

everybody was exhausted. They've been

68:40

working very long hours. I said, "Send

68:42

everybody away for 2 weeks. Tell them to

68:44

get some rest. We'll come back. We'll

68:47

throw away all the code that we've

68:48

written so far, and we'll restart." And

68:50

we restarted on this 3-w weekek cadence.

68:54

Every three weeks we would have more

68:57

test cases specified by Marie, the

69:01

payroll expert would be working and then

69:05

we'd start another 3-we segment and

69:07

another and another.

69:09

No, it turns out those 11s that we

69:12

turned everything to, there were several

69:15

notches beyond that, but it was just

69:17

that was the most intensely we could

69:20

imagine replanning, integration,

69:24

deployment, refactoring,

69:27

and so on. The ideas that went into that

69:29

was this synthesis of all these

69:31

experiences that I'd had. And then so

69:33

this is from from Ward when the two of

69:35

you started to pair and pass the

69:37

keyboard and and decide on all the

69:39

different things that you're going to do

69:41

your experience with tests as as a

69:44

concept of that it doesn't needs to be

69:45

the testing team that does it themselves

69:47

but you can do it yourself in your own

69:49

language which was just new new and and

69:52

so all of these ideas just all came

69:54

together.

69:54

>> Yeah.

69:55

>> And then when did you give it a name? It

69:58

started going well. At first I was like

70:01

I was excited. I was scared. I was

70:04

excited. Then it started going really

70:06

well.

70:07

>> So like the project started to go

70:08

visibly well.

70:09

>> Yeah. Yeah. After my like six weeks and

70:11

then I was happy to be telling my

70:13

friends about it. This new style of

70:16

working that we're doing here at

70:17

Chrysler. This new style of working

70:19

we're doing here at Chrysler. This new

70:21

style. They got kind of old to say that

70:23

over and over again. So now I'm back

70:26

with the C thesaurus trying to figure

70:28

out what are the words

70:30

>> called us.

70:31

>> I thought we were really on to something

70:35

that was going to be big. So I wanted to

70:38

protect it. Apologies to Grady who's a

70:41

good friend now. But um I didn't want

70:44

Grady BCH to ever say that he was doing

70:48

this thing. So, I had to pick I had to

70:51

pick a moniker that was unattractive

70:54

enough that somebody would try and steal

70:56

it. And this is about the point at which

71:00

uh

71:00

>> you're you're now this punk again.

71:03

>> Yeah. Well, yeah. I still am, but

71:06

[laughter]

71:07

I'm just I'm just an older punk now.

71:10

Yeah. Yeah. But but a little bit of

71:11

thumb the nose at the establishment.

71:14

Extreme sports were there. I kind of

71:17

like the analogy with extreme sports

71:19

because you don't just hop on a

71:23

snowboard at the top of some avalanche

71:25

and the first time. No, you have to be

71:28

supremely prepared.

71:31

You have to have done all of your

71:33

research and then if you have these

71:35

outstanding skills, then you accomplish

71:38

things.

71:38

>> Yeah. And training and all that,

71:40

>> right? that seem impossible and are

71:43

impossible if you haven't done all the

71:45

prep. So it's accurate, it's edgy, it's

71:51

the that word extreme and hence extreme

71:55

programming was was born.

71:57

>> That's so that's the extreme part.

71:59

Extreme we had I knew that a bunch of

72:02

people wouldn't like it but that's okay.

72:04

I started out calling it development

72:08

which I still kind of like because

72:11

there's more to delivering value with

72:14

software than programming

72:16

but the methodologies extent at that

72:20

time treated programming as this

72:22

clerical task.

72:24

We'll we'll we'll draw these diagrams

72:26

and these diagrams and build this thing

72:29

and the 14 ways to visualize this and

72:31

then then there's some programming and

72:33

then we'll draw some more diagrams and I

72:36

thought programming sitting fingers on

72:39

keyboard staring at code that's that's

72:42

where I do my learning

72:45

because that's where you can no longer

72:47

fool yourself that you actually

72:48

understand either you compute the

72:50

correct value or you don't compute the

72:52

correct value. So I wanted to elevate

72:55

that moment of reality meets program

73:00

and that's where the programming comes

73:02

from. Now from very early days I also

73:05

called it XP

73:08

as uh a way of separating from the

73:13

downsides of both of those words extreme

73:15

and programming. So we can just call it

73:17

XP and it's it's more of a generic

73:20

thing. Not long after that, Microsoft

73:23

releases Windows XP and there's an

73:25

alternate universe in which I sued them

73:27

and succeeded. And there's another al

73:30

alternate universe in which I sued them

73:31

and failed and bankrupted myself and my

73:35

children all starved to death. So,

73:36

>> Right. Right. Cuz this was right around

73:38

the year late '9s and XP came out. Yes.

73:41

Soon after, I think 2000 or 2001,

73:43

something like that. When did XP extreme

73:46

programming recall start to become big?

73:48

Was it as you gave it a name and you

73:50

started telling people or then there was

73:52

your book which came out in the year

73:54

2000? I remember the first talk about XP

73:57

I gave I had some flyers to hand out. So

74:01

I think it was at an oopsum on a panel

74:03

or something like that. I I talked some

74:05

about XP and afterwards

74:09

people were

74:10

give me a copy. No, no. Uh uh uh uh uh

74:13

uh uh. The reaction to it was just

74:16

tugging on my shirt wanting a piece of

74:19

this thing.

74:21

And I think the XP had exquisite timing

74:25

in that the dot the upside, not the

74:30

bomb, but the the upside of it was just

74:32

starting to hit. They looked at other

74:35

methodologies. It would say, you know,

74:37

very carefully prepare, do this analysis

74:40

document, do this design document, then

74:42

a bunch of coding, then a bunch of

74:44

testing.

74:46

They could tell that's never going to

74:48

work in a world that's changing as fast

74:51

as the internet wave starting to crest,

74:55

starting to come into, you know, the

74:58

this super hyper growth. On the other

75:01

hand, we know that this cowboy style of

75:04

just, you know, you have the Jolt Cola,

75:07

rest in peace, Jolt Cola, cowboy, you

75:10

have a bunch of programmers, they do

75:12

incomprehensible stuff, they don't talk

75:14

to anybody, you just slide pizza under

75:17

the door, and then you get the code out.

75:19

That's not going to work either. Here's

75:21

this thing that looks like it's kind of

75:23

in between the two. There's discipline

75:25

to it. There's iteration to it. There's

75:27

transparency to it. You have ways of

75:29

steering what goes on. You have ways of

75:31

tuning the process. You have all these

75:34

tests to make sure that stuff actually

75:36

works. You have frequent alignment

75:39

between people, whether it's business

75:41

people and technology people or

75:43

technology people with each other. Okay,

75:45

I can see how this could work. And so

75:48

they could see the internet is exploding

75:52

and I can use XP to take advantage of

75:55

that opportunity in a way that I I can't

75:58

I don't there wasn't really another

76:00

alternative to it.

76:01

>> Basically XP was giving you a way to

76:04

move pretty fast and nimble but also

76:06

have a sense of stability not just going

76:09

wild. tests there. You had the

76:12

iterations, the planning, the learning.

76:14

And then when did TDD come along?

76:18

Because there was a book that you you

76:22

wrote that came out, I think two years

76:25

later, uh, test-driven development by

76:27

example. And how did it relate to XP?

76:31

>> So TDD was an earlier test development.

76:34

>> Test-driven development was an earlier

76:36

rediscovery for me. Remember, I was a

76:38

kid. I read all these books. I remember

76:41

one of the books my dad brought home and

76:43

I still haven't found a a copy of it.

76:47

Said, "Here's how you program." This was

76:50

back in the days of taped to tape. So,

76:53

you'd have an input tape, you know, like

76:56

time cards, and then you put it through

76:58

the payroll program, which would write

77:00

an output tape, which was like dollars

77:04

for checks, dollars for withholding,

77:06

etc., etc.

77:07

>> Yeah. So it was always and then

77:09

>> really back in the day

77:10

>> really back in the day and and you'd

77:12

have these long strings of this and it's

77:14

actually functional programming because

77:16

you can't change the input tape but

77:19

operating payroll or operating accounts

77:22

payable or operating inventory was a

77:24

process of I take these tapes I feed

77:27

them into this program I take the output

77:29

of that feed them into this program and

77:30

blah blah blah blah blah blah and then

77:32

you really manual like actually

77:34

>> physically pulling a tape off and moving

77:36

it over. Yeah. And it so it said here's

77:39

how you write one of these programs is

77:41

you take an input tape an actual input

77:43

tape that you need to process and you

77:45

manually type in the output tape you

77:47

expect that to generate. You say okay

77:49

well this number of hours uh should I I

77:52

should have a record in the output that

77:54

like this. So I see where we're going

77:56

with this. You're you're defining the

77:58

the output. You're

78:00

>> before you start on the program.

78:01

>> Yeah. So first you need to know what do

78:03

I expect? How can I validate it?

78:05

>> Correct. I had read that as a kid,

78:08

didn't understand diddly squat, but but

78:12

it's it's back in the back here

78:13

someplace. I wrote sunit for the first

78:18

started using it. Gave it to Hal

78:20

Hildebrand, one of the smartest

78:21

programmers. I knew I didn't figure he

78:24

would need it. He used it. He loved it.

78:27

So, I knew I was on to something with

78:29

with this this testing framework. And

78:33

then I [clears throat] was just kind of

78:35

farting around and remembered this

78:38

typing in the output tape first and

78:41

mapped that onto the

78:44

testing that I was doing with SUnit. I

78:46

went, well, if I followed that pattern,

78:49

I would write the test before I wrote

78:51

the code. And I can remember laughing

78:54

out loud because it was such a stupid

78:55

idea. Why would you

78:59

write a test that you know is going to

79:01

fail? you you don't even have the

79:03

classes defined yet. You don't have the

79:05

methods defined yet. It's just it's

79:08

going to fail a bunch of different ways

79:10

before it could possibly succeed. Cool.

79:13

Let's try it and see what happens. So, I

79:15

I used stack as my first example. So, I

79:19

have a stack new and I push something

79:21

and I pop it. I should get the same

79:23

thing back. Okay. And then I went to

79:25

program it and okay, well, that's easy

79:28

to satisfy that. What's the next one?

79:30

You know, you push two things and you

79:31

get them back in the right order. Okay.

79:34

And this and uh

79:38

dupe

79:40

pop top

79:43

is empty and finished. Where's the

79:47

anxiety?

79:48

>> Oh, just gone.

79:52

Oh, for the first time.

79:54

>> Wow. I can't imagine another test case

79:58

that wouldn't pass. So, I'm really I'm

80:02

finished and I feel great. I feel

80:05

finished and I am finished.

80:09

Wow. Go going from this is a stupid

80:11

idea. Let's let's try it. Absolutely.

80:14

No, I made a comment. Always try your

80:17

stupid ideas if you can do it cheaply

80:19

and reversibly. Jumping off a bridge is

80:23

not a reversible decision. Not talking

80:25

about that. I'm talking about stuff like

80:27

this where you're just like, "Here's a

80:28

stupid idea." 99 times out of a 100

80:31

it'll fail. But that one time you won't

80:34

have any competition cuz nobody else is

80:36

stupid enough to try this idea. Part of

80:38

this punk attitude, I don't care what

80:40

you think about this has enabled me to

80:42

just try lots and lots of stupid ideas.

80:46

And most of them you don't see, but

80:49

there had been a string of them which

80:52

worked out way better than they would

80:55

have expected to work out. Well, and

80:58

then a bunch of other people tried these

81:00

ideas as well. You know, like I think

81:01

TDD is a good example where there was a

81:04

time where shortly after you wrote the

81:06

book about it as well. Uh it was it was

81:09

a super popular book. I still remember I

81:11

think I had a copy as well back in the

81:13

the late uh two 2000s people were like

81:17

doing you know group exercises

81:20

developers were developing accordingly

81:22

over time it it probably dropped I would

81:25

say in the 2010s I saw fewer and few

81:27

people doing it uh and it almost went

81:30

out of style completely and now with uh

81:32

with agents the idea is back because

81:35

turns out it might take more time what

81:37

not but agent agents can do that but

81:38

it's a It's pretty useful for them to

81:41

test themselves.

81:42

>> It costs tokens in the short run, but it

81:45

can save them in the long run because

81:48

one of the classic genie mistakes is

81:51

stuff doesn't work.

81:53

So, how do you how do you pull in the

81:56

reins a little bit? And why did TDD go

82:00

out of fashion? I I think uh there's a

82:03

big part of it is I work on something

82:05

for a while and then I switch to

82:06

something else. That was true of

82:08

patterns. It was true of Junit. It's

82:10

true of TDD. It's true of XP. I just

82:13

move on to the next thing. So I moved on

82:17

to the next thing. TDD is out there. And

82:20

then there were people who used it as a

82:23

moral cudgel. Like you should be if

82:26

you're not using TDD, you're not

82:29

professional. And that's just such

82:31

People can write very good

82:33

software with a wide variety of

82:38

workflows. Now, there's advantages and

82:40

disadvantages to different workflows.

82:42

The sweet spot of TDD is this

82:46

combination of discovery and

82:48

realization. I kind of know where I want

82:50

to go. I don't know exactly I'm going to

82:52

get there,

82:54

but I do know the first step. So, I take

82:56

the first step and that teaches me

82:57

something which lets me take the next

83:00

step. and that teaches me something. I

83:02

if you can just go implement implement

83:04

implement implement,

83:06

fine. There's other workflows that are

83:07

fine. If you just want to sit there and

83:10

go learn learn learn,

83:14

I don't think that works very well, but

83:16

you certainly don't need TDD. It's when

83:19

you have this rapid alternation between

83:23

I do a thing, I learn a thing, I do a

83:25

thing, I learn a thing, I do a thing, I

83:27

learn a thing. That's where TDD is

83:29

really powerful. But it's not a moral

83:32

decision. It's a practical decision.

83:35

>> Test-driven development is one of Kent's

83:37

most lasting contributions to how

83:38

software is written and shipped. And

83:40

today with Agentic development, it's

83:41

more important than ever. If you work

83:43

with agents, your job is no longer

83:44

writing code. It's specifying and

83:46

testing it. This is where I need to

83:47

mention our presenting sponsor.

83:49

Antithesis. Antithesis is the most

83:51

effective method of verifying a code

83:53

today. Let me explain how it works.

83:55

Antithesis runs your whole system in a

83:57

hostile simulation. By doing so, it

83:59

finds every bug before your users do.

84:02

And because the simulation is fully

84:03

deterministic, antithesis doesn't only

84:05

find bugs, it gives you a perfect

84:07

reproduction of every issue. I know this

84:09

sounds close to science fiction, but

84:10

it's actually hardcore engineering under

84:12

the hood. Jane Street, Fly.io, and the

84:15

CCD community ship agent written code

84:16

with full confidence because they know

84:18

it's been verified by antithesis. To see

84:21

more case studies and details, head to

84:22

antithesis.com/pragmatic.

84:25

That's antithesis.com/pragmatic.

84:28

Kent has spent his career building the

84:30

primitives that the rest of us now take

84:31

for granted. Unit testing design

84:33

patterns refactoring. And building on

84:35

solid primitives is exactly what our

84:37

seasonal sponsor works is all about. If

84:39

you're building any SAS, especially an

84:41

AI product, sooner rather than later,

84:43

you'll need to get around building

84:44

enterprise features. Things like O for

84:46

apps and agents. Work handles it. SSO,

84:50

skim, fine grade authorization built for

84:52

how agents actually operate. The fastest

84:54

growing AI companies entropic open AI

84:57

cursor perplexity already trust work to

84:59

solve these problems. Check out

85:00

work.com.

85:02

And with this, let's get back to Kent

85:04

and where the agile manifesto came from.

85:06

I wanted to talk about the one thing

85:08

that you're also very very known for,

85:12

the thing that 17 people wrote, but

85:13

you're the first one listed, the Agile

85:15

Manifesto. Can you take me back to what

85:18

happened in in Snowbird? What was the

85:20

industry like and and what made all of

85:23

you come together? There were a bunch of

85:25

people remember we were talking about

85:27

what is the methodology for objects and

85:29

you had kind of this dominant

85:32

rational unified process which I say is

85:35

neither rational nor unified nor a

85:37

process but that's a separate mostly I

85:40

did that to tweak people's noses but

85:43

that was the adult way to to do

85:45

development and there were a bunch of us

85:47

who if you talk to Grady if you talk to

85:50

Jim and you talk to Ivar how they would

85:53

apply I it is actually looks a lot like

85:56

the way that I would develop but doesn't

86:00

matter what you would do. What matters

86:02

is what the people who read the stuff

86:05

that you write would do. And it was

86:09

being used in a very waterfall style.

86:12

Bunch of analysis, bunch of design,

86:15

bunch of implementation, separate

86:17

testing,

86:19

disaster over and over and over again.

86:22

So a bunch of us looked at that and in

86:25

our own ways, in our own sequence of

86:28

time said, "No, we we shouldn't do this.

86:31

We should do something else." And we

86:33

started making enough noise

86:36

that we started getting attacked by the

86:39

rational unified process people. Well,

86:41

you don't want to do that. You want to

86:43

do my thing and here I'll sell you tool

86:46

for millions of dollars to help you do

86:47

it. I I can understand why they would

86:50

attack. But we started realizing, okay,

86:52

if we're all going in this similar kind

86:55

of directions, scrum, feature-driven

86:58

development, we had to come together. We

87:01

had a meeting in Norway where we got

87:06

together, gave a presentation. This is

87:08

towards the end of the time I was living

87:10

in Europe. I lived in Switzerland for

87:12

two years, 97 and 99. So in 99 we we

87:18

flew up to the tip of Norway and took

87:21

the Guten Berry, which I practiced

87:24

saying, and I'm sure I still butchered

87:26

it. Took this ferry down to Bergen and

87:29

it was light all day or all night.

87:32

Bucket list item. Definitely take this

87:34

if you ever get a chance because the

87:36

scenery is just absolutely spectacular.

87:38

But we were meeting and talking about do

87:41

do we have enough in common that we

87:43

could actually

87:45

do stuff together. The sense of that

87:47

meeting was yes, we should do something

87:50

together, but there's still a lot of

87:52

friction and there's a lot of

87:53

divergence. You're talking about people

87:55

with some

87:57

healthy egos,

87:59

>> strong opinions.

88:00

>> Me, not the smallest among them. So,

88:05

uh, when we got back, Jim Highmith and

88:08

Alistister Coburn,

88:11

uh, convened another meeting at at

88:14

Snowbird, same place that we'd been

88:16

having these kind of

88:18

methodology kind of meetings for a

88:21

while. And so, we all went there and um,

88:26

other people have told the details of

88:27

the meeting. I'm not going to be able to

88:29

recall them precisely enough. So find

88:33

one of those

88:34

uh recountings of this, but it was not

88:38

going well for me personally. I had a

88:41

nasty sinus infection and I was on some

88:43

heavy duty drugs. So I don't really

88:45

remember much of the meeting in general,

88:48

but I knew that things weren't going

88:49

very well because there's all these

88:52

people and they I want my stuff in. No,

88:54

I want my stuff in and that contradicts

88:56

your stuff. And so we all we took a

88:59

break. We walked out and Martin and Jim

89:04

Highmith stayed behind. When we came in

89:08

from the break, there was the basics of

89:12

the manifesto.

89:14

You know, we the the that format. We

89:18

value these things, but we value these

89:20

things more.

89:22

And the four specific items that was

89:24

that was all in place. And then the and

89:28

that was just a magic moment that I had

89:30

nothing to do with. And then we came up

89:32

with the principles. And I remember the

89:34

the only word in there that's mine is

89:36

the word daily when it talks about daily

89:38

interaction with users. I don't think I

89:40

had another thing in there. But when it

89:43

came time to publish it, what order the

89:46

names go? Like alphabetical

89:49

>> al absolutely alphabetical. So So when

89:52

when people say, "Oh, you're a

89:53

signator." as they know I'm the first

89:55

signatory alphabetically.

89:57

>> And then what was the impact of the

89:59

agile manifesto?

90:00

>> Oh, in instant instant people were so

90:03

excited again were now the rumblings of

90:08

the dotbomb.com.

90:10

It it was still going up.

90:12

>> I I think so

90:14

>> it was towards the end

90:15

>> but definitely towards the end like but

90:18

people were still looking for a like how

90:20

do we do this? How do we do this stuff?

90:23

How to build software quickly, cheap,

90:26

reliably. Everyone's searching for the

90:28

optional

90:28

>> with with optionality.

90:29

>> With optionality. Yeah.

90:31

>> Because when things are uncertain is

90:33

exactly when options give you the most

90:36

value and we had a story about how you

90:40

could preserve optionality. All of us in

90:42

in our own separate ways. That was

90:45

another case. So XP was the first time I

90:48

had people tugging on my shirt. JUnit

90:50

was another one which was SUnit. I had

90:54

SUnit. Eric was using Eric Gamma was

90:57

using this new language Java. We were

91:00

flying to America. He was going to show

91:02

me Java. I was going to show him SUnit.

91:05

So we developed JUnit testing itself in

91:09

itself on the flight from Vienna to

91:13

Washington Dulles.

91:14

>> Wow.

91:15

>> And when we landed

91:16

>> on the plane, no internet. No internet.

91:20

>> Two and a half hours of battery. Like

91:22

the clock is ticking.

91:24

>> Yeah. And no power adapter in the seat.

91:26

Oh, it was it was like a horsedriven

91:30

computing. So we landed and and we gave

91:33

Jayun to Fowler who was at at that oops

91:37

and um the next day I hear you have a

91:40

Java testing framework. Can I get a

91:42

copy? So we made floppy discs, 3 and 12

91:46

in discets and and we were handing them

91:48

out as fast as we could cuz there was so

91:51

much demand for it. So that was the

91:53

second time I've been through that kind

91:55

of a demand product market fit column

91:59

>> Yeah. Yeah. Exactly. Product market fit.

92:01

Um and then agile manifesto was the the

92:04

next version of that where people were

92:07

just really excited about it. beautiful

92:09

piece of marketing to have the original

92:11

signitories and then if you wanted to

92:13

sign it,

92:13

>> you could sign it for for a while. I

92:16

think they closed it after a while

92:17

because it got too many people,

92:18

>> right? But that meant that pe people

92:21

felt invested. They were already bought

92:23

in. They'd already attached their names

92:26

to this thing.

92:27

>> Is it interesting, right, how being

92:30

invested, being able to contribute or

92:33

feel you're contributing, it it can make

92:35

a difference. It it has made a

92:36

difference and and for agile for sure.

92:39

>> So uh one piece of followup is that word

92:42

agile part of the ar argument yeah

92:46

argument was around what are we going to

92:47

call this thing and somebody suggested

92:50

agile I don't remember who but probably

92:52

somebody somebody does and I objected

92:56

and what I don't like about it I didn't

92:58

like about it then and still don't like

93:00

about it is it's not defensible.

93:02

Nobody's going to say I'm not agile. Oh

93:06

no, I prefer rigid development. Oh, I

93:08

prefer inflexible development. No,

93:12

everybody's going to say that they're

93:14

agile, which extreme doesn't have that

93:16

problem. If you work hard at your skills

93:20

at being able to pair and being able to

93:22

design incrementally and being able to

93:24

test thoroughly and and build tools and

93:28

you make that investment now you say,

93:30

"Okay, I'm an extreme programmer." If

93:32

you haven't made that investment, you're

93:35

never going to say that you're an

93:36

extreme programmer if you're not. But

93:38

you're going to say you're agile even if

93:40

you're definitely not. So that was my

93:43

objection back then and and that

93:45

certainly played out. That word does

93:47

not only doesn't mean anything anymore,

93:50

it means something negative.

93:52

>> Okay. Can we talk about that of the

93:54

afterlife of of agile and and some of

93:56

the the capital, you know, the capital A

93:59

version, there's a whole uh industry

94:01

that was grown that initially was meant

94:04

to do good things, but it turned into a

94:06

snake oil industry in in many ways. We

94:08

now have scaled agile frameworks that

94:12

are sold for massive amounts for huge

94:15

companies which you know bog them down

94:17

with even more bureaucracy you can

94:18

imagine. How did you see this being

94:21

played out and did you expect agile to

94:24

to grow this big into both a commercial

94:26

story and and and and then all all of

94:29

these I guess snake oily parts?

94:31

>> I was certainly afraid that that was

94:33

going to happen at the time that we put

94:36

it together. The agile manifesto is the

94:39

intersection of the ideas of the people

94:41

in the room. I think there's a lot more

94:44

to software development than is

94:45

contained in the manifesto. And I've

94:48

written books and books and books about

94:49

what I think those things are. Without

94:52

the foundation of technical skills,

94:56

you can have the the best intentions of

95:00

we're going to be able to replan and

95:02

we're going to be able to implement in

95:04

any or you know we have a set of

95:06

features and we can implement them in

95:07

any order and we can add new features

95:10

anytime we want and you can say you're

95:14

going to do that but if you don't have

95:16

the technical chops

95:18

to write efficiently write

95:22

reliable software in bits and pieces to

95:25

design in bits and pieces to preserve

95:28

and enhance optionality

95:31

to write your own tools when you need to

95:33

do that. Those are things are

95:35

technically difficult. It's it's like

95:38

putting somebody at the top of the

95:39

avalanche on a snowboard for the first

95:42

time. Well, there's a certain kind of

95:44

agility as you fall down the mountain

95:47

and break your body into multiple parts,

95:50

but this is not really what we're

95:52

talking about. You need that foundation.

95:55

And there were people who were willing

95:57

to say, "Nah, no, no, don't worry about

96:00

that. This is easy. You can do this.

96:03

Anybody can do this. Twice the work in

96:06

half the time." From my perspective,

96:08

that's just a lie.

96:11

Can you get twice the work done in half

96:13

the time? Yes, absolutely. Is it going

96:16

to be a lot of hard work gaining the

96:19

skills, which aren't taught in computer

96:21

science school, aren't frequently

96:23

modeled in your first employer? You're

96:26

going to have to work hard to gain the

96:28

skills to be able to do twice the work

96:31

in half the time. In the the genie world

96:33

is just playing this out again. Well,

96:35

everybody can be a programmer. Yeah, but

96:36

everybody can't be the same programmer.

96:39

Yeah, seems like there's a pattern where

96:42

when there is a new technology or a new

96:44

methodology in this case, but I guess

96:46

it's interchangeable

96:48

>> technology. Yeah.

96:48

>> Well, it's a technology that a group of

96:52

people, a group of highly trained people

96:54

can get really good results with it and

96:55

then they publish it and they share this

96:58

is working for us. Here's the results.

97:00

There's a bigger industry going around

97:01

that's saying what you just said that

97:04

anyone can get these results and we will

97:05

sell it to you. We'll show it to you.

97:07

And of course, by the time you realize

97:09

that, for example, a company like a

97:12

large bank realizes that it's not really

97:13

working. They're heavily invested and

97:15

maybe they're actually getting some

97:17

minor results, just not the same. And

97:19

then I guess you can argue of like this

97:21

is this is the whole point of snake oil,

97:22

right? Like snake oil, it does something

97:25

just not what it was advertised. Let's

97:27

talk about what happened after 2001. So,

97:31

uh there was a big do bus. Can you take

97:34

us back to what it was like being in the

97:36

middle? So you were in were you in

97:38

Silicon Valley at that point?

97:39

>> 87 to 97 we lived in the Santa Cruz

97:44

Mountains above Silicon Valley. Much of

97:46

that time I commuted to work. Then we

97:49

moved to Switzerland 97 to 99. Then in

97:55

the last part of when we were living in

97:59

uh in Boulder Creek in the Santa Cruz

98:01

Mountains, we had bought acreage near my

98:04

grandmother in southern Oregon. So we

98:07

bought eight hectares of just trees and

98:12

started developing

98:14

power well

98:17

road and so on. Went to Switzerland. Oh,

98:20

we built the office and we had a trailer

98:22

and then we went to Switzerland and we

98:25

came back. So I was living in rural

98:27

southern Oregon at that time

98:30

>> and the industry just went through this

98:32

massive boom which there are

98:35

similarities as as I'm talking with

98:36

people with the current uh boom whenever

98:39

you're working in AI right now and then

98:41

there was a sudden bust that again I

98:43

I've I've learned it from the the his

98:46

history books or like reading back news

98:47

but apparently it was sudden uh it was

98:50

shocking uh how did you see it what what

98:53

happened in the industry But what what

98:56

were your friends working as programmers

98:59

observe or how were they impacted?

99:01

>> It was horrible for me personally. The

99:05

turning point was 9/11. I had

99:09

8 months booked solid

99:12

work at very high rates, higher rates

99:14

than I can charge now, even with

99:17

inflation. And

99:20

the day after 9/11, everyone canled. I

99:24

was also finishing the house that we

99:26

were building. So, we were we were about

99:29

to come up on some big bills to finish

99:31

the house at the same time that all of

99:33

my income disappeared. It's overnight.

99:36

>> Overnight. Wow.

99:38

>> So, things had already been bad. There

99:40

were there were big bankruptcies and the

99:43

the pets.com and the whatever that that

99:47

was already happening. And then 9/11

99:50

just shut down everything. That was a

99:53

big shock for me and I ended up burning

99:56

out um pretty thoroughly. Severe

100:00

depression. I had a really important

100:02

lesson to learn about boundaries. So up

100:06

until that time, remember periodically I

100:09

had people tugging on my shirt and yeah,

100:12

you had three really big part of market

100:14

fits where people were after you.

100:16

>> Patterns even before that was also like

100:19

that.

100:20

>> But you were a star. I was Yeah, I was

100:22

feeling Yeah. And I would get these

100:25

messages. Somebody would say, "Oh, Junit

100:28

saved my life. XP was fantastic and I

100:32

love it and you're a genius and blah

100:34

blah blah." And I'd feel really good

100:36

knowing a message like that. Then I

100:39

started getting messages, uh, XP ruined

100:42

my life. I lost my job. My wife left me.

100:46

I can't see my kids. I'm living on the

100:48

streets. You

100:50

M and then I would feel really bad.

100:55

And the way I think about it now is that

100:59

there's the way people perceive you and

101:02

there's the way you perceive yourself

101:04

and then there's what's really true,

101:06

which is somewhere different than either

101:08

of those. When people are giving you a

101:11

bunch of feedback that you're more

101:14

awesome than you think you are, that

101:17

just stretches your head. So you see

101:19

this in celebrities periodically.

101:22

There'll be somebody super famous and

101:25

then their their head explodes and

101:28

that's that gap between how people see

101:30

you and how you see yourself. And what I

101:34

had to learn was the reason that people

101:38

come to me with those out of proportion

101:42

responses

101:43

is because that's what they need. They

101:46

need a hero or they need a villain.

101:49

and their need for a hero or a villain

101:51

has nothing to do with me. If it wasn't

101:53

me, they'd be contacting you. They'd be

101:56

contacting somebody else. It really

101:59

doesn't have anything to to do about me.

102:02

But but that recalibration where I'm

102:05

like, I'm trying to convince myself that

102:07

I really am this awesome. No, I I get

102:10

feedback that I'm not. That was a a a

102:13

serious reset for me. So, I went through

102:16

a bunch of mental health problems,

102:19

couldn't work, c couldn't uh couldn't

102:23

program at all. I had I started over

102:26

with Sudoku and eventually I could do

102:29

sudokus on easy and then eventually I

102:32

could do them on medium and then I

102:34

started on on uh uh crossword puzzles.

102:38

Wow. And then eventually I got to a

102:42

programming problem. I was doing a bunch

102:44

of stuff with Eclipse when it was new. I

102:48

got to a programming problem and I I

102:50

nailed it and I went, "Oh, this is still

102:53

fun. I can still do this." Uh but yeah,

102:57

the kind of a lost decade from 2002,

103:01

let's say, to to 2011 when I joined

103:05

Facebook. So it you really went from

103:08

being on close to the peak of of of the

103:12

industry or the professional, you know,

103:14

like mountain if if if you will to just

103:16

I guess just finding your way.

103:19

>> Yep. Do you think something similar

103:22

might have happened? Was it not for this

103:25

sudden crash or being a this sudden or

103:27

or was it just the intensity of of of

103:30

everything just being pulled under out

103:32

of under your feet? What do you think it

103:34

was? I think that people are coming to

103:37

me with these expectations that I know I

103:40

can't meet

103:43

that it's going to blow up somehow

103:45

eventually for sure. You can't just live

103:48

the rest of your life like that. Then

103:50

that's what the classic midlife crisis

103:53

is. Is the masks that used to work that

103:57

felt like they used to work. You

103:58

realize, oh, they're not going to work

104:01

going forward. I have to be myself. And

104:05

actually, they've never worked. I was

104:08

just fooling myself that they had

104:09

worked. Yeah, I think that's it's going

104:12

to come.

104:14

It said 35 or 40 or 45 and mine was at

104:17

42. But then you in 2011, you got into

104:23

Facebook. And I'm really intrigued by

104:26

this story because at this time Facebook

104:29

was uh 7 years old which meant that the

104:32

median age was probably like 24 at the

104:35

company and there you are an industry

104:37

legend again. You you've you've had all

104:39

all these contributions TDDXP knowing

104:42

how to build efficient software and

104:44

Facebook is building efficient software

104:46

in a different way and now you're

104:47

showing up when you're you were 50 with

104:49

these people half your age. I assume you

104:51

could have gone back to consulting and

104:53

do what what you've done before.

104:55

>> I was trying to do the same thing. So I

104:58

needed the money for sure trying to do

105:00

the same things as a consultant that I'd

105:03

done before and just there was no zero

105:06

interest out there. I had college to pay

105:11

for.

105:13

Uh I have five kids and uh I knew I was

105:17

going to have two tuitions for four

105:19

years in a row. I needed some stability

105:24

and income. Problem with book book

105:27

publishing doesn't make much money.

105:31

>> Yeah. Except in a rare cases for a guy.

105:35

>> Well, in in in in the rare cases in my

105:37

case where Amazon self-publishing has

105:40

been invented.

105:41

>> Yeah.

105:41

>> And and people buy your books in bulk.

105:44

But outside of that, even for uh Yeah.

105:47

It doesn't.

105:47

>> Yeah. I love teasing you because you're

105:49

so successful. I can I know I know that

105:52

even if you can't take it, you have to

105:53

take it.

105:54

>> I have to take [laughter] it here and

105:56

then here here on this podcast.

105:59

>> So I needed some stability number one,

106:02

but number two, these people were doing

106:06

nothing that was in my books

106:08

and they were running a stable site.

106:14

It's not perfect, but at this crazy

106:16

scale, it was stable and kind of

106:20

unprecedented.

106:21

They were expanding. Users and growth

106:25

was expanding dramatically and they were

106:27

innovating all at the same time. So, how

106:30

in the world are these like this is a

106:33

bumblebee. It can't fly according to my

106:36

theories. I want to find out what's

106:38

going on in there. So at that point I'm

106:41

still very curious about methodology and

106:44

how people get along and software

106:46

development sort of in the societal

106:49

scale but I also needed the money. So I

106:53

joined and I think I was the first or or

106:56

one of the first remote engineers. There

106:58

were about 2,000 employees total,

107:01

700 engineers at that time. And uh I

107:05

just wanted to parse how does it work

107:08

that they have scale, growth, and

107:10

innovation at the same time because I'd

107:12

never seen anybody do all three. You'd

107:15

see people do one of those,

107:18

two was rare, and all three I was

107:21

unprecedented. And apparently they

107:23

weren't too interested in no

107:27

>> in the prior art. Can can you tell that

107:28

story about your TDD class? I think you

107:31

told it like many many years ago

107:32

somewhere else.

107:33

>> Yeah, absolutely. So I get there and I'm

107:36

nervous like, you know, how am I going

107:37

to contribute? I don't want to just, you

107:39

know, be here for a week and then get

107:41

kicked out.

107:43

Uh, so there was going to be a hackathon

107:44

and hackathons often t came with classes

107:48

and so there was a a signup sheet for

107:52

classes and I thought all right I'll

107:54

I'll give a TDD class because after all

107:56

you know

107:56

>> you wrote the book

107:57

>> I wrote the book I invent you know blah

108:00

blah blah blah blah and they clearly

108:01

need it I could see because nobody's

108:04

doing it very few unit tests at that

108:07

time um which just shocked me how can

108:10

this be so I said, "I put on the signup

108:13

sheet TDD class for me from

108:17

the Kentback." Just before my class was

108:20

one on Argentinian tango and just after

108:23

my class was was one on uh advanced

108:26

Excel techniques. When the time came for

108:30

the classes,

108:32

the Argentinian Tango class was full,

108:35

the advanced Excel class was full, and

108:37

no one, not one, not even like a pity

108:41

signup. Zero people had signed up for my

108:43

TDD class. So, these engineers clearly

108:46

felt like they had it already dialed in

108:48

and they didn't need anything from this

108:51

old guy. So, I decided, you know what?

108:54

I'm just going to forget everything that

108:57

I think I know about software

108:59

engineering and I'm gonna try to do

109:02

things. I'm just sort of monkey see

109:04

monkey do. I'm going to copy what I see

109:07

people doing and get feedback and see if

109:10

I can learn to develop in this different

109:12

style as qui quickly enough.

109:17

Can I relearn software engineering fast

109:19

enough not to get fired? And I ended up

109:22

staying there for seven years. And what

109:24

did you learn? What made it work?

109:25

Because again, again, going back there,

109:27

what Facebook did from the outside would

109:29

have made no sense. They didn't have

109:30

tests at the time. They were running

109:32

this massive site somehow keeping it

109:35

working. Oh, and they had uh young

109:37

engineers who didn't have a decade or

109:40

two of experience to know what mistakes

109:41

to avoid.

109:42

>> Mostly young engineers.

109:44

>> Mostly. So, they we had we had some very

109:49

senior people with great leadership

109:51

skills.

109:52

>> Aha.

109:53

uh who could model it. Many layers of

109:56

feedback were built into the system. So

109:59

we had developer machines that ran the

110:02

site. So if you wanted to change the

110:04

color from blue to green, you could do

110:06

it on your developer machine.

110:07

>> You could check out there was a mono

110:09

repoish thing.

110:11

>> Yeah. And so you could just change

110:12

anything and see the because it was PHP,

110:16

you could see the results of that change

110:18

in seconds. So that gave you one level

110:21

of feedback. Then you had code review

110:25

which gave you another level of

110:26

feedback. You could roll out internally

110:30

more frequently. And everybody was using

110:34

Facebook for all kinds of stuff,

110:35

personal and internal business stuff. So

110:40

whatever feature you developed, people

110:42

would start using it immediately. So you

110:44

get another round of feedback. Then we

110:47

had this phased roll out process where

110:50

you'd start rolling your stuff out. If

110:52

there was a problem, the blast radius

110:55

would be limited to a a few million

110:58

people. Not

110:58

>> like automatic roll back based on

111:00

signals.

111:01

>> Yeah. Not the whole [clears throat]

111:02

thing. Chuck Rossy's um deployment team

111:07

also was another level of feedback. You

111:09

had stars. They would secretly give you

111:11

a number of stars and if you were three

111:13

stars, they wouldn't look at your stuff.

111:15

But if you were a one star, you just

111:17

couldn't get your stuff pushed. So that

111:19

was another round of feedback. Then you

111:22

deploy stuff and you'd look at the

111:25

results like the observability early

111:27

observability stuff. So you get more

111:30

feedback about what you're doing. So

111:32

feedback comes in layers like a like a

111:34

filter. And if you get enough different

111:37

layers,

111:38

>> Swiss cheese,

111:39

>> it's the bad stuff sticks and the good

111:42

stuff still goes through. Yeah. So the

111:44

Swiss cheese model even though there's

111:46

holes everywhere

111:47

>> as long as they don't line up for six

111:50

layers of cheese then then you're good

111:53

and unit test would unit test been

111:55

better maybe. I wrote unit test for the

111:58

first feature I rolled out and I still

112:01

caused a site event because there was

112:03

some other coupled code that I didn't

112:05

find meaning an outage.

112:07

>> Yeah. Yeah. not a bad enough one to to

112:10

go through a incident review which is

112:12

another another layer of that where

112:15

every Friday the most senior people

112:17

would get together and anybody who'd

112:20

caused an incident would come in and

112:23

explain here's the timeline of what

112:24

happened here's what we learned here's

112:27

what we need to do to avoid this ever

112:28

happening again and if you went into

112:31

incident review and you explained it

112:32

that way you were fine if you went into

112:35

incident review and said well ops did

112:38

this and somebody else did that and blah

112:40

blah blah blah blah you could literally

112:42

get walked to the door. That was another

112:44

level of feedback that made sure that

112:47

the same mistakes didn't happen again

112:50

and that was taken seriously. What what

112:52

I know and what many people know is well

112:54

Facebook for a long time did they did

112:56

not do unit tests for most things. In

112:58

fact, I think if someone tried to push

113:00

they would often just delete it in code

113:02

review. And you know that sounds bad in

113:04

itself especially at a time this was the

113:06

early 2010s where testing was considered

113:09

really best practice or baseline but I

113:11

think what people missed is all these

113:13

other layers that most places did not

113:15

have. My understanding is that to to

113:17

this date, Facebook the the website and

113:19

mobile apps rollout infrastructure is

113:21

probably the most advanced in the world

113:23

in how it automatically collects signals

113:25

and it does the auto roll out and the

113:27

auto rollbacks which just does not exist

113:29

in 99.9%

113:32

of places because they don't have their

113:35

scale or their opportunities or or even

113:38

their business right because I guess you

113:40

know outages are just it's a bit

113:41

different when a utility company goes

113:43

down versus when Facebook might go down

113:45

the the impact.

113:47

>> Yes. And while I was there, so by the

113:51

time I left 2017, Facebook was a very

113:54

different place than when I joined. Over

113:56

the first couple of years, Facebook

113:58

became much more like a utility. The big

114:01

site events, the big negative incidents,

114:04

we the the the notable ones would get

114:07

names.

114:09

And so there was one called the call of

114:10

cops sev

114:12

and it was the first time that people

114:14

called 911 when Facebook went down.

114:17

>> Wow. It was like oh crap we we need to

114:21

take this even more seriously than we've

114:24

been taking it.

114:25

>> Okay.

114:25

>> Because we're social infrastructure and

114:28

people just expect it to absolutely

114:30

work. And what was it like inside

114:31

Facebook? How the engineering culture uh

114:34

how engineers work compared to the rest

114:36

of the industry? because now you you

114:38

were now in in this bubble which worked

114:39

very differently. There was very little

114:41

planning.

114:43

There were no deadlines as such. Zuck

114:47

would say, "I want to increase the

114:50

the resolution of photos, you know, by a

114:53

factor of four." And the engineers would

114:54

say, "Well, we can't do that because

114:56

blah blah blah." And he'd say, "Yeah, I

114:58

understand. Still want to see the photos

115:00

looking better." And then people would

115:02

go and do it. and it would take as long

115:03

as it would take or you'd work on it for

115:07

a while and if it just couldn't for

115:10

whatever reason then you'd switch to

115:13

something else. Early on I had lunch

115:16

with somebody who'd come from Microsoft

115:19

and said the thing about Facebook is if

115:21

you're at Microsoft and you have a good

115:23

problem to solve, you will defend that

115:26

problem tooth and nail because there

115:28

aren't enough problems to go around. And

115:31

at Facebook, if you're solving a problem

115:33

and somebody else starts solving it, you

115:35

just go on to the next thing because

115:36

there's always some other trash fire

115:39

burning someplace else. And that's

115:42

that's certainly no longer true at

115:44

Facebook. It's opportunity starved. Then

115:48

it was opportunity rich. I I

115:50

accidentally saved $5 million a year

115:53

during my boot camp. No way. I was

115:55

looking that the photos code which at

115:58

that time was a single PHP file that I

116:01

printed it out and taped it all

116:02

together. It was 18 pages the whole that

116:05

was photos and it was the biggest photos

116:08

site in the world at that time. And I

116:10

looked at it I thought man there's just

116:12

there's something wrong here. We were

116:14

very careful to reduce the number of

116:17

round trips between the front-end code

116:19

and the cache or d even worse databases.

116:23

And so I looked at it and I thought

116:25

there's some I realized, oh yeah, they

116:27

this can be made more parallel. So I

116:30

made that switch and a week later the

116:33

photos manager came to me and said, "Oh,

116:35

ops noticed that the demand on the

116:37

photos machines suddenly dropped when we

116:40

rolled your stuff out and they they can

116:43

reccommission

116:44

enough servers to save $5 million a

116:47

year." And I was just farting around,

116:49

you know? So there it was like the the

116:52

gold rush and there's just gold nuggets

116:54

sitting on the ground and you just pick

116:55

them up. That not true today and even by

116:59

the time that I left it was it was no

117:01

longer true in that same kind of sense.

117:03

But you could just be a programmer and

117:05

do programmer stuff and you had enormous

117:07

leverage which was part of the magic of

117:10

it at that time. This is preIPO.

117:14

The middle management, middle uh

117:17

engineering management like first and

117:18

second level of engineering management

117:20

all had generational wealth in vested

117:25

options but had to go public.

117:29

So that tier was very focused on global

117:34

optimization, not local optimization.

117:36

they would give up. You know, you you

117:39

talk to some team and they're like,

117:40

"Well, we could really use you, but I

117:42

think you really should go here cuz

117:44

that's what's going to make my stock

117:46

options go up the most."

117:48

>> Yeah.

117:48

>> Which is crazy behavior once you get

117:51

into this scarcity desert kind of

117:53

mindset. Like nobody's going to act that

117:55

way. But at that point, that was it was

117:57

extremely novel. I collected a whole uh

118:01

series of this. I found this manuscript

118:03

the other day, how Facebook works. There

118:06

were a bunch of policies that I had

118:08

never seen before. One of which was

118:10

50/50 goals. So,

118:13

six-month performance review cycle. At

118:15

the beginning of six months, you'd say,

118:16

"Here, here are the thing. Here are my

118:18

goals." And when you reviewed those with

118:20

your manager, if you had accomplished

118:23

half of the goals, you get A+. If you

118:26

accomplished everything you set out to

118:28

accomplish, people, you know, you're

118:30

sandbagging. you're not trying hard

118:32

enough. You're not risking enough. You

118:34

didn't learn anything over the course of

118:36

the six months. If you accomplished none

118:38

of your goals, you were just out. So

118:42

engineers and engineering managers would

118:44

get fired at a much sooner than I'd ever

118:48

seen anywhere before, which creates

118:51

anxiety, but it also like you knew you

118:57

didn't have to protect yourself from

118:59

slackers.

119:00

because everybody else was under the

119:02

same kind of pressure

119:04

and you were all trying to work make the

119:06

world more open and connected. Now it

119:08

turns out the world can be too open and

119:11

connected but that's a separate set.

119:12

>> Yeah. But it feels like you were there

119:14

during the golden years now. Now now

119:16

it's morale is is terrible with all the

119:19

engineers are being assigned without

119:22

asking them to do data labeling. It's

119:24

all turning into very different uh

119:27

culture. But I guess it just shows that

119:29

places do change. But it seemed that was

119:31

a time where Facebook was growing. The

119:32

mission was very interesting. There were

119:34

as you said more it was opportunity rich

119:37

and you were coaching coaching engineers

119:39

there. What did you learn about folks

119:42

who are already I guess pretty stand out

119:44

if they got into Facebook. How in what

119:47

ways could you help them or did you help

119:48

them? So about a year in I'd been

119:51

working on a C++ project infrastructure

119:54

for the Facebook Messenger product which

119:58

had come out become very successful kind

120:01

of out outgrown its infrastructure

120:05

needed support and I was not a good C++

120:09

programmer and so I was not going to

120:12

stand out there.

120:14

uh I had six months to turn stuff around

120:17

and in that uh the missing years I kept

120:22

body and soul together by doing

120:23

coaching, remote coaching. And so I I

120:27

knew I'd had I don't know hundreds of

120:30

hours, maybe thousands of hours of of

120:32

coaching interaction.

120:35

And uh one of my friends at Facebook, a

120:38

old-timer named Peter Demov said,

120:40

"You've talked about this coaching

120:41

stuff. Why don't you just start doing

120:43

that? And Facebook was very much a

120:47

you're an engineer. You feel like doing

120:49

a thing, you do the thing. If it doesn't

120:51

work out, you take the consequences. If

120:53

it does work out, you get the rewards.

120:56

So, I thought, "All right, I'm I'm a

120:59

coach now." So, I hung out my shingle

121:01

and I found my first three students and

121:03

started with daily one-hour

121:06

conversation, which turns out to be way

121:08

too much for

121:10

3 weeks or four weeks or something.

121:13

And two of the students worked out well

121:16

and one of them got fired. But uh yeah,

121:22

they told other people so people would

121:25

come to me and ask for this coaching

121:27

thing which evolved into a program

121:29

called good to great. And the idea was

121:32

I'll talk with programmers who who are

121:34

good but have kind of stalled. You know

121:37

there's this punctuated equilibrium that

121:40

happens where people get better and then

121:44

they they gather experiences without

121:47

growing much and they need a little kick

121:51

to get them up to the next. And so

121:53

that's the good to great part. And I was

121:57

coaching people one-on-one.

121:59

I'd coach six people at a time, which is

122:02

exhausting, but I was also matching up

122:05

other senior engineers with junior

122:08

engineers for coaching. And then we'd we

122:10

would have the meta conversation of

122:13

coaching the coaches.

122:15

tell me about something that happened

122:17

this week that was a you didn't know how

122:19

to react to or was difficult or we'd all

122:23

talk. I brought in a a storytelling

122:26

consultant

122:28

to to do an offsite. Uh, I hired uh

122:31

Aaron Oorc uh was my administrator cuz

122:35

this is not my strong suit. Kind of

122:38

lining stuff up. And

122:42

she worked with HR to analyze the

122:45

program and discovered that the people

122:48

who'd been my students were twice as

122:50

likely to get promoted in the year

122:52

following coaching than a cohort that

122:56

was the sameish. but didn't get

123:00

coaching. So, it it really worked to to

123:04

accelerate the career progression of the

123:06

people. I didn't handle the politics of

123:08

it very well. So, this was this was

123:11

learning and development outside of the

123:13

learning and development organization

123:15

which and I didn't understand that that

123:18

was going to be an issue. So, by the

123:20

time I left there were big fans of Good

123:24

to Great, but there were also people who

123:26

didn't like the fact that it was around.

123:27

So I ended up coaching probably 200

123:30

people individually. I would write

123:33

classes that I would give and that I'd

123:35

teach other people then to give that

123:38

thousands more of engineers went through

123:40

it. And just before I left, I went to an

123:43

offsite with the top 1% of Facebook

123:47

engineers.

123:48

And out of the 100 plus people, 100ish

123:52

people there, 10 of them were former

123:55

students of mine who had gotten promoted

123:57

to that level. So I felt really good

124:01

about h how that all worked out. That

124:04

was a kind of back to Ward. That was a

124:07

kind of interaction that I was able to

124:09

have with Ward. It wasn't It wasn't It's

124:12

not always pleasant. It's not a pat you

124:15

on the head and you're going to be fine.

124:17

It's a It's a don't like no, you're

124:21

screwing this up. Go try this thing.

124:23

Tell me how that works. Oh, you didn't

124:25

try the thing. Oh, you don't want to

124:26

work on this? Okay, we're done. Quite

124:28

uncompromising.

124:30

uh I say coaches are are there to

124:34

identify and induce productive

124:36

discomfort but the coaching program as a

124:40

whole

124:42

by the time I w I left I had great great

124:45

grand students

124:47

I'd coached people who became coaches

124:48

who coached people who become coaches

124:50

who now were coaching I think there's an

124:54

element to that a way of learning in

124:59

that kind of style that just can't be

125:00

duplicated. So when Daario says we're

125:04

going to eliminate software engineering,

125:06

you don't understand what software

125:07

engineers do. We're going to

125:10

transform some of the activities that go

125:14

into software engineering. Absolutely.

125:17

I'm having a blast. But the uh this idea

125:21

that we're code monkeys

125:25

requirements and jolt col in code out.

125:29

Come on. To be honest, I do sense that

125:32

Daario has a disdain for developers,

125:35

software engineers, should I say. Or

125:37

I've never seen an indication that he

125:39

likes them or that he was one. No, he

125:42

clearly wasn't one. This is fine. You

125:45

can be it's like a physics background or

125:47

something like that. That's fine. And

125:49

you can say I'm going to replace your

125:51

job to me. I don't consider that

125:54

disrespectful. That that's ignorant. By

125:56

the way, can we talk about now you you

125:59

we bring this up every you brought this

126:01

up multiple times in our discussions.

126:03

People awfully want to replace us

126:05

developers and we should probably

126:06

reflect a little bit on that. You've had

126:08

time to reflect why why does this keep

126:10

coming back?

126:11

>> Just we're kind of sometime.

126:14

I mean, that's the that is the long and

126:16

the short of it. My perspective is

126:19

someone on the spectrum who's been an

126:21

engineer for a long time, whose dad was

126:24

an engineer, whose grandfather was a

126:27

geek, you know, in his own in his radio

126:29

kind of way. So, I come by this all

126:31

honestly. We don't necessarily have good

126:34

emotional regulation skills. Don't have

126:37

natural empathy.

126:39

It's why I play poker, by the way, so I

126:41

get feedback when I have don't have good

126:43

empathy. We often times are more direct

126:47

than other people can easily handle.

126:50

>> Yeah. In the in the business setting.

126:52

Yeah.

126:53

>> I'm just telling the truth or I was just

126:55

asking a question. Those are the most

126:57

hideous things that that I say because

127:00

Okay. Yeah. You were just asking a

127:02

question, but you're being an

127:04

asking that question. And you I didn't

127:06

realize it, but I was cuz that's how

127:09

people react.

127:11

So I don't expect anybody to

127:15

cut me any slack. There are people who

127:18

say, "Well, it's up to the rest of the

127:19

world to adapt to the ways that I'm

127:21

weird." It's just not because I mean,

127:24

it's not going to happen. So, learning

127:28

empathy,

127:30

learning how to read body language,

127:32

learning how to read tone of voice, this

127:35

is not natural skills, but they're

127:37

skills. They're learnable. I'll never be

127:39

as good at them as my partner who's

127:43

social genius,

127:45

but I can be not horrible at those kind

127:48

of skills. things like uh belligerance.

127:52

That's a common

127:55

social strategy

127:57

for people like me and has been a social

128:01

strategy of mine. There's some

128:03

disagreement between us and the way I

128:05

resolve it is you know how long is this

128:08

going to take? Four weeks has to be done

128:10

in two weeks.

128:12

>> Yeah, that's an invitation to have a

128:15

conversation. When I say four weeks and

128:17

you say no, it has to be two weeks. I

128:18

don't have to shrink and say, "Okay,

128:20

I'll try and get it done."

128:23

I also don't have to say, "Yeah, go to

128:26

yourself, jackass." That neither of

128:29

those responses help. Say, "All right,

128:31

well, let me let me understand your

128:33

needs." Not an easy task for me, but I

128:36

can I can do it. I have a little

128:38

checklist, you know, the first

128:40

Terminator movie where where he's got

128:42

the little uh pull down menu of

128:44

responses. Yeah, it feels like that

128:46

often times.

128:48

But it's better to have the pull down

128:50

menu of responses than to do something

128:52

that alienates the other person and ends

128:56

the conversation before it's actually

128:58

finished. I think it's those kinds of

129:00

things. It behooves us to learn how to

129:03

communicate in a style that other people

129:05

can actually listen. Which is why I

129:08

bring in analogies from the the finance

129:11

world, from sports, from history, from

129:14

every place I can find in a desperate

129:17

attempt to understand other people and

129:20

help them to understand my perspective

129:22

and what that brings to the situation in

129:25

a way that they can actually comprehend

129:27

it. Jumping to the present times where

129:30

now for a couple of years we we've had

129:33

AI LLMs but now we just call it AI or as

129:36

you call the genie.

129:37

>> Yeah.

129:38

>> And

129:38

>> it grants wishes but it's not actually

129:41

what you want

129:42

>> and it has some interesting

129:43

characteristics.

129:45

I'm wondering how do you think this will

129:48

change individual developers work and

129:52

also teams companies tech companies are

129:56

building software. What are you seeing

129:58

so far? Talked a lot about how what

130:01

software engineering really is. We

130:03

talked about the understanding the

130:04

communication the the learning as you

130:08

are coding and it seems that that is

130:11

definitely shrinking if not being taken

130:13

away. That's a choice. But I'll let you

130:16

finish your question.

130:17

>> Just look looking across the industry.

130:19

>> Yes.

130:19

>> And and it also feels that there's this

130:21

analogy which what you said when uh when

130:23

interfaces were out that people

130:24

overdoing the interfaces and it feels

130:26

it's it's like this. We have these AI

130:28

agents or genies as as we call and

130:31

people are using it everywhere and

130:32

they're going mad and forgetting some of

130:34

the sensible stuff.

130:36

>> Yeah. What an open-ended question. So

130:40

one of the things is that the pace of

130:43

development is definitely accelerated.

130:45

One thing I wonder

130:47

the pace of business hasn't accelerated

130:50

though and that mismatch is going to

130:52

become more and more apparent. So I was

130:56

at a client they were showing they were

131:00

spending $2 million a year on some SAS

131:03

product. somebody vibecoded a

131:05

replacement for it that was better for

131:07

their uses

131:09

and didn't cost $2 million a year. How

131:12

is that vendor going to reply to that?

131:15

Back in the olden times two years ago,

131:18

they'd have years to respond to, "Yeah,

131:22

we have this add-on. It costs $2 million

131:24

a year, but people don't really like it,

131:27

and eventually they're going to find a

131:29

replacement. we have five years to

131:32

respond to that or three years to

131:34

respond to that. Now they've got we have

131:37

this add-on, we've been able to charge

131:40

for it. That's going to go away in a

131:43

month. On their side, they could they

131:45

code up a replacement that was better.

131:47

Yeah, they could code up they they're

131:49

seeing the same kind of acceleration

131:51

everybody else is. But is the need for a

131:55

replacement going to go through their

131:57

customer service to

132:00

marketing to sales to business

132:02

development to the product organization.

132:04

Da da blah blah blah blah blah blah.

132:06

That's that chain is designed to take

132:09

five years and now they have a month

132:13

or they're going to be losing big chunks

132:15

of revenue. This isn't AI's fault. this

132:18

is just an acceleration

132:21

and their business process is just not

132:24

prepared to respond in time. As my my

132:26

personal definition of agile is uh

132:30

responds in time and they're not

132:34

prepared to deal with the new pace. Like

132:37

you you're driving a tractor and all of

132:40

a sudden you're in a race car. still

132:41

wheels, still an engine, but are your

132:46

skills prepared to steer that car?

132:50

Not how fast can it go, but how fast can

132:53

you get from point A to point B on a

132:56

windy mountain road?

132:58

You're used to driving a tractor and now

133:00

you're in a Ferrari. It's not the car's

133:02

fault, but I think that's that's a trend

133:06

that I expect

133:09

to play out that we're going to see

133:12

companies fail because they don't

133:15

respond in time. They've they've been

133:18

fat and happy. Kind of newspapers with

133:21

uh an another analogy, newspapers with

133:23

classified ads.

133:25

classified ads paid for reporters and

133:30

paper print, you know, stuff printed on

133:33

paper and taken around to everybody's

133:35

houses and then classified ads went away

133:38

and journalism had to respond and it's

133:42

responded well in some ways but poorly

133:44

in others and we're less served by local

133:47

journalism than we were before all this

133:50

happened. Okay. So now we have people

133:54

who've been able to rely on switching

133:57

costs to protect their profits and the

134:00

switching costs just drop to zero. Their

134:04

profits are going to drop to zero and

134:06

and some people aren't going to survive

134:08

that change. Some people will the flip

134:11

side.

134:13

So you're paying for some service. You

134:15

think I could vibe code something

134:16

better. And so you do, but you only

134:20

solve this much of the problem. It's the

134:23

>> the the part the iceberg iceberg

134:25

>> you can see that you can vibe code the

134:28

part of the iceberg that you can see.

134:30

>> So uh I'll talk my own book. I was at

134:33

Gusto for three years does small

134:34

business payroll. Somebody said, "Well,

134:37

I just asked Claude, I have this many

134:40

hours at this rate. I'm in this tax

134:43

bracket. What should my paycheck be?"

134:45

And it tells me all the numbers. I don't

134:47

need gusto anymore. And I'm just like,

134:49

oh, you have no idea. Go ahead, run your

134:53

own payroll for a quarter and then

134:56

figure out what all of the reports you

134:59

need to submit to the various tax

135:02

agencies and different states and I live

135:06

in this one, but I work in that one and

135:08

the company's based here and now what

135:10

should the number

135:11

>> like? There's so much that goes on to

135:14

correctly, compliantly

135:17

execute payroll that isn't gross pay,

135:20

net pay. So, we're going to see people

135:23

get into those where they're like,

135:25

"Well, I vibe code the tip of the

135:27

iceberg. I throw away the rest of the

135:30

iceberg and now I'm in trouble because

135:33

now I don't know what to do.

135:35

Now I get to these downstream problems

135:37

that I didn't even know existed." So,

135:39

we're going to see on the on the side of

135:42

the the the vibe coding replacers, we're

135:45

going to see that kind of a naivity play

135:48

out. And what about for software

135:50

engineers? Cuz a lot of the identity for

135:54

engineers was around being able to craft

135:57

code, caring about the craft, being able

136:00

to visualize a lot of these things. And

136:02

these tools are getting really good at

136:04

doing a bunch of that stuff. What advice

136:07

do you give to to these folks on okay

136:10

well there's this new technology change

136:11

if you'd like to stay top of the game

136:14

software engineer what activities can

136:17

you do what

136:19

mentality change should you do so the my

136:22

inspirational motto is nobody knows so

136:26

people come to me they say well how does

136:28

TDD apply in in the augmented coding

136:32

world I said nobody knows it's not just

136:34

that I don't know is nobody knows. The

136:37

big lesson I learned at Facebook was

136:39

about that there are three different

136:42

phase

136:44

states of of product of software

136:47

development. This exploration phase

136:50

where you got to try a bunch of

136:52

different things because you can't

136:53

predict. Then something takes off and

136:56

we've talked about a bunch of those

136:57

examples from my career. And the

136:59

discipline of riding that rocket up once

137:02

it's been lit is very different than the

137:04

discipline and it is a discipline of

137:07

exploring the space. So while you're

137:10

expanding you you you focus very

137:12

intently and it can be and it might even

137:16

be unsustainable but it doesn't last

137:18

very long and then there's another you

137:22

get to extracting value from that to

137:24

feed the next set of explorations. This

137:26

this is 3x,

137:28

>> right? Explore it.

137:29

>> This is yet another model that you came

137:31

up sometime in 2016 17.

137:33

>> Yeah. 15 16 I finally figured out

137:37

figured out. I felt that I understood

137:41

how Facebook had been able to be large,

137:45

growing, and innovative at the same

137:46

time. And it was by treating projects at

137:49

different phases in a completely

137:51

different style. So explore

137:53

>> explore is you you're just looking for

137:56

something and you can't predict. So you

137:58

have to try as many it's a numbers game.

138:01

You try as many uncorrelated experiments

138:05

as you can for the cheapest price. Then

138:08

you expand

138:09

>> and then something takes off and then

138:11

you're in this expansion phase where

138:13

instead of trying a little bit of

138:14

everything, you focus on the one thing

138:16

that's working and you discard

138:18

everything else and you overcome

138:20

obstacle after obstacle after obstacle

138:23

and then you get to a certain size and

138:26

now you can predict growth and you can

138:28

say you can write a if we roll out our

138:32

product in a new country, we've done

138:34

five countries already, here's the

138:36

playlist and you know how to do that.

138:38

That's that extract phase. You've

138:41

reached economies of scale. You can make

138:44

small tweaks and it makes a big

138:46

difference.

138:48

You have a long life span also. So how

138:51

you write code, how you manage projects,

138:54

who you hire, how many people, what the

138:57

org structure is is completely different

138:59

in the three phases. For 20 years, we've

139:02

been up in that extract stand.

139:06

There's been a playbook. It's evolved a

139:08

little bit, but you know, oh, we have

139:11

too many bugs in production. Here's the

139:13

three things you can try. Oh, you know,

139:16

we need to accelerate development.

139:18

Here's the things you can do. Now,

139:19

people sometimes didn't do the things,

139:22

but the playbook existed. And to be a

139:26

senior engineer meant that you knew the

139:28

playbook. And the more you knew the

139:30

playbook, the more effective you could

139:34

be. If you knew, oh well, I also know

139:37

how to scale backends. You know, I know

139:39

about item potency and you know what

139:43

advantages that brings if I implement it

139:46

and so on. Nobody knows now. That

139:48

playbook has been wiped clean and people

139:51

whose identity is I know the playbook

139:55

are now terrified.

139:58

Who who am I? Now, it turns out that

140:02

the skill of writing a playbook is

140:04

completely different than the skill of

140:06

applying a playbook.

140:08

That stuff that we did in the the days

140:10

of objects, that was writing a playbook.

140:13

That was that explore part of the curve.

140:16

It's not that there isn't a way to be

140:19

effective when you don't have a

140:20

playbook. It's just that it's a

140:22

different game. And the people who

140:26

don't feel safe without a playbook need

140:30

to turn their heads around to like,

140:33

well, nobody knows. It's not like

140:35

there's some secret playbook for genie

140:38

based development that, you know, if

140:41

only I paid a million dollars, I could

140:43

have it there. It just doesn't exist.

140:46

When we get glimpses of it, it changes

140:48

next week. like small changes to the

140:51

inputs cause large changes to the

140:53

outputs.

140:54

So we're all back in explorer stand in

140:58

this where we just the more things we

141:02

can try the better. I'll get these

141:05

questions. Oh well I think we should

141:06

blah blah blah blah blah instead of

141:08

writing one test at a time maybe should

141:10

we should write a bunch of tests at a

141:11

time. Do you think that would work?

141:13

Nobody knows. Try it and tell us how it

141:16

goes. If more people are trying more

141:20

things in community and communicating

141:22

like I did this thing here, I added this

141:26

markdown file and it had this effect.

141:29

Somebody else says well I added it and

141:31

made things worse. Okay. Well, what's

141:32

different about your have to have that

141:34

conversation that's what's going to

141:37

result in the playbook. The agile

141:39

manifesto date 2002, right?

141:43

>> 2001. Yeah.

141:44

>> 2001. The first oops LA 1986

141:48

took 15 years to write that manifesto

141:52

which is why when I see manifestos today

141:54

I'm just like too soon. Not a bad idea.

141:58

Would love to have one just too soon. It

142:01

took 15 years for the technical change

142:05

of object-oriented programming to come

142:09

before we could say here are the

142:11

consequences of it. Here's how in a

142:15

simple way we can express how to

142:17

effectively use this technology that

142:19

we've been using day in and day out for

142:21

15 years. The genie comes along. People

142:25

are like, "Well, what's the new

142:26

manifesto? It's just not manifesto time

142:29

yet." As closing, what do you find

142:33

exciting looking ahead with with AI

142:36

agents, with genies, with all this

142:38

change, with this clean state that we're

142:41

in? What what gives you energy?

142:43

>> This is home base for me. The writing of

142:46

the playbook. I I just love that. I'm a

142:50

tree shaker, not the jelly maker. So, I

142:52

love shaking the tree. I love getting

142:54

stuff started. I have a very wide range

142:58

of projects. So, I have a project called

143:02

Arlo, which is a an object-oriented

143:05

database. I have uh several fundamental

143:09

data structures. I wanted to see if I

143:11

could write code that was library

143:14

quality code for a language I didn't

143:16

know. It turns out, yeah, I can. So, I

143:19

built a B+ tree that's faster than

143:22

Rust's B tree for some operations.

143:26

>> Wow.

143:27

>> Wow. Yes. But also,

143:30

I'm not a Rust expert. Like, what could

143:33

a REST expert do with these same tools?

143:36

And and why didn't they write it? I

143:38

don't I don't know. But I'm building

143:40

little bits and pieces of apps for stuff

143:42

that I care about. I use the Genie for

143:47

business planning cuz like you, I have a

143:50

newsletter. Unlike you, my newsletter is

143:52

kind of small, but it's pretty big.

143:55

>> I'm doing okay. Now, how do I turn that

143:57

into a sustainable business? Um,

144:01

also I hired a business partner

144:05

um to help with that. So, I'm doing a

144:07

lot of writing, reflecting on

144:11

my experiences. I'm trying everything.

144:14

If there's a secret sauce to what I'm

144:16

doing, it's uh not being afraid to start

144:18

over. And and your your whole your whole

144:22

career shows this from the very early

144:24

days. TDD XV 3X, Tidy First, Genie.

144:28

>> Yeah. So if you look on my GitHub,

144:31

you'll see project project two project

144:34

three project four new project new

144:37

project two new project three new

144:40

project I I'll take it I'll push it a

144:43

certain amount and then the genie runs

144:46

out of g runs itself out of options it

144:49

can't make further forward progress and

144:51

so I'll wipe it away start over I won't

144:54

try and tweak I'll start over and say

144:57

all right well if I implement things in

145:00

a different order. If I implement with

145:02

this markdown file or if I implement it

145:04

with this commit hook, we collectively

145:07

need to try absolutely everything.

145:10

And some of those ideas are going to be

145:12

sound stupid and are going to work out

145:14

great. Some of the stupid sounding ideas

145:16

are also going to be disastrous. But if

145:18

we're willing to start over, then it

145:21

doesn't matter. We're not really risking

145:23

that much. That creative impulse is

145:27

what's come back to me with the genie.

145:31

This idea that I can go, I wonder what a

145:35

B+ tree looks like in Go. Here's an

145:37

alternative to the B+ tree. This

145:39

adaptive radics tree. What does that

145:41

look like? I can find out. I sit down

145:45

with a genie. I can work it out. And

145:47

then there's this artifact that wasn't

145:50

there before that's there now because of

145:52

my imagination and my work. And I had

145:56

gotten fed up with the stupid minutia of

146:00

programming. Oh, for that you need to

146:03

have the version 7.1 of the upgrade the

146:07

thing which then causes something else

146:08

to break which causes something else to

146:10

break which means that I can't use

146:13

version 7.1. I have to

146:18

I just hated that. getting emotionally

146:20

invested, having an idea, getting

146:22

emotionally invested, getting a ways in

146:23

and realize I can't do this for no good

146:26

reason.

146:27

I hated that. And that that kind of

146:30

blockage just doesn't happen to me now.

146:33

And oh, so it's it this is hog heaven.

146:36

I've got 40 years worth of ideas. This

146:40

would be cool. Uh it's too big. That

146:43

suddenly are back in play. And I'm

146:46

having so much fun making things that

146:49

are real.

146:50

>> I can see it. And you're sharing it as

146:51

well, Kent. This was awesome. Especially

146:54

doing it finally in person.

146:56

>> Yeah, it was great. Great to be able to

146:58

sit down with you in your home country.

147:00

Here we are.

147:01

>> This was a special episode for me.

147:02

Recorded in Budapest, Hungary, right

147:04

before Craft Conference 2026. It was a

147:07

first getting to hear Kent walk through

147:08

his entire career start to present in a

147:10

way he's never done in a podcast before.

147:12

One thing I think back to is how Kent

147:14

said, "We're accumulating code faster

147:16

than we're accumulating trust." Kent is

147:18

[music] so good at summarizing very true

147:19

things like this. When you struggle

147:21

through understanding domain,

147:22

represented in code, and write tests

147:24

that prove that you got it right, you

147:26

end up trusting your program. And when

147:28

you do that work alongside other people,

147:29

you build trust with these people, too.

147:31

Kent's point is that none of this

147:33

happens when you just prompt an AI, or

147:35

as a genie he calls it, and you get back

147:37

the code that works, and the AI says,

147:39

"It's all done." I also loved how

147:41

consistent Kent has been across 50

147:42

years. Whether it's small talk, design

147:45

patterns, TDD, or AI today, his

147:47

instincts are the same. Try the stupid

147:49

idea and don't be afraid to throw it all

147:51

away and start over. As he put it, he's

147:53

a tree shaker, not a jelly maker. And

147:55

Kent's tree shaker impulse is right back

147:57

on his trying stupid things with AI.

148:00

Finally, I appreciate how grounded

148:02

[music] Kent is. People kept asking him

148:04

what the new manifesto for AI

148:06

development is, and his answer is that

148:08

is too soon. The agile manifesto took 15

148:11

years of doing object-oriented

148:12

programming before people like Kent

148:14

could summarize lessons with AI. [music]

148:16

Things are still changing quickly and

148:17

Kent is honest when he says that right

148:19

now nobody knows what is working. Do

148:22

check out the show notes below for how

148:23

Kent and me both thought that McKenzie

148:25

did not know what they're talking about

148:26

when they want to measure software

148:27

engineering productivity. Also check the

148:29

show notes for related the pragmatic

148:31

engineer deep dives on topics like tech,

148:33

software craftsmanship, TDD and others.

148:35

If you've enjoyed this podcast, please

148:36

[music] do subscribe on your favorite

148:37

podcast platform and on YouTube. A

148:39

special thank you if you also leave a

148:41

rating on the show. [music]

Interactive Summary

This episode features a deep, comprehensive conversation with legendary software engineer Kent Beck, exploring his long and influential career. Kent reflects on the origins of TDD, Extreme Programming (XP), and the Agile Manifesto, while emphasizing the human-centric nature of software engineering. The discussion highlights his early fascination with computer hardware, his influential work at Tektronix and Apple, and his perspective on the evolving role of AI (or the 'genie') in development. Kent shares his philosophy on continuous learning, the importance of 'trying stupid ideas,' and why he believes the current industry trend toward rapid automation requires a shift in how engineers think about trust, understanding, and problem-solving.

Suggested questions

4 ready-made prompts