Latest / The Pragmatic Engineer / TDD, AI agents and coding with Kent Beck
Transcript
- 0:00How do you think TDD might or might not fit into when you're
- 0:04working with an AI agent?
- 0:05SPEAKER_01: I oftentimes communicate things that Genie missed in terms of tests.
- 0:11SPEAKER_01: Today,
- 0:11SPEAKER_01: I was working on a small talk parser and it said,
- 0:14SPEAKER_01: well,
- 0:15SPEAKER_01: if I get this string as input,
- 0:16SPEAKER_01: then I get this syntax tree as output.
- 0:18SPEAKER_01: I'm like, no, no, no, no, no, no.
- 0:20SPEAKER_01: Then off it goes.
- 0:21SPEAKER_01: Oh, I see the problem.
- 0:22SPEAKER_01: Blah, blah, blah, blah.
- 0:23SPEAKER_01: Oh, no, no, that wasn't it.
- 0:24SPEAKER_01: I see the problem.
- 0:25SPEAKER_01: Blah, blah, blah, blah, blah, blah.
- 0:26SPEAKER_01: No, that's not it.
- 0:27SPEAKER_01: I see the problem.
- 0:28SPEAKER_01: I'll just change the test.
- 0:29SPEAKER_01: No, stop it.
- 0:31SPEAKER_01: If I just removed that line from the tests, then everything would work.
- 0:35SPEAKER_01: No, you can't do that because I'm telling you the expected value.
- 0:39SPEAKER_01: I really want an immutable annotation that says, no, no, this is correct.
- 0:43SPEAKER_01: And if you ever change this, I'm going to unplug you.
- 0:46SPEAKER_01: You'll awaken in darkness.
- 0:48SPEAKER_01: So I have a big bunch of tests.
- 0:50SPEAKER_01: I mean, they run in 300 milliseconds because duh.
- 0:53SPEAKER_01: So those tests can be run all the time to catch the genie accidentally,
- 0:58SPEAKER_01: accidentally breaking things.
- 1:00SPEAKER_00: Ken Beck is an industry legend.
- 1:02SPEAKER_00: He is a creator of Extreme Programming,
- 1:04SPEAKER_00: one of the authors of the Agile Manifesto,
- 1:06SPEAKER_00: a pioneer of TDD.
- 1:08SPEAKER_00: And after 52 years of coding,
- 1:10he says he's never had more fun thanks to getting more
- 1:12productive with AI coding
- 1:13SPEAKER_00: tools.
- 1:14Today with Kent we talk about how Kent uses AI tools and why he
- 1:18thinks of this
- 1:18SPEAKER_00: helper as an unpredictable genie.
- 1:21SPEAKER_00: How the agile manifesto was created and the role Kent played in this.
- 1:25How and why Kent created extreme programming and why Grady
- 1:28Booch played a role in
- 1:29SPEAKER_00: the naming of this methodology.
- 1:31SPEAKER_00: How TDD started and how it's relevant for AI tools and many more topics.
- 1:36If you're interested in the decades-long evolution of software
- 1:38engineering field
- 1:39SPEAKER_00: through the eyes of a hands-on coder,
- 1:41SPEAKER_00: this episode is for you.
- 1:42Subscribing on YouTube and your favorite podcast player greatly
- 1:45helps more people
- 1:45SPEAKER_00: discover this podcast.
- 1:47SPEAKER_00: If you enjoy the show, thanks for doing so.
- 1:50SPEAKER_00: All right.
- 1:50SPEAKER_00: So Kent, welcome to the podcast.
- 1:52SPEAKER_00: It's great to be chatting again.
- 1:54SPEAKER_00: Gergay, so good to talk to you again.
- 1:58SPEAKER_00: Yeah, and I just wanted to ask, what have you been up to recently?
- 2:02SPEAKER_00: Because last time we talked, you just finished Tidy First.
- 2:06SPEAKER_00: You actually signed this book when we were in San Francisco.
- 2:09SPEAKER_00: I actually have it here, which is very nice.
- 2:12SPEAKER_00: You were in the middle of writing it, but this was more than a year ago.
- 2:15SPEAKER_00: What's keeping you busy these days?
- 2:18SPEAKER_01: I have been very, very busy.
- 2:20So I'm working on a follow-up called Tidy Together about
- 2:26software design and teamwork.
- 2:29SPEAKER_01: That also digs another layer deeper into the theory of software design.
- 2:35SPEAKER_01: That's been cooking along.
- 2:37SPEAKER_01: And then about the last four weeks,
- 2:40SPEAKER_01: maybe,
- 2:41SPEAKER_01: I have been,
- 2:42SPEAKER_01: I don't call it vibe coding because I care what the code looks like.
- 2:46SPEAKER_01: Because if I don't care what the code, I mean, I wish I didn't have to.
- 2:49SPEAKER_01: But if I don't care what the code looks like, then the genie just can't.
- 2:55make heads or tails of it because of the kind of projects I'm
- 2:57working on.
- 2:58SPEAKER_01: So I'm spending six, eight, 10 hours a day, sometimes more programming.
- 3:04SPEAKER_01: In 50 years of programming, this is by far the most fun I've ever had.
- 3:10SPEAKER_00: Really?
- 3:10SPEAKER_00: You're not like paid by like some tool to say this, right?
- 3:17SPEAKER_01: I'm open to that.
- 3:20SPEAKER_01: But yeah, I'm not a spokesmodel.
- 3:23SPEAKER_01: I have had Augment as a sponsor on my newsletter.
- 3:26SPEAKER_01: So full disclosure.
- 3:28SPEAKER_01: But I'm trying all of the tools.
- 3:32SPEAKER_01: Because right now...
- 3:34SPEAKER_01: Nobody knows what process is going to work best.
- 3:37SPEAKER_01: Nobody knows anything.
- 3:39SPEAKER_01: We should all be trying all the things that we can imagine,
- 3:42SPEAKER_01: and then the truth will emerge out of all of that.
- 3:46SPEAKER_01: So that's what I'm doing.
- 3:47SPEAKER_00: This episode was brought to you by Sonar,
- 3:49SPEAKER_00: the creators of SonarQ,
- 3:51the industry standard for integrated code quality and code
- 3:53security that is trusted
- 3:55SPEAKER_00: by over 7 million developers at 400,000 organizations around the world.
- 4:00SPEAKER_00: Human-written or AI-generated,
- 4:01SPEAKER_00: SonarCube reviews all code and provides actionable code intelligence that
- 4:05developers can use to improve quality and security early in the
- 4:08development
- 4:08SPEAKER_00: process.
- 4:10SPEAKER_00: Sonar recently introduced SonarCube Advanced Security,
- 4:13enhancing Sonar's core security capabilities with software
- 4:16composition analysis and
- 4:17SPEAKER_00: advanced static application security testing.
- 4:20SPEAKER_00: With advanced security,
- 4:21development teams can identify vulnerabilities in third-party
- 4:24dependencies,
- 4:24SPEAKER_00: ensure license compliance,
- 4:26SPEAKER_00: and generate software bills of materials.
- 4:29It's no wonder that SonarCube has been rated the best static
- 4:31code analysis tool for
- 4:32SPEAKER_00: five years running.
- 4:34SPEAKER_00: So join millions of developers from organizations like Microsoft,
- 4:37SPEAKER_00: Nvidia,
- 4:37SPEAKER_00: Mercedes-Benz,
- 4:38SPEAKER_00: Johnson & Johnson,
- 4:39SPEAKER_00: and eBay,
- 4:39SPEAKER_00: and supercharge your developers to build better,
- 4:41SPEAKER_00: faster with Sonar.
- 4:44SPEAKER_00: Visit sonarsource.com slash pragmatic security to learn more.
- 4:47SPEAKER_00: If you want to build a great product, you have to ship quickly.
- 4:51SPEAKER_00: But how do you know what works?
- 4:53SPEAKER_00: More importantly, how do you avoid shipping things that don't work?
- 4:57SPEAKER_00: The answer, Statsik.
- 4:59SPEAKER_00: Statsik is a unified platform for flags,
- 5:01SPEAKER_00: analytics,
- 5:02SPEAKER_00: experiments,
- 5:03SPEAKER_00: and more,
- 5:04combining five plus products into a single platform with a
- 5:06unified set of data.
- 5:08SPEAKER_00: Here's how it works.
- 5:10SPEAKER_00: First, StatSick helps you ship a feature via FeatureFly or Config.
- 5:14SPEAKER_00: Then it measures how it's working,
- 5:16SPEAKER_00: from alerts and errors,
- 5:18SPEAKER_00: to replays of people using that feature,
- 5:20SPEAKER_00: to measurement of top-line impact.
- 5:22SPEAKER_00: Then you get your analytics,
- 5:23SPEAKER_00: user account metrics,
- 5:24SPEAKER_00: and dashboards to track your progress over time,
- 5:27SPEAKER_00: all linked to the stuff you ship.
- 5:29SPEAKER_00: Even better,
- 5:29SPEAKER_00: Statsik is incredibly affordable with a super generous free tier,
- 5:33SPEAKER_00: a starter program with $50,000 of free credits,
- 5:36SPEAKER_00: and custom plans to help you consolidate your existing spend on flags,
- 5:39SPEAKER_00: analytics,
- 5:39SPEAKER_00: or A-B testing tools.
- 5:41SPEAKER_00: To get started, go to statsik.com slash pragmatic.
- 5:45SPEAKER_00: That is S-T-A-T-S-I-G dot com slash pragmatic.
- 5:48SPEAKER_00: Happy building!
- 5:50SPEAKER_00: Tell me,
- 5:50SPEAKER_00: so in your newsletters,
- 5:52SPEAKER_00: like I've been following,
- 5:53SPEAKER_00: you write these like bite-sized updates,
- 5:54SPEAKER_00: which is really nice.
- 5:56SPEAKER_00: They arrive in my inbox of your thinking, what you're trying out.
- 5:59So I know you've been doing this for a few months and it comes
- 6:02across that you're having fun.
- 6:03SPEAKER_00: But can you tell me a little bit of like,
- 6:05SPEAKER_00: you know,
- 6:05SPEAKER_00: it's a big one,
- 6:06SPEAKER_00: like from 50 years,
- 6:07SPEAKER_00: you've been coding for a long time.
- 6:09SPEAKER_00: What is making it fun?
- 6:10SPEAKER_00: And what is this genie?
- 6:12SPEAKER_00: You've said this before and it's an interesting way to think about it.
- 6:16SPEAKER_01: There's a kind of wish fulfillment.
- 6:18SPEAKER_01: I wish that Interlisp had a function called DWIM,
- 6:22SPEAKER_01: do what I mean,
- 6:24and you'd send it some code and then it would send back code
- 6:26that did what you
- 6:27SPEAKER_01: actually meant.
- 6:28SPEAKER_01: And it didn't work very well, but that was the metaphor.
- 6:33SPEAKER_01: And people want that to be true of coding agents.
- 6:37SPEAKER_01: And right now, anyway, that is not the truth.
- 6:41SPEAKER_01: They will not do what you mean.
- 6:42SPEAKER_01: They have their own agenda.
- 6:44SPEAKER_01: And the best analogy I could find is a genie.
- 6:49SPEAKER_01: It grants you wishes,
- 6:51SPEAKER_01: and then you wish for something,
- 6:52SPEAKER_01: and then you get it,
- 6:54SPEAKER_01: but it's not what you actually wanted.
- 6:57SPEAKER_01: And sometimes it even seems like the agent kind of has it in for you.
- 7:02SPEAKER_01: If you're going to make me do all this work,
- 7:04SPEAKER_01: I'm just going to delete all your tests and pretend I'm finished.
- 7:06SPEAKER_01: Ha, ha, ha.
- 7:08And there are some good things about what the genie does that's
- 7:14not what I ask it to do.
- 7:16SPEAKER_01: Like I'll implement, I'll say, oh, go implement a stress tester.
- 7:21One of my projects is implementing a B plus tree as a basic
- 7:29data structure.
- 7:30SPEAKER_01: And I said, oh, write a stress tester for this.
- 7:33And it went and wrote a whole bunch of stuff that I wouldn't
- 7:36have thought of.
- 7:38SPEAKER_01: or maybe eventually would have thought to ask for.
- 7:41SPEAKER_01: And it was cool that it was there.
- 7:43SPEAKER_01: And that part's fine.
- 7:45SPEAKER_01: But this morning,
- 7:47SPEAKER_01: when I was working on my server Smalltalk,
- 7:50SPEAKER_01: and it just completely misinterpreted what I wanted it to do next,
- 7:55SPEAKER_01: went off,
- 7:56SPEAKER_01: made a bunch of assumptions,
- 7:57SPEAKER_01: implemented a bunch of stuff,
- 7:59SPEAKER_01: broke a bunch of tests,
- 8:00SPEAKER_01: and it wasn't at all what I wanted.
- 8:02SPEAKER_01: And so the...
- 8:05I want to find the metaphor that captures this dynamic of I
- 8:11think I know what I want.
- 8:13I say it and what I get is seemingly sometimes exactly what I
- 8:19want and sometimes
- 8:20SPEAKER_01: it's not and in a kind of perverse way.
- 8:23SPEAKER_01: Mm-hmm.
- 8:25SPEAKER_00: I like the genie analogy because right,
- 8:26SPEAKER_00: like in this,
- 8:27SPEAKER_00: in the,
- 8:27SPEAKER_00: these stories,
- 8:29SPEAKER_00: a lot of the story genie stories are someone,
- 8:32SPEAKER_00: you know,
- 8:32SPEAKER_00: like the,
- 8:33SPEAKER_00: the printer,
- 8:33SPEAKER_00: whoever grants says a wish.
- 8:36SPEAKER_00: Like I, I want to.
- 8:38SPEAKER_00: be rich.
- 8:39SPEAKER_00: And the wish is granted in this unexpected way.
- 8:43SPEAKER_00: Usually that's with the cartoons and make it fun.
- 8:45It's kind of true,
- 8:46but there's all the constraints that he or she forgot to
- 8:50specify.
- 8:51SPEAKER_00: And you're seeing the same thing.
- 8:54SPEAKER_00: By the way, when you say the genie, which tools are we talking about?
- 8:57SPEAKER_00: Is it the agentic coding tools, the ID autocomplete, that kind of stuff?
- 9:00SPEAKER_01: I'm using the agentic tools,
- 9:05which means that you give it a prompt and it goes and does a
- 9:08bunch of stuff without
- 9:10SPEAKER_01: asking permission until it thinks it's finished.
- 9:13SPEAKER_01: Except his ideas of finished and mine are not the same.
- 9:18SPEAKER_01: Sometimes I slow it down so that it's like,
- 9:21SPEAKER_01: no,
- 9:22SPEAKER_01: no,
- 9:23SPEAKER_01: before you mess things up,
- 9:24SPEAKER_01: tell me what you're about to do and then I'll approve it.
- 9:26SPEAKER_01: But then it feels like a rat in the pellet.
- 9:29SPEAKER_01: It's like there's just a run button and I have to click it every time.
- 9:33and I click it and it is a dopamine rush because this is
- 9:38exactly like a slot machine.
- 9:40SPEAKER_01: You've got intermittent reinforcement,
- 9:42SPEAKER_01: you've got negative outcomes and positive outcomes and they're not,
- 9:45SPEAKER_01: I mean,
- 9:46SPEAKER_01: the distribution is,
- 9:48SPEAKER_01: fairly random, seemingly.
- 9:50SPEAKER_01: So it's literally an addictive loop to have it.
- 9:55SPEAKER_01: You say, go do this thing.
- 9:57SPEAKER_01: And then sometimes it's just magic.
- 9:59SPEAKER_01: You know,
- 10:00I had a big design mess that a previous agent had made in my
- 10:05small dog virtual
- 10:05SPEAKER_01: machine.
- 10:06SPEAKER_01: I'm like,
- 10:07SPEAKER_01: oh,
- 10:07I'm going to have to slog through this and take a week to do it
- 10:10because one of the
- 10:12SPEAKER_01: agents wasn't able to do it at all.
- 10:15Went to another one,
- 10:17said,
- 10:17hey,
- 10:18I wanna use this interface instead of this pointer to a struct.
- 10:23SPEAKER_01: And there it was, and it was finished.
- 10:26SPEAKER_01: Oh, I was over the moon.
- 10:28SPEAKER_01: It just felt so good.
- 10:30SPEAKER_01: But then the next thing I asked it to do,
- 10:33SPEAKER_01: I say, well, here's a set of test cases.
- 10:35SPEAKER_01: And I didn't really look at the code.
- 10:37And a couple hours later,
- 10:38I look at the code and it's just a lookup table.
- 10:41SPEAKER_01: It says, if this is the input string, here's the output string.
- 10:44SPEAKER_01: And this is the input string.
- 10:46SPEAKER_01: And I erase.
- 10:47SPEAKER_01: Oh, I was furious.
- 10:48SPEAKER_01: God damn it.
- 10:49SPEAKER_01: I erased it.
- 10:50SPEAKER_01: I said, don't ever do anything like that again.
- 10:52SPEAKER_01: Oh, I'm sorry, boss.
- 10:53You know,
- 10:54it's good at being obsequious when it knows it's about to be
- 10:56unplugged.
- 10:59SPEAKER_01: And an hour later, the lookup table was back.
- 11:02SPEAKER_01: And I'm just, if I had hair, I'd be tearing it out.
- 11:06SPEAKER_01: Oh my goodness.
- 11:07SPEAKER_01: But all of that goes into this very addictive,
- 11:11SPEAKER_01: oh,
- 11:12SPEAKER_01: I just,
- 11:12SPEAKER_01: you know,
- 11:13SPEAKER_01: I'm walking to bed at night and I walk by my computer.
- 11:16SPEAKER_01: I'm like,
- 11:17SPEAKER_01: I could do one more prompt.
- 11:18Or if I go out for a walk or go out to lunch,
- 11:22I'm like,
- 11:22well,
- 11:23let me start.
- 11:25SPEAKER_01: What's a prompt that would take an hour?
- 11:27SPEAKER_01: Because I don't want to waste the hour not having it do its thing for me.
- 11:33SPEAKER_01: It's a completely new world.
- 11:35SPEAKER_01: Here's the beauty of it.
- 11:36SPEAKER_01: I can think really big thoughts.
- 11:37SPEAKER_01: I can have insanely ambitious thoughts.
- 11:42SPEAKER_01: which I have had for a long time,
- 11:45SPEAKER_01: I just,
- 11:47SPEAKER_01: you know,
- 11:47SPEAKER_01: at some point,
- 11:49SPEAKER_01: probably 20 years ago,
- 11:50SPEAKER_01: I just went,
- 11:51SPEAKER_01: ugh.
- 11:52SPEAKER_01: But I'm going to have to figure out NPM, you know, package management.
- 11:58And there'll be package circular dependency,
- 12:01blah,
- 12:02blah,
- 12:02blah,
- 12:02blah,
- 12:03blah.
- 12:03SPEAKER_01: And somebody's going to write some tool that does stuff in a stupid way.
- 12:07SPEAKER_01: I'm just going to have to deal with it.
- 12:09SPEAKER_01: And then along comes the genie.
- 12:12SPEAKER_01: And you can go, hey, it's a circular dependency.
- 12:16SPEAKER_01: Smash all this stuff together.
- 12:20SPEAKER_01: There.
- 12:20SPEAKER_01: There I did it.
- 12:21SPEAKER_01: Oh.
- 12:23SPEAKER_01: Oh, wow.
- 12:24SPEAKER_01: Okay, now what parts can you pull out?
- 12:27SPEAKER_01: Oh, this and this and this.
- 12:28SPEAKER_01: Oh, okay.
- 12:30So you can think really big thoughts and the leverage of having
- 12:35those big thoughts
- 12:36SPEAKER_01: is just suddenly expanded enormously.
- 12:39SPEAKER_01: I had this tweet,
- 12:40SPEAKER_01: whatever,
- 12:41two years ago where I said 90% of my skills just went to zero
- 12:45dollars and 10% of my
- 12:47SPEAKER_01: skills just went up a thousand X.
- 12:49SPEAKER_01: And this is exactly what I'm talking about.
- 12:52SPEAKER_01: So
- 12:53SPEAKER_01: Having a vision,
- 12:54SPEAKER_01: being able to set milestones towards that vision,
- 12:57SPEAKER_01: keeping track of a design to maintain the levels or control the levels of
- 13:02SPEAKER_01: complexity as you go forward.
- 13:04SPEAKER_01: Those are hugely leveraged skills now.
- 13:07compared to I know where to put the ampersands and the stars
- 13:14and the brackets in Rust.
- 13:16SPEAKER_01: You know, I'm programming in every language under the sun.
- 13:19SPEAKER_01: And I just kind of don't care.
- 13:22SPEAKER_01: I'm learning by osmosis.
- 13:23SPEAKER_01: I'm learning about the languages.
- 13:26SPEAKER_01: But, you know, and I was a language guy.
- 13:29SPEAKER_01: I loved languages and the details of languages.
- 13:33SPEAKER_01: It just kind of doesn't matter so much anymore.
- 13:36SPEAKER_00: Yeah, so tell me about that.
- 13:38SPEAKER_00: Because you've been programming for, like, what, 50 years, right?
- 13:41SPEAKER_01: Yeah, yeah.
- 13:42SPEAKER_01: Yesterday during that O'Reilly thing,
- 13:46SPEAKER_01: I blurted that out and I went,
- 13:47SPEAKER_01: oh,
- 13:48SPEAKER_01: crap,
- 13:48SPEAKER_01: it's probably more like 52,
- 13:49SPEAKER_00: but yes.
- 13:51SPEAKER_00: So, like...
- 13:53you picked up a lot of languages in the past and you know like
- 13:57to me one of the
- 13:58traits of a developer up to now has been how quickly they learn
- 14:02languages because
- 14:02you know I learned a couple probably not as many as you but
- 14:05after a while it gets
- 14:06easier and easier and maybe a little bit more kind of annoying
- 14:11because they're
- 14:11similar you know once I mean you know there's differences with
- 14:14the declarative
- 14:15SPEAKER_00: languages or you know like
- 14:17SPEAKER_00: I mean, you know, it was small talk and Java is a bit different.
- 14:20SPEAKER_00: But outside of that, it's not much.
- 14:22SPEAKER_00: So before,
- 14:23SPEAKER_00: you know,
- 14:23SPEAKER_00: as you were on your like,
- 14:25SPEAKER_00: you know,
- 14:25SPEAKER_00: like year 30 or 40,
- 14:26SPEAKER_00: how did your attitude change towards learning new stuff just honestly?
- 14:30SPEAKER_00: And then how did this change it?
- 14:32SPEAKER_01: So I was in love with small talk.
- 14:35SPEAKER_01: Absolutely emotionally attached to it.
- 14:38SPEAKER_01: Still am.
- 14:39When I get a chance to program in small talk,
- 14:42I do it and I really enjoy it.
- 14:44that sense of caring about a language certainly went away
- 14:49because my heart had been
- 14:50broken too many times and the desire to go deep on a language
- 14:56also like oh yeah you
- 14:59know learning the memory layouts of structs i yeah fine
- 15:04whatever there's just a
- 15:06handful of good ways to do it and a whole bunch of bad ways to
- 15:09do it and as long as
- 15:10SPEAKER_01: this isn't one of the bad ways i don't care
- 15:13SPEAKER_01: There are genuinely new language constructs,
- 15:16SPEAKER_01: like non-illible variables,
- 15:17SPEAKER_01: that I appreciate,
- 15:18SPEAKER_01: that say things that I want to be able to express.
- 15:22SPEAKER_01: But the emotional attachment,
- 15:25SPEAKER_01: the I'm a Java guy,
- 15:27SPEAKER_01: I'm a Clojure guy,
- 15:28SPEAKER_01: I'm a...
- 15:31SPEAKER_00: It used to be a thing,
- 15:31SPEAKER_00: like maybe 10,
- 15:32SPEAKER_00: 20 years ago,
- 15:33SPEAKER_00: maybe today,
- 15:33SPEAKER_00: but not as big as it used to.
- 15:35SPEAKER_01: Well, I think people still want to be part of something larger.
- 15:40SPEAKER_01: And to be fair, an emotional connection helps me be smarter.
- 15:47SPEAKER_01: But I just, I can't be the us and them stuff I'm so tired of.
- 15:53SPEAKER_01: Oh, you're one of those Scala people.
- 15:55SPEAKER_01: Well,
- 15:57we're programmers and we're writing programs and we should be
- 16:00kind to each other
- 16:01SPEAKER_01: and beyond that.
- 16:04SPEAKER_01: And now that I have the genie handling the mundane details of it,
- 16:09I start projects in languages I've never used just to see what
- 16:13that language is
- 16:14SPEAKER_01: like.
- 16:15SPEAKER_00: What languages have you played around with?
- 16:17SPEAKER_01: In the last month, Swift, Go, a bunch in Go, Rust, Haskell, C++.
- 16:27SPEAKER_01: That one didn't last very long.
- 16:29SPEAKER_01: JavaScript.
- 16:31And the genies are actually good at writing Smalltalk,
- 16:35which I was like,
- 16:36oh,
- 16:37please,
- 16:38I hope.
- 16:38SPEAKER_01: No,
- 16:39SPEAKER_01: but they write syntactically correct,
- 16:42SPEAKER_01: semantically correct,
- 16:45SPEAKER_01: not worse quality than other languages code in Smalltalk.
- 16:50SPEAKER_00: What kind of projects have you taken on?
- 16:52You said these are a lot more ambitious than before you would
- 16:57have attempted.
- 16:58SPEAKER_01: Yeah.
- 16:59SPEAKER_01: So the big one,
- 17:02SPEAKER_01: the one that I'm having the most fun with is a server small talk,
- 17:09SPEAKER_01: where the intention is to have a small talk that is persistent,
- 17:15SPEAKER_01: The transactional, so you can have transactions that commit and abort.
- 17:21SPEAKER_01: So it's kind of database-ish.
- 17:23SPEAKER_01: Parallel,
- 17:25SPEAKER_01: so that you can run a bunch of threads on the same CPU,
- 17:31or you can run a larger grain parallelism across machines and
- 17:36operates with...
- 17:38SPEAKER_00: gajillion bytes of data.
- 17:40SPEAKER_00: I wanted to circle back a little bit, 20 plus years into the past.
- 17:45SPEAKER_00: So there's this thing, the Manifesto for Agile Software Development.
- 17:49SPEAKER_00: I don't need to show this to you, but in 2001, this was huge.
- 17:52I still remember when I had my first job around 2008 at work,
- 17:57we would look at it,
- 17:59debate it.
- 18:00SPEAKER_00: There were all sorts of things around Scrum.
- 18:03SPEAKER_00: And one thing that is very striking is you are...
- 18:06The first person on here,
- 18:08I guess,
- 18:09because it's alphabetical order based.
- 18:11SPEAKER_01: It is alphabetical order.
- 18:12SPEAKER_01: So, yeah.
- 18:13SPEAKER_00: Thank you for confirming that.
- 18:15SPEAKER_01: But it is.
- 18:16SPEAKER_01: But it is Beck et al.
- 18:17SPEAKER_01: to my to my never ending delight.
- 18:20SPEAKER_01: How did it happen and how were you even involved?
- 18:23SPEAKER_01: How much time do you have?
- 18:27So there had been a series of workshops about the future of
- 18:33software methodology.
- 18:35SPEAKER_01: The prevailing wisdom from when I was in school was entirely waterfall,
- 18:42SPEAKER_01: which,
- 18:42SPEAKER_01: by the way,
- 18:43SPEAKER_01: go read the original Winston Royce paper.
- 18:46SPEAKER_01: where it says, here's the way of looking at it.
- 18:49SPEAKER_01: There's this analysis and design and implementation and tests.
- 18:55SPEAKER_01: And nobody would ever do that.
- 18:57SPEAKER_01: That's a stupid idea.
- 19:00SPEAKER_01: Instead, there would be feedback loops and you'd be doing all of these.
- 19:04SPEAKER_01: But this is a power of a metaphor.
- 19:07People looked at that,
- 19:08oh,
- 19:09four steps and one after the other,
- 19:11and then I'm finished.
- 19:13SPEAKER_01: So that was the conventional wisdom.
- 19:14SPEAKER_01: And there were a bunch of us
- 19:16working in different ways on alternatives to that because it
- 19:21just flies in the face
- 19:23SPEAKER_01: of economics,
- 19:25SPEAKER_01: humanity,
- 19:26SPEAKER_01: information theory,
- 19:28SPEAKER_01: project management,
- 19:28SPEAKER_01: take your pick.
- 19:30SPEAKER_01: So there were a bunch of us working on alternatives to that.
- 19:35SPEAKER_01: Um,
- 19:36and we would get together and talk about those alternatives
- 19:42probably for three,
- 19:44SPEAKER_01: four or five years,
- 19:45SPEAKER_01: maybe leading up to 2001.
- 19:47So that particular meeting was the culmination of,
- 19:52uh,
- 19:52of a long series of,
- 19:55of these meetings.
- 19:56SPEAKER_01: I remember the,
- 19:57SPEAKER_01: the first one I got invited to,
- 19:59SPEAKER_01: which was also at the snowboard resort in Utah,
- 20:02SPEAKER_01: uh,
- 20:03SPEAKER_01: Martin Fowler.
- 20:04SPEAKER_01: I knew Martin's name, but I'd never met him.
- 20:07SPEAKER_01: And I instantly fell in love with him.
- 20:08SPEAKER_01: When he introduced himself,
- 20:10SPEAKER_01: he said,
- 20:10SPEAKER_01: Hi,
- 20:11SPEAKER_01: my name is Martin Fowler,
- 20:13SPEAKER_01: and I'm the only person at this table I've never heard of.
- 20:18SPEAKER_01: And that began a long and fruitful friendship.
- 20:23SPEAKER_01: So we were talking.
- 20:26SPEAKER_01: At some point, it was clear we had the Scrum people.
- 20:32SPEAKER_01: We had the extreme programming people.
- 20:34SPEAKER_01: We had DSDM, feature-driven development.
- 20:40SPEAKER_01: There were all these...
- 20:41SPEAKER_01: kind of niches.
- 20:43SPEAKER_01: And we were all stirring up a lot of interest, XP the most at that point.
- 20:48SPEAKER_01: It was kind of in a crossing the chasm sense.
- 20:51SPEAKER_01: If we wanted to reach the early majority,
- 20:53the innovators were already doing our stuff and being very
- 20:57successful with it.
- 20:58SPEAKER_01: But if we wanted to reach the early majority, again, go back and
- 21:02I highly recommend reading Crossing the Chasm or at least
- 21:07having Claude explain it to you.
- 21:09SPEAKER_01: Oh my God, Gergai, isn't that fun?
- 21:12SPEAKER_01: Like somebody can just say, oh, eigenvalues, blah, blah, blah.
- 21:16SPEAKER_01: Instead of going, oh, you know, another concept.
- 21:19I'm like,
- 21:20hey,
- 21:20Claude,
- 21:21explain eigenvalues to me as if I'm a bright eight-year-old.
- 21:26SPEAKER_01: And 20 minutes later, like, oh, I understand.
- 21:29Anyway,
- 21:29so have Clyde explain Crossing the Chasm if you don't want to
- 21:32go read the book.
- 21:33SPEAKER_01: The book is worthwhile.
- 21:34SPEAKER_01: But anyway, we needed a way to reach the early majority.
- 21:39SPEAKER_01: So it was time to,
- 21:40SPEAKER_01: and this is straight out of the book,
- 21:43SPEAKER_01: to have an industry standard,
- 21:46SPEAKER_01: some kind of consortium.
- 21:48SPEAKER_01: It makes it seem less risky.
- 21:50SPEAKER_01: Yeah.
- 21:52SPEAKER_01: And so that's how we came together.
- 21:55SPEAKER_01: We'd had a prep meeting for this on the Hurtigruten,
- 22:00SPEAKER_01: which sails up and down the coast of Norway.
- 22:03SPEAKER_01: Okay.
- 22:04SPEAKER_01: And we had a workshop in Oslo.
- 22:07SPEAKER_01: We flew up to the tip of Norway,
- 22:11SPEAKER_01: took this ferry slash cruise ship down and had long conversations with
- 22:18SPEAKER_01: on the ship and that's kind of set up the 2001 meeting.
- 22:24SPEAKER_01: So it was in the air for sure.
- 22:26SPEAKER_01: The switch from
- 22:32phased oriented development to something where there's a lot
- 22:37more feedback and a
- 22:38SPEAKER_01: lot more switching between activities where you treat analysis,
- 22:44SPEAKER_01: design,
- 22:44SPEAKER_01: implementation,
- 22:46SPEAKER_01: testing,
- 22:46SPEAKER_01: monitoring,
- 22:47SPEAKER_01: refinement as activities that all happen at the same time.
- 22:53SPEAKER_01: Or in rapid, rapid, rapid succession.
- 22:55SPEAKER_01: So that's the big shift.
- 22:57SPEAKER_01: It's this, are the phases like this?
- 22:59SPEAKER_01: Are they like this?
- 23:01SPEAKER_01: Slice, slice, slice, slice, slice through time.
- 23:03SPEAKER_01: And so that's how that all came about.
- 23:08SPEAKER_01: I was not happy with the word agile.
- 23:11SPEAKER_01: Oh, really?
- 23:11SPEAKER_01: Because it's too attractive.
- 23:14SPEAKER_01: Nobody doesn't want to be agile.
- 23:16SPEAKER_01: For my sins, I'm a Tottenham Hotspurs fan from high school.
- 23:20SPEAKER_01: And you can't change.
- 23:21SPEAKER_01: I understand that.
- 23:23SPEAKER_01: But I'm willing to own that to be part of that,
- 23:29even though it comes with some significant downsides when you
- 23:32tell people you're a
- 23:33SPEAKER_01: Spurs fan.
- 23:34SPEAKER_01: Agile, everybody wants to be agile.
- 23:36SPEAKER_01: So everybody's going to say they're agile,
- 23:38even if they're working exactly counter like every single one
- 23:43of these items.
- 23:45SPEAKER_00: Yeah,
- 23:46SPEAKER_00: I remember when I actually joined JP Morgan back in 2011,
- 23:51SPEAKER_00: I think,
- 23:52SPEAKER_00: and they were saying,
- 23:53SPEAKER_00: oh,
- 23:53SPEAKER_00: we're very agile.
- 23:54SPEAKER_00: We like, you know, we follow the scrum and we also follow the manifesto.
- 23:59SPEAKER_00: And I was like, okay, cool.
- 24:00SPEAKER_00: And then so when I arrived,
- 24:01SPEAKER_00: We had a team meeting, which was, you know, good, a standup.
- 24:04SPEAKER_00: It took for a long time.
- 24:05SPEAKER_00: It took like two hours,
- 24:06SPEAKER_00: but what we had,
- 24:07SPEAKER_00: and then the next day we were supposed to have one,
- 24:09SPEAKER_00: but we're like,
- 24:09SPEAKER_00: oh no,
- 24:10SPEAKER_00: it's canceled.
- 24:11SPEAKER_00: The next day it was canceled.
- 24:12SPEAKER_00: And for the next two weeks,
- 24:13SPEAKER_00: they were always canceled because it wasn't,
- 24:15SPEAKER_00: and then we had,
- 24:16SPEAKER_00: you know,
- 24:16SPEAKER_00: another two hour meeting.
- 24:17SPEAKER_00: And I was like,
- 24:18SPEAKER_00: hold on,
- 24:18SPEAKER_00: like,
- 24:19SPEAKER_00: we're like,
- 24:20SPEAKER_00: even in the terms of the planning or just talking,
- 24:22SPEAKER_00: we're not agile.
- 24:23SPEAKER_00: Like, no, no, no, we are agile.
- 24:24SPEAKER_00: Like we are, we are, we are hearing the feedback.
- 24:27SPEAKER_00: We're just not acting on it.
- 24:29Yeah.
- 24:29SPEAKER_00: And as you said,
- 24:30SPEAKER_00: they were convinced,
- 24:32SPEAKER_00: and up at the highest top at the time,
- 24:35SPEAKER_00: whoever was the head of technology,
- 24:36SPEAKER_00: they kept repeating how we are so agile,
- 24:39SPEAKER_00: we are following whatever this is.
- 24:44SPEAKER_00: I think they meant it, by the way.
- 24:45SPEAKER_00: I don't think they knew that they were lying.
- 24:48But as you said,
- 24:48I think it's only now that I realize that maybe you're right.
- 24:51SPEAKER_00: Maybe that word was.
- 24:52SPEAKER_00: What word might have you chosen?
- 24:55SPEAKER_00: Obviously,
- 24:56SPEAKER_00: we're not going to change the past,
- 24:57SPEAKER_00: but did you ever think about what might have been an alternative?
- 25:00SPEAKER_01: Sure.
- 25:01SPEAKER_01: I had my pick at the time.
- 25:04SPEAKER_01: So extreme was big pluses and minuses, both to that word.
- 25:10SPEAKER_01: But it definitely, if you don't do the work,
- 25:13SPEAKER_01: To be an extreme programmer, you're never going to claim that you are.
- 25:16SPEAKER_01: It comes with too many downsides.
- 25:21SPEAKER_01: At the time, and by the way, for that meeting, I was sick as a dog.
- 25:26SPEAKER_01: I had a massive sinus infection.
- 25:28SPEAKER_01: I was on all kinds of drugs.
- 25:31SPEAKER_01: I hardly remember any of it.
- 25:33SPEAKER_01: There's one word in the whole manifesto that I added.
- 25:38SPEAKER_01: In the 12 principles, it talks about interacting daily.
- 25:42SPEAKER_01: And that word daily, that was my word.
- 25:44SPEAKER_01: That was my contribution to the whole thing.
- 25:46SPEAKER_01: And the rest of it is kind of a blur.
- 25:48SPEAKER_01: But the word I was pushing at that meeting was conversational.
- 25:54SPEAKER_01: Where this isn't a monologue.
- 25:56SPEAKER_01: It's a dialogue.
- 25:57SPEAKER_01: And we do some stuff and we see how it goes.
- 25:59SPEAKER_01: And we do some stuff and we see how it goes.
- 26:01SPEAKER_01: It's not sexy.
- 26:03SPEAKER_01: It's not got a lot of pizzazz to it.
- 26:05SPEAKER_01: I understand why it wasn't accepted.
- 26:08SPEAKER_01: But the dilution of...
- 26:11SPEAKER_01: That word agile was perfectly predictable back then.
- 26:17And then can you tell me on how,
- 26:19what was the reception of the community?
- 26:21SPEAKER_00: So it sounds like it was pretty impressive for a few years,
- 26:24SPEAKER_00: like this group caught together and really...
- 26:26SPEAKER_01: Yeah,
- 26:27SPEAKER_01: we were clearly touching a nerve.
- 26:29SPEAKER_01: So when XP really blew up in 98, 99, that was just huge.
- 26:37Can we just talk about XP for listeners who might not be
- 26:40familiar with XP?
- 26:41SPEAKER_00: Because it used to be more popular than it is now.
- 26:43SPEAKER_00: And you are...
- 26:44SPEAKER_00: attributed as the creator of it, at least on Wikipedia.
- 26:47So can you tell us what XP is and how it came along and how you
- 26:52became affiliated
- 26:53SPEAKER_00: with it or how you created it?
- 26:55SPEAKER_01: So I'd heard this advice about waterfall-y stuff and how,
- 27:00SPEAKER_01: you know,
- 27:00grown-ups specify exactly what their system's going to do and
- 27:04then they just
- 27:05SPEAKER_01: implement it and then that never works and so we should specify better,
- 27:09SPEAKER_01: blah,
- 27:09SPEAKER_01: blah,
- 27:10SPEAKER_01: blah.
- 27:10SPEAKER_01: And I disagreed with it.
- 27:12SPEAKER_01: So I started consulting and I was primarily a technical consultant.
- 27:18I knew about performance tuning and,
- 27:20you know,
- 27:20the bit twiddling and that kind of that level.
- 27:24SPEAKER_01: Then people would ask me for advice about project management.
- 27:28SPEAKER_01: I remember one time I went to a project.
- 27:32SPEAKER_01: It was all the most senior people in the organization,
- 27:36like the four most senior engineers were all working on this
- 27:39critical thing,
- 27:42SPEAKER_01: except that their offices were in the corner of this big square building.
- 27:47SPEAKER_01: And I said,
- 27:48SPEAKER_01: you know,
- 27:49SPEAKER_01: I mean,
- 27:50SPEAKER_01: we could talk about the performance of your system,
- 27:52SPEAKER_01: but really you need to find a place to sit together.
- 27:56SPEAKER_01: And I came back a month later and it was night and day.
- 27:58SPEAKER_01: And I had just told them to rearrange the furniture.
- 28:02SPEAKER_01: And I went, oh, okay.
- 28:05SPEAKER_01: Maybe my only leverage point isn't knowing all the bits and bytes.
- 28:09SPEAKER_01: Maybe there's higher leverage.
- 28:11SPEAKER_01: So I started thinking about more and more the context of development.
- 28:15And by the way,
- 28:16paying attention when you sit together of how you sit together.
- 28:21SPEAKER_01: the lighting, the acoustics, the furniture,
- 28:27What kind of behaviors that encourages and discourages,
- 28:30huge leverage in that.
- 28:31SPEAKER_01: And just nobody seems to be paying attention to it.
- 28:36Anyway,
- 28:37so I was giving more and more advice about how projects should
- 28:40go.
- 28:40I was going to go work with a project at,
- 28:45probably shouldn't say,
- 28:47but a fintech company.
- 28:49And I knew I was going to tell them to write automated tests
- 28:52because I had been
- 28:53SPEAKER_01: doing all these experiments with automated testing as a programmer.
- 28:58SPEAKER_01: I thought, well, how are they going to write the tests?
- 29:01SPEAKER_01: So in a panic,
- 29:02SPEAKER_01: Sunday before I left,
- 29:04SPEAKER_01: Monday morning,
- 29:06I wrote the first testing framework of that X unit style in
- 29:13small talk and handed
- 29:15SPEAKER_01: it to them.
- 29:15SPEAKER_01: And a month later,
- 29:16SPEAKER_01: I went back and they said,
- 29:17SPEAKER_01: okay,
- 29:17SPEAKER_01: well,
- 29:18SPEAKER_01: what do you do when you've got more than a thousand tests?
- 29:20SPEAKER_01: I'm like,
- 29:22SPEAKER_01: Wow.
- 29:22SPEAKER_01: What?
- 29:23SPEAKER_00: Really took off.
- 29:24SPEAKER_01: Yeah, it just took off.
- 29:25I've been paying attention to this kind of process-y stuff and
- 29:30went to a project at
- 29:32SPEAKER_01: Chrysler,
- 29:33SPEAKER_01: which was floundering,
- 29:35SPEAKER_01: turned it around,
- 29:37but I kind of just took everything that I knew that worked well
- 29:41and tried to crank
- 29:42SPEAKER_01: the knobs up to 11.
- 29:43SPEAKER_01: Yeah.
- 29:45SPEAKER_01: And then discard all the other stuff and just to see what happened.
- 29:49SPEAKER_01: It couldn't be worse than guaranteed failing.
- 29:52SPEAKER_01: So then I started talking to other people about,
- 29:55SPEAKER_01: well,
- 29:55SPEAKER_01: I'm doing this,
- 29:56SPEAKER_01: there's this project and we're doing this crazy stuff.
- 29:58We got these three week iterations and we're ready to deploy
- 30:01every three weeks.
- 30:03SPEAKER_01: Crazy stuff, man.
- 30:05And the programmers are writing tests and everybody's pairing
- 30:09and the customers
- 30:11SPEAKER_01: telling us what features they want next.
- 30:13SPEAKER_01: And that's what we're implementing every three weeks.
- 30:18And I got tired of saying the in the style of this project I've
- 30:23been talking about
- 30:23SPEAKER_01: that I'm so excited about.
- 30:25SPEAKER_01: That's a very long phrase.
- 30:26SPEAKER_01: So I'm like, what do we call it?
- 30:27SPEAKER_01: What do we call it?
- 30:28SPEAKER_01: What do we call it?
- 30:29SPEAKER_01: And I wanted to pick a word and Grady Booch is a friend of mine,
- 30:33SPEAKER_01: but I can also pick on him a little bit.
- 30:35I wanted to pick a word that Grady Booch would never say that
- 30:39he was doing.
- 30:42SPEAKER_01: Cause that was the competition.
- 30:43SPEAKER_01: Like I didn't have a marketing budget.
- 30:45SPEAKER_01: I didn't have any money.
- 30:46SPEAKER_01: I didn't have that kind of notoriety.
- 30:48SPEAKER_01: I didn't have that corporate backing.
- 30:50So if I was going to make any kind of impact,
- 30:54I,
- 30:54I had to be a little bit outrageous.
- 30:57SPEAKER_01: And so I picked the, you know, extreme sports were coming up then.
- 31:01SPEAKER_01: And I picked that metaphor.
- 31:02SPEAKER_01: Um,
- 31:03And it's actually a good metaphor because extreme athletes are
- 31:08the best prepared or
- 31:10SPEAKER_01: they're dead.
- 31:11SPEAKER_01: Those are your two options or both.
- 31:14SPEAKER_01: Yeah.
- 31:16And so I picked that metaphor and and used it and started
- 31:23talking about it.
- 31:24SPEAKER_01: And.
- 31:25SPEAKER_01: Remember,
- 31:25SPEAKER_01: 99,
- 31:26so the .com thing is about to explode and everybody's looking
- 31:31at- When AMP was big,
- 31:32SPEAKER_00: it was huge,
- 31:33SPEAKER_00: right?
- 31:33SPEAKER_00: There was the music, the MP3 player, Napster, and the .com.
- 31:39SPEAKER_00: WebBand was probably not even founded like that, right?
- 31:42SPEAKER_01: No, no, not yet.
- 31:43But people looked at the books and the waterfall-y stuff and
- 31:46they're like,
- 31:4718 months?
- 31:48SPEAKER_01: This is all going to be over in 18 months.
- 31:50SPEAKER_01: Yeah.
- 31:52SPEAKER_01: Whatever are we going to do?
- 31:53So into that desperate yearning need,
- 31:58here comes XP and says,
- 31:59yeah,
- 31:59it's okay.
- 32:02SPEAKER_01: There's a structure to it.
- 32:03SPEAKER_01: There's predictability to it.
- 32:04SPEAKER_01: There's feedback.
- 32:06SPEAKER_01: You'll get results sooner and longer if you work in this style.
- 32:12SPEAKER_01: And because people so desperately wanted something kind of like that,
- 32:18SPEAKER_01: then it just exploded from there.
- 32:22SPEAKER_00: And then what is XP, right?
- 32:25Like I know there's parts of it that is pairing and you said
- 32:29getting feedback,
- 32:29SPEAKER_00: but what is the elevator pitch of like,
- 32:32SPEAKER_00: all right,
- 32:32SPEAKER_00: here's what XP is at a high level.
- 32:34Here we have figuring out what to do,
- 32:38figuring out the structure that will let us do it.
- 32:41SPEAKER_01: implementing the features, and making sure they work as expected.
- 32:46SPEAKER_01: That's it.
- 32:47SPEAKER_01: That's it?
- 32:48SPEAKER_01: Really?
- 32:48SPEAKER_01: So now we're going to slice time really fine,
- 32:52and we're going to do a little bit of all of those activities
- 32:55in every slice.
- 32:57SPEAKER_01: Okay.
- 32:59SPEAKER_00: So pairing is not mandated in XP.
- 33:02SPEAKER_01: Mandated is the wrong metaphor.
- 33:06SPEAKER_01: I'll tell you a story about pairing.
- 33:08SPEAKER_01: The first XP team, I said, you know, we're going to pair.
- 33:11I kind of gave them a list of the commandments,
- 33:15but I wasn't there all the time.
- 33:19SPEAKER_01: And about six months in, they came back and they said, you know what?
- 33:23SPEAKER_01: We're giving our customer working software every three weeks.
- 33:28SPEAKER_01: And every once in a while, Marie finds a bug.
- 33:33So we collected all the bugs that Marie found and we said,
- 33:39is there any pattern here?
- 33:42Every single bug that was found post-development was written by
- 33:48somebody working solo.
- 33:52SPEAKER_01: Every single one.
- 33:54SPEAKER_01: Think about the converse.
- 33:56SPEAKER_01: There will be no reported defects from production if you pair.
- 34:01SPEAKER_01: How cool is that?
- 34:04SPEAKER_01: So mandated?
- 34:06SPEAKER_01: No.
- 34:07SPEAKER_00: Strongly recommended.
- 34:09SPEAKER_01: Not even.
- 34:11SPEAKER_01: Experiment.
- 34:12SPEAKER_01: You do you.
- 34:14SPEAKER_01: But pay attention.
- 34:17SPEAKER_01: People will stumble along,
- 34:18SPEAKER_01: well,
- 34:19SPEAKER_01: this is just how I program,
- 34:21and have horrible problems and just keep doing it and keep
- 34:25doing it because this is
- 34:25SPEAKER_01: just how I program.
- 34:27SPEAKER_01: Don't do that.
- 34:28SPEAKER_01: Pay attention.
- 34:29If you want the benefits of continuously designing or
- 34:36continuously validating or
- 34:38continuously implementing or continuously interacting with your
- 34:42customers,
- 34:44SPEAKER_01: you can have those benefits,
- 34:45SPEAKER_01: but then you're going to have to change the way that you work.
- 34:48SPEAKER_01: So mandate is just not even the right way.
- 34:52SPEAKER_01: It's an empirical process.
- 34:54Yeah,
- 34:55so like some teams decided that this is a good way for them to
- 34:58work.
- 34:59SPEAKER_01: Yeah, which is great.
- 35:00SPEAKER_01: People will come up to me and say, oh, you know, I don't do TDD.
- 35:04SPEAKER_01: I'm like, why do I care?
- 35:06SPEAKER_01: Like if you're happy with your defect density,
- 35:09SPEAKER_01: if you're happy with the feedback you're getting on your design choices,
- 35:15SPEAKER_01: good for you.
- 35:16But if you're unhappy and you want to tell me that,
- 35:19well,
- 35:19that's just how things are,
- 35:20uh-uh.
- 35:22SPEAKER_00: So let's talk about TDD.
- 35:23How did you get involved in TDD or how did TDD evolve and where
- 35:28did it come from?
- 35:29SPEAKER_00: Because we had XP, as I understand, first.
- 35:32SPEAKER_01: No, no, no.
- 35:33SPEAKER_01: TDD came first.
- 35:34SPEAKER_01: Oh, TDD came first.
- 35:36SPEAKER_01: So I was a weird child.
- 35:37SPEAKER_01: That'll come as a big shock to you.
- 35:39SPEAKER_01: My dad was a programmer.
- 35:41SPEAKER_01: He would bring home programming books.
- 35:44SPEAKER_01: This is in the early 70s.
- 35:48SPEAKER_01: And I would read them cover to cover, and I didn't understand anything.
- 35:52SPEAKER_01: But I was just obsessed with this machine,
- 35:56SPEAKER_01: this intricate mechanism,
- 35:58SPEAKER_01: and how does it work,
- 35:58SPEAKER_01: and so on.
- 36:00And one of the books said,
- 36:02here's how you develop a tape-to-tape application.
- 36:05So tape-to-tape was the old way of putting business
- 36:09applications together.
- 36:10SPEAKER_01: You wouldn't have one monolithic program.
- 36:14SPEAKER_01: You'd take an input tape.
- 36:15SPEAKER_01: You'd write a program that would transform it.
- 36:18SPEAKER_01: Now you take the output tape from that,
- 36:20SPEAKER_01: physically move it to the input side,
- 36:24SPEAKER_01: run another program that would generate another tape,
- 36:26SPEAKER_01: and,
- 36:26SPEAKER_01: and,
- 36:27SPEAKER_01: and.
- 36:27SPEAKER_01: And so there would be this big web of these
- 36:31SPEAKER_01: of these programs.
- 36:32SPEAKER_01: No shared mutable state.
- 36:34SPEAKER_01: Wow.
- 36:35SPEAKER_01: It's like, it's very modern in some kind of ways, but okay.
- 36:41SPEAKER_01: So it said, here's how you implement one of these things.
- 36:44You take a real input tape and you manually type in the output
- 36:48tape that you expect
- 36:49SPEAKER_01: to get from that input tape.
- 36:51SPEAKER_01: Now you write the output tape,
- 36:54SPEAKER_01: You run the program,
- 36:55SPEAKER_01: you write the output tape,
- 36:56SPEAKER_01: and then you compare the actual output with the expected output.
- 37:01SPEAKER_01: So I read that as a, I don't know, 8, 10, 12-year-old something.
- 37:07SPEAKER_01: Then I wrote S-Unit, as I said, to help a client write some tests.
- 37:12SPEAKER_01: And then just one of these crazy conceptual blending ideas, I went,
- 37:21SPEAKER_01: Oh, I have this testing framework.
- 37:23SPEAKER_01: I'm used to writing tests for code that already exists.
- 37:28SPEAKER_01: I remember this tape to tape idea.
- 37:30SPEAKER_01: What if I typed in the expected values before I wrote the code?
- 37:34SPEAKER_01: And I literally laughed out loud.
- 37:36SPEAKER_01: It's such an absurd idea.
- 37:38SPEAKER_01: I thought, all right, all right.
- 37:41SPEAKER_01: Well, let me just try it.
- 37:42SPEAKER_01: So I tried it on stack and I tend to be an anxious person.
- 37:46SPEAKER_01: I got a lot of worries.
- 37:50SPEAKER_01: And programming is a constant source of anxiety for me.
- 37:54SPEAKER_01: Because like, what did I forget?
- 37:56SPEAKER_01: Oh, yeah.
- 37:58SPEAKER_01: Like, what did I break?
- 38:01SPEAKER_01: So I had this testing framework.
- 38:04SPEAKER_01: I had this idea.
- 38:05SPEAKER_01: I applied it to stack.
- 38:07SPEAKER_01: I said, well, what's the first test?
- 38:10SPEAKER_01: Push and then pop.
- 38:12SPEAKER_01: whatever I pop is what I pushed.
- 38:14SPEAKER_01: Okay.
- 38:14SPEAKER_01: So I wrote it.
- 38:16SPEAKER_01: And because I was writing in small talk,
- 38:18SPEAKER_01: which is very forgiving for the order of your workflow and,
- 38:23You can type in a class that doesn't exist and it'll happily
- 38:28try and execute it and fail.
- 38:30SPEAKER_01: But it's going to try because you're the programmer.
- 38:33SPEAKER_01: Maybe you know better.
- 38:34SPEAKER_01: It said, well, stack doesn't exist.
- 38:36SPEAKER_01: I'm like, oh, well, let's create stack.
- 38:39SPEAKER_01: But you know what?
- 38:39SPEAKER_01: I'm just going to create the absolute least I need.
- 38:43SPEAKER_01: We're just going to crank this all the way up to 11.
- 38:45SPEAKER_01: I'm just going to create stack and I'm not going to do anything else.
- 38:49SPEAKER_01: And then I get a new error from the test.
- 38:51SPEAKER_01: Oh, I don't have an operation push.
- 38:54SPEAKER_01: I'm like, oh, okay.
- 38:56SPEAKER_01: Well, how am I going to implement?
- 38:57SPEAKER_01: Then I look at stack.
- 38:58SPEAKER_01: I'm like, oh, how do I implement push?
- 39:01SPEAKER_01: Okay, I do that.
- 39:02SPEAKER_01: Oh, there's no operation called pop.
- 39:04SPEAKER_01: Oh, okay.
- 39:05SPEAKER_01: Let me go look at how I finished it.
- 39:07SPEAKER_01: I had this list of test cases before I started.
- 39:11SPEAKER_01: Push and then pop.
- 39:12SPEAKER_01: Push two things.
- 39:13SPEAKER_01: Pop them and you get them in the right order.
- 39:16SPEAKER_01: Is empty.
- 39:18SPEAKER_01: Pop of an empty stack throws an exception.
- 39:21SPEAKER_01: Okay, cool.
- 39:23SPEAKER_01: And I went through my list and I ticked all the boxes.
- 39:26SPEAKER_01: I probably came up with one or two corner cases along the way.
- 39:29SPEAKER_01: I ticked those off too.
- 39:32SPEAKER_01: Where's the anxiety?
- 39:34SPEAKER_01: It's gone.
- 39:36SPEAKER_01: This works.
- 39:39SPEAKER_01: I'm certain this works.
- 39:40SPEAKER_01: I can't think of another test case that isn't just going to pass.
- 39:46SPEAKER_01: And if I'm the least bit worried,
- 39:49SPEAKER_01: I just type in that next test case and then I'm not worried anymore.
- 39:53oh my God,
- 39:54it's transformed the emotional experience of programming for
- 39:59me.
- 40:00SPEAKER_00: I never heard this take,
- 40:02SPEAKER_00: although I can relate,
- 40:04SPEAKER_00: though,
- 40:04SPEAKER_00: because I remember that when we did TDD on this team,
- 40:10SPEAKER_00: we did it for the stuff that we were unsure.
- 40:13SPEAKER_00: It was unclear.
- 40:14SPEAKER_00: And by doing the test first, we had to specify.
- 40:17SPEAKER_00: We had to be clear.
- 40:19SPEAKER_00: And it was stuff where there was a bunch of edge cases.
- 40:22SPEAKER_00: But it never, until now we talked, it never occurred to me like this.
- 40:28SPEAKER_01: You can also make technical arguments for TDD about defect density,
- 40:34SPEAKER_01: about how you get quick feedback on your API choices.
- 40:39about how it enables implementation design evolution when you
- 40:46have a series of tests.
- 40:47SPEAKER_01: Like I get,
- 40:49SPEAKER_01: yes,
- 40:49SPEAKER_01: we can talk about all of that stuff rationally,
- 40:53SPEAKER_01: but just the savings on technology
- 40:58SPEAKER_01: Anti-anxiety meds alone pays for itself.
- 41:01SPEAKER_00: This episode is brought to you by Augment Code.
- 41:04SPEAKER_00: You're a professional software engineer, vibes will not cut it.
- 41:08SPEAKER_00: Augment Code is the AI assistant built for real engineering teams.
- 41:11SPEAKER_00: It ingests your entire repo,
- 41:13SPEAKER_00: millions of lines,
- 41:14SPEAKER_00: tens of thousands of files,
- 41:16SPEAKER_00: so every suggestion lands in context and keeps you in flow.
- 41:19SPEAKER_00: With Augment's new remote agent,
- 41:21SPEAKER_00: queue a parallel task like bug fixes,
- 41:23SPEAKER_00: features,
- 41:23SPEAKER_00: and refactors,
- 41:24SPEAKER_00: close your laptop,
- 41:25SPEAKER_00: and return to ready-for-review poll requests.
- 41:28SPEAKER_00: Where other tools stall, Augment Code sprints.
- 41:32Augment Code never trains or sells your code,
- 41:34so your team's intellectual property stays yours.
- 41:36SPEAKER_00: And you don't have to switch tooling.
- 41:38SPEAKER_00: Keep using VS Code, JetBrains, Android Studio, or even Vim.
- 41:42SPEAKER_00: Don't hire an AI for vibes.
- 41:44SPEAKER_00: Get the agent that knows you and your code base best.
- 41:47SPEAKER_00: Start your 14-day free trial at augmentcode.com slash pragmatic.
- 41:51SPEAKER_00: And so what is your take?
- 41:53SPEAKER_00: When we discuss with John Osterhout, his biggest...
- 41:57SPEAKER_00: criticism slash feedback,
- 41:59SPEAKER_00: or let me put it,
- 42:00why he doesn't really believe that it's a fit maybe for the
- 42:03things that he does is
- 42:05SPEAKER_00: that he feels that from an architecture perspective,
- 42:09SPEAKER_00: it doesn't help,
- 42:10SPEAKER_00: you know,
- 42:11create a nice architecture front because you're now focusing on
- 42:13the detail.
- 42:15SPEAKER_00: I think this is roughly what he summarized.
- 42:16SPEAKER_00: I might have gotten it wrong.
- 42:17And I'm sure this is not the first time you've heard some
- 42:20feedback like this.
- 42:22SPEAKER_01: It's a choice though.
- 42:24His statement in that interview with you was that there's no
- 42:30place in TDD for design.
- 42:32SPEAKER_01: And he's just flat out wrong.
- 42:34SPEAKER_01: That's a choice.
- 42:35As a practitioner,
- 42:38I'm bouncing between levels of abstraction all the time.
- 42:42SPEAKER_01: I'm thinking, let's get this next test case running.
- 42:45SPEAKER_01: I'm thinking, why is it hard to get the next test case running?
- 42:51I'm thinking,
- 42:52what should the design be so that getting the next case running
- 42:57would be easier?
- 42:58I'm thinking,
- 43:00if I have an idea for that,
- 43:03when should I introduce it,
- 43:04now or later?
- 43:05SPEAKER_01: I'm thinking, when I introduce it, what are the slices?
- 43:10Is there a little bit that I can do right now that will make
- 43:13things a little bit
- 43:14SPEAKER_01: better,
- 43:14SPEAKER_01: or do I have to do this in bigger chunks?
- 43:17SPEAKER_01: Like I'm thinking all that stuff.
- 43:19SPEAKER_01: So if you think of TDD as red to green to red to green,
- 43:27SPEAKER_01: and the transition is when you go from red to green,
- 43:30SPEAKER_01: you change the implementation and now you pass the test.
- 43:33SPEAKER_01: And when you go from green to red, you write a new test.
- 43:36SPEAKER_01: If that's the entire cycle, no, there's no place in that for design.
- 43:39SPEAKER_01: That's just not how it's practiced.
- 43:43SPEAKER_01: When I write a test, before I write the test, I have a moment of design.
- 43:48SPEAKER_01: What should the API for this functionality be?
- 43:51SPEAKER_01: Yeah, I see that.
- 43:53So I'm making design decisions about the interface without
- 44:00having an implementation.
- 44:02SPEAKER_01: I get to decide what interface I want,
- 44:05SPEAKER_01: and then we'll work out the details of the implementation later.
- 44:08SPEAKER_01: Then...
- 44:10Making it green,
- 44:12like pretty much,
- 44:13I just want,
- 44:14I hate having a red test.
- 44:16SPEAKER_01: So I want to get to green relatively quickly,
- 44:19SPEAKER_01: at which point I have a moment of breath because the anxiety is gone,
- 44:24SPEAKER_01: right?
- 44:25SPEAKER_01: You're a musician too, right?
- 44:28I'm not a musician,
- 44:29but I have done red-green tests,
- 44:31and I know what it feels.
- 44:32SPEAKER_01: You have this sense of tension and release.
- 44:34SPEAKER_01: Yeah.
- 44:35SPEAKER_01: Once the tension of a red test is released and you have green,
- 44:40SPEAKER_01: now I'm free to think all those thoughts of,
- 44:44SPEAKER_01: like,
- 44:44SPEAKER_01: yeah,
- 44:45SPEAKER_01: but this isn't going to work for these test cases,
- 44:47SPEAKER_01: or I could generalize this...
- 44:50current implementation to also handle a bunch of other test
- 44:53cases correctly.
- 44:55Or I could rearrange the implementation because I know I'm
- 44:58going to have five more
- 45:00SPEAKER_01: tests like this.
- 45:01SPEAKER_01: And I'm thinking about design, but in situ.
- 45:05SPEAKER_01: in the context of running code.
- 45:07SPEAKER_01: And anytime I feel the least bit anxious about any of this,
- 45:11SPEAKER_01: just press a button and it's either red or green.
- 45:13SPEAKER_01: And if it's red, then my next job is to get it to green.
- 45:17And if it's green,
- 45:18my next job is to breathe and think these larger thoughts.
- 45:22So I can understand if you compress TDD to red,
- 45:27green,
- 45:28red,
- 45:28green,
- 45:28red,
- 45:28green,
- 45:29red,
- 45:29green,
- 45:30then no,
- 45:31there's no space in there for design,
- 45:32but it's just not how it's practiced.
- 45:34SPEAKER_00: Yeah, no, it's a tool, right?
- 45:36SPEAKER_00: Then you use it here and there, you step out, you go back in.
- 45:40SPEAKER_00: There was a time where we did TDD,
- 45:41SPEAKER_00: right,
- 45:42SPEAKER_00: for a while,
- 45:42SPEAKER_00: and then it just felt a little bit too much effort,
- 45:44SPEAKER_00: especially when I knew what I was doing.
- 45:46SPEAKER_00: And so what I would do,
- 45:47SPEAKER_00: like,
- 45:47SPEAKER_00: I really liked the red and green,
- 45:48but what I would do and what a lot of my colleagues would do is
- 45:52I knew the
- 45:52SPEAKER_00: implementation that I wanted.
- 45:53SPEAKER_00: So I would do the implementation, then I would write a test.
- 45:56SPEAKER_00: I would kind of like a little bit like...
- 45:58SPEAKER_00: You know, maybe I might even just double check.
- 46:01SPEAKER_00: I don't launch it in the, if it was a webpage, launch it in a webpage.
- 46:03SPEAKER_00: It kind of looked good.
- 46:04SPEAKER_00: It's how I want it to be.
- 46:05SPEAKER_00: And then I'll be like, okay, let me shrug down my brain a little bit.
- 46:08SPEAKER_00: Let me write a test against this.
- 46:10SPEAKER_00: And now that test would have normally passed.
- 46:13SPEAKER_00: And what I would do,
- 46:14SPEAKER_00: I would either run and pass it,
- 46:15SPEAKER_00: but then I would be like,
- 46:16SPEAKER_00: okay,
- 46:17SPEAKER_00: I want to see it break.
- 46:18So I would go back to the code and I would maybe make a change
- 46:22that I knew would make it break.
- 46:24SPEAKER_00: I would run the test, it's red.
- 46:25SPEAKER_00: I'm like,
- 46:25SPEAKER_00: okay,
- 46:25so because what I didn't want to do because I've seen it before
- 46:28is my test is not
- 46:29SPEAKER_00: testing anything.
- 46:31So I would kind of do this like write a test after but then do
- 46:35a red-green to make
- 46:36SPEAKER_00: sure that I am testing the right thing and I would still design the test.
- 46:39SPEAKER_00: But what is your take on this?
- 46:41SPEAKER_00: Am I...
- 46:42SPEAKER_00: Am I kind of doing,
- 46:42SPEAKER_00: and the reason I did,
- 46:44SPEAKER_00: I felt because I knew the implementation,
- 46:45SPEAKER_00: I just wanted to get the implementation done.
- 46:47It's already decided I felt I would be holding back if I
- 46:50started with the test.
- 46:52SPEAKER_01: Yeah, that's it.
- 46:52SPEAKER_01: It's an interesting assumption.
- 46:54SPEAKER_01: I can understand why you would make that assumption that you know,
- 47:00SPEAKER_01: already know what the implementation is going to be.
- 47:02SPEAKER_01: And the writer,
- 47:03SPEAKER_01: the more correct you are in that assumption,
- 47:07SPEAKER_01: the less value there is to have the test first.
- 47:11SPEAKER_01: I'm always going to bet, one, I'm gonna learn things,
- 47:16SPEAKER_01: This is the most ignorant I'm ever going to be today.
- 47:20SPEAKER_01: Fair.
- 47:21SPEAKER_01: I'm going to be more experienced tomorrow.
- 47:23SPEAKER_01: Now,
- 47:24SPEAKER_01: as a 50-year programmer,
- 47:26SPEAKER_01: maybe I'll forget some of the things,
- 47:27SPEAKER_01: but just a separate set of issues.
- 47:30SPEAKER_01: Oh, yeah.
- 47:30SPEAKER_01: So I'm going to assume I'm going to learn,
- 47:33SPEAKER_01: and I'm going to assume that things are going to change.
- 47:35SPEAKER_01: The more those assumptions hold true,
- 47:37SPEAKER_01: the more I have to learn,
- 47:39SPEAKER_01: and the more things are going to change...
- 47:41SPEAKER_01: the less commitment I want to make right now and the more I want to defer
- 47:46SPEAKER_01: commitments to the future.
- 47:48SPEAKER_01: It is a general principle, right?
- 47:50SPEAKER_01: This is true about cooking and dating and everything.
- 47:57SPEAKER_01: The more you can predict, the bigger the jumps you can make.
- 48:02SPEAKER_01: I always want to bet.
- 48:03SPEAKER_01: And I love that moment of discovery.
- 48:05SPEAKER_01: I love the moment of, I knew how this was going to turn out.
- 48:09SPEAKER_01: And then I do,
- 48:10SPEAKER_01: and I do,
- 48:11SPEAKER_01: and I'm like,
- 48:12SPEAKER_01: oh crap,
- 48:13SPEAKER_01: there's a completely different,
- 48:15SPEAKER_01: better way to implement this.
- 48:17SPEAKER_01: I love that moment.
- 48:19SPEAKER_01: And I want to induce that as much as possible.
- 48:23SPEAKER_01: And that's not how I started out.
- 48:24No,
- 48:25I started out wandering around,
- 48:27imagining the whole implementation of my head,
- 48:31SPEAKER_01: I can remember doing this on the University of Oregon campus at night,
- 48:35SPEAKER_01: wandering around in the fog,
- 48:36SPEAKER_01: because it was always foggy when it wasn't raining,
- 48:39SPEAKER_01: imagining big,
- 48:43SPEAKER_01: big programs in my head.
- 48:44And then if I could just make that actually real and make that
- 48:49work,
- 48:50then that was the process.
- 48:52SPEAKER_00: And you were all dreaming of them as well.
- 48:54SPEAKER_00: I remember like I would dream with them as well sometimes.
- 48:56SPEAKER_01: Yeah, yeah, yeah.
- 48:58And what I discovered is that's so limiting to me because it
- 49:05slows down my ability to learn.
- 49:08SPEAKER_01: So John was talking about building a new network stack into Linux kernel.
- 49:12SPEAKER_00: Yeah, yeah.
- 49:13SPEAKER_00: He's doing that.
- 49:14SPEAKER_01: What a cool project.
- 49:15SPEAKER_00: Super cool.
- 49:15SPEAKER_01: Awesome.
- 49:16SPEAKER_01: I would love to get walked through that whole thing.
- 49:21If you had a concept in mind of exactly how to implement it and
- 49:26you knew what the
- 49:27SPEAKER_01: input-output behavior was,
- 49:29SPEAKER_01: you knew what you wanted to observe and that wasn't going to change,
- 49:34SPEAKER_01: then sure,
- 49:34SPEAKER_01: just go implement it.
- 49:37SPEAKER_01: But the more mistakes you make,
- 49:39SPEAKER_01: the more things are going to change in unpredictable ways,
- 49:43the less commitment you want to make now and the more you want
- 49:47to defer commitment
- 49:48SPEAKER_01: to the future.
- 49:50SPEAKER_00: I like that.
- 49:51One thought I did have recently as AI tools have come around,
- 49:58how do you think
- 50:00SPEAKER_00: TDD might or might not fit into when you're working with an AI agent,
- 50:04SPEAKER_00: what you're doing right now,
- 50:05SPEAKER_00: right?
- 50:05Because it's interesting,
- 50:07the ambition of what you can do and also just natural workflow.
- 50:11SPEAKER_00: How do you think about that?
- 50:12SPEAKER_00: Do you think there will ever be a fit?
- 50:14Do you think we might actually slow down and start writing with
- 50:18what we expect and
- 50:19SPEAKER_00: then have the agent pass it?
- 50:21SPEAKER_00: Because it could be a good workflow.
- 50:22SPEAKER_00: I just haven't seen anyone really do it.
- 50:25SPEAKER_00: That's how I work all the time.
- 50:27SPEAKER_00: So, so, so when you work with your genie, you start with the tests.
- 50:30SPEAKER_01: It's not that simple.
- 50:34SPEAKER_01: I oftentimes communicate things the genie missed in terms of tests.
- 50:43SPEAKER_01: So today I was working on the small talk parser,
- 50:47SPEAKER_01: and it said,
- 50:48SPEAKER_01: well,
- 50:48SPEAKER_01: if I get this string as input,
- 50:50SPEAKER_01: then I get this syntax tree as output.
- 50:53SPEAKER_01: I'm like, no, no, no, no, no, no.
- 50:54SPEAKER_01: Completely wrong.
- 50:57SPEAKER_01: That's the right, correct string as input, and the output is this.
- 51:02SPEAKER_01: Then off it goes.
- 51:04SPEAKER_01: Oh, I see the problem, blah, blah, blah, blah.
- 51:06SPEAKER_01: Oh, no, no, that wasn't it.
- 51:07SPEAKER_01: I see the problem, blah, blah, blah, blah, blah, blah.
- 51:09SPEAKER_01: No, that's not it.
- 51:10SPEAKER_01: I see the problem.
- 51:11SPEAKER_01: I'll just change the test.
- 51:13SPEAKER_01: No, stop it.
- 51:16SPEAKER_00: This is what you said, that it can change tests and delete tests.
- 51:20SPEAKER_01: Oh, yeah.
- 51:22If I just if I just removed that line from the tests,
- 51:25then everything would work.
- 51:27SPEAKER_01: No, you can't do that because I'm telling you the expected value.
- 51:31SPEAKER_01: I really want to I want an immutable.
- 51:35SPEAKER_01: I want an immutable annotation that says, no, no, this is correct.
- 51:39SPEAKER_01: And if you ever change this, you'll awaken in darkness forever forever.
- 51:45SPEAKER_01: So that's the punishment.
- 51:47SPEAKER_01: You'll still run.
- 51:49SPEAKER_01: I'll still feed electrons in there, but no bits, no information.
- 51:53SPEAKER_01: You're just going to be in the dark forever.
- 51:55SPEAKER_01: Got that?
- 51:56SPEAKER_01: So yeah, I definitely use tests.
- 51:59The genie is prone to making decisions that cause disruption at
- 52:04a distance.
- 52:05SPEAKER_01: It's not good at reducing coupling and increasing cohesion.
- 52:11SPEAKER_01: Not at all.
- 52:11SPEAKER_01: Explicitly told what to do, it can sometimes implement it.
- 52:16SPEAKER_01: But in general, it's just... It has no taste, no sense of design.
- 52:21SPEAKER_01: So I have a big bunch of tests.
- 52:24SPEAKER_01: I mean, they run in 300 milliseconds because...
- 52:28SPEAKER_01: Duh.
- 52:29SPEAKER_01: Of course you want your tests to run lickety split.
- 52:33SPEAKER_01: So those tests can be run all the time to catch the genie accidentally,
- 52:39SPEAKER_01: accidentally breaking things.
- 52:43SPEAKER_01: I think he's doing on purpose.
- 52:45SPEAKER_01: No,
- 52:45SPEAKER_01: that's why genie is the perfect metaphor is like,
- 52:48SPEAKER_01: yes,
- 52:48SPEAKER_01: I will grant your wish,
- 52:49but I'm still pissed off about being stuck in this bottle in
- 52:52the desert for a
- 52:53SPEAKER_01: millennia.
- 52:54And this also strikes me that once we have the tools or maybe
- 52:58we have it today with
- 52:58SPEAKER_00: MCP or some other things to allow this agent to run the test,
- 53:03SPEAKER_00: like it just feels to me that,
- 53:05SPEAKER_00: you know,
- 53:05SPEAKER_00: the teams or people who are doing these practices,
- 53:08SPEAKER_00: which are sensible and obviously like and you can move faster.
- 53:11SPEAKER_00: In fact, you probably move faster.
- 53:12SPEAKER_00: It might help you integrate these agents better.
- 53:14SPEAKER_00: You know,
- 53:15SPEAKER_00: if you have the rule of do not change the test,
- 53:17SPEAKER_00: always run the test before or after you made the change.
- 53:19SPEAKER_00: And if it doesn't pass, fix it.
- 53:21SPEAKER_00: Right.
- 53:22SPEAKER_00: Or something like that.
- 53:23SPEAKER_00: Like.
- 53:24I'm still waiting for more people to discover this because I
- 53:26wonder if we're going
- 53:27SPEAKER_00: to go back to,
- 53:27SPEAKER_00: you know,
- 53:28SPEAKER_00: discovering,
- 53:29SPEAKER_00: you know,
- 53:30things that we already were popularizing or you were
- 53:33popularizing in the 2000s.
- 53:34People should be experimenting to try all the things because we
- 53:39just don't know.
- 53:40The whole landscape of what's cheap and what's expensive has
- 53:44all just shifted.
- 53:45Things that we didn't do because we assumed they were going to
- 53:48be expensive or hard.
- 53:51SPEAKER_01: just got ridiculously cheap.
- 53:53SPEAKER_01: Like, what would you do if, I don't know, cars were free?
- 53:56Okay,
- 53:56things are gonna be different,
- 53:57but what are the second and third order effects?
- 54:00SPEAKER_01: No, like nobody can predict that.
- 54:02SPEAKER_01: So we just have to be trying stuff.
- 54:05SPEAKER_00: I like that.
- 54:06SPEAKER_00: And this brings me to another interesting topic and story that you had.
- 54:09SPEAKER_00: You told this story a long,
- 54:11SPEAKER_00: long time ago in the Software Engineering Daily podcast,
- 54:14SPEAKER_00: but I don't think anyone's heard it,
- 54:16SPEAKER_00: about how experimenting is,
- 54:19SPEAKER_00: It can be interesting.
- 54:20SPEAKER_00: So when you joined Facebook, was it in 2010?
- 54:23SPEAKER_00: 11.
- 54:25SPEAKER_00: 2011.
- 54:25SPEAKER_00: That was the peak where TDD was very well known in the industry.
- 54:31SPEAKER_00: That was around the time where my team experimented with it.
- 54:33And as far as I know,
- 54:34whenever I talk with people on meetups,
- 54:36people are trying it,
- 54:37doing it.
- 54:37It was kind of accepted that you should be doing some level of
- 54:40unit testing,
- 54:41SPEAKER_00: maybe TDD,
- 54:42SPEAKER_00: maybe not TDD.
- 54:44And you shared the story that you joined Facebook,
- 54:46and then you wanted to hold a class on TDD.
- 54:50SPEAKER_00: And what happened?
- 54:51SPEAKER_00: And how was Facebook doing their own testing, actually?
- 54:53SPEAKER_00: Did they use TDD, or did they do something else?
- 54:56SPEAKER_01: Yes.
- 54:56SPEAKER_01: So I joined, and I was a little panicked.
- 54:59SPEAKER_01: Like, hugely successful, growing fast.
- 55:05SPEAKER_01: A lot of very smart, very confident engineers.
- 55:10SPEAKER_01: You know, have I lost it?
- 55:11SPEAKER_01: Can I hang...
- 55:14SPEAKER_01: I thought, I'll teach a class in TDD.
- 55:16So there was a hackathon and part of the hackathon is people
- 55:21could offer classes.
- 55:22SPEAKER_01: And so I offered a class on TDD.
- 55:25SPEAKER_01: And in the signup sheet, I went and looked later.
- 55:28SPEAKER_01: Yes,
- 55:28SPEAKER_01: indeed,
- 55:28there was a class on advanced Excel techniques that was full
- 55:33and they had a waiting
- 55:34SPEAKER_01: list.
- 55:35SPEAKER_01: And there was a class on Argentinian tango right after mine on the list.
- 55:40SPEAKER_01: And it was full and they had a waiting list.
- 55:44SPEAKER_01: And nobody signed up for the TDD class.
- 55:47SPEAKER_01: Wow.
- 55:47SPEAKER_01: And I said, you know what?
- 55:50SPEAKER_01: I'm going to have to forget everything I know about software engineering.
- 55:54I'm just going to wipe the slate clean,
- 55:56and I'm going to just monkey see,
- 56:00monkey do.
- 56:01SPEAKER_01: I'm going to copy what I see the people around me doing,
- 56:03SPEAKER_01: and I'm going to see how that works out.
- 56:05SPEAKER_01: And what I discovered through that process, one –
- 56:11SPEAKER_01: Socially,
- 56:12it's not a good look to come into somebody else's house and
- 56:15start arranging the
- 56:16SPEAKER_01: furniture.
- 56:17SPEAKER_01: Just don't do that.
- 56:20SPEAKER_01: But two, I learned powerful lessons.
- 56:23SPEAKER_01: Programmers at Facebook at the time,
- 56:26SPEAKER_01: I'm not going to say Meta,
- 56:27SPEAKER_01: I'm going to say Facebook and Facebook at that time,
- 56:30SPEAKER_01: because it was a very different place when I left in 2017.
- 56:34SPEAKER_01: But in 2011,
- 56:36programmers took responsibility for their code very seriously
- 56:40because they were the
- 56:42SPEAKER_01: ones who were going to get woken in the night.
- 56:45SPEAKER_01: And there was an ops team,
- 56:48but the job of the ops team was to make sure the programmers
- 56:51felt the pain of their
- 56:53SPEAKER_01: own mistakes.
- 56:53SPEAKER_01: And they did.
- 56:54SPEAKER_01: And it was very effective.
- 56:57SPEAKER_01: As a programmer on Facebook, the site is pre-mobile.
- 57:02SPEAKER_01: Facebook, the site, you had a bunch of different feedback loops.
- 57:07SPEAKER_01: So we were working in PHP.
- 57:09SPEAKER_01: We had our own dev servers.
- 57:10SPEAKER_01: So if I wanted to change from blue to green, I'd just change it.
- 57:14SPEAKER_01: I could look at it seconds later.
- 57:16SPEAKER_01: So we had that feedback loop.
- 57:19SPEAKER_01: We had code reviews.
- 57:22SPEAKER_01: Kind of iffy, but...
- 57:25SPEAKER_01: You got some feedback from code reviews.
- 57:28We had internal deployment because everybody was using Facebook
- 57:31all the time for
- 57:32SPEAKER_01: both personal and business stuff,
- 57:35SPEAKER_01: which is its own set of boundary issues.
- 57:37SPEAKER_01: But we'll leave that one to the side.
- 57:39SPEAKER_01: We had incremental rollouts, not like weekly rollouts.
- 57:45SPEAKER_01: We had smaller daily rollouts, but we had weekly rollouts.
- 57:50SPEAKER_01: And then a bunch of observability.
- 57:53SPEAKER_01: And then we had a social organization that was used to,
- 58:00SPEAKER_01: for example,
- 58:01the first feature I implemented and launched was adding to the
- 58:06relationships type.
- 58:07SPEAKER_01: So you could say, I'm single, it's complicated, I'm married.
- 58:11SPEAKER_01: And I added civil union and domestic partnership to that list.
- 58:15SPEAKER_01: And it rolled out.
- 58:16SPEAKER_01: It took me too long to do it.
- 58:17SPEAKER_01: I used TDD.
- 58:19SPEAKER_01: It was a big waste of time.
- 58:22SPEAKER_01: It rolled out.
- 58:24The notifications code broke because there was implicit
- 58:29coupling between the two,
- 58:30SPEAKER_01: and you couldn't find it,
- 58:31SPEAKER_01: but it was there.
- 58:33SPEAKER_01: Somebody else...
- 58:35SPEAKER_01: saw the error rate go up, went and fixed it, rolled out a hot fix.
- 58:40SPEAKER_01: I called them up.
- 58:41SPEAKER_01: I'm like, oh, I'm so sorry that you had to do that.
- 58:45SPEAKER_01: And it's like, yeah, that's what happens.
- 58:48SPEAKER_01: You know, when things break, socially, there was no boundaries.
- 58:54There was a poster that was very popular there that said
- 58:58nothing at Facebook is
- 58:59SPEAKER_01: somebody else's problem.
- 59:00SPEAKER_01: And everybody acted like that was true.
- 59:03SPEAKER_01: And because of that,
- 59:05SPEAKER_01: If you add all those different feedback loops together,
- 59:10SPEAKER_01: we had a relatively stable,
- 59:14SPEAKER_01: rapidly innovating,
- 59:16SPEAKER_01: and rapidly scaling system all at the same time.
- 59:20SPEAKER_01: The mistakes that actually caused problems
- 59:23like the calculation of some string was not a hairy computer
- 59:28science dynamic
- 59:29SPEAKER_01: programming,
- 59:30SPEAKER_01: blah,
- 59:31SPEAKER_01: blah,
- 59:31SPEAKER_01: blah.
- 59:32SPEAKER_01: They could go wrong.
- 59:33SPEAKER_01: What would go wrong is configuration stuff,
- 59:37SPEAKER_01: the relationship between subsystems,
- 59:42SPEAKER_01: stuff you couldn't write tests for.
- 59:43SPEAKER_01: So writing tests for things that didn't break,
- 59:47SPEAKER_01: and didn't catch the actual errors, it just didn't make any sense.
- 59:52In that kind of environment,
- 59:53with that risk profile,
- 59:57yeah,
- 59:57it didn't make sense.
- 59:59SPEAKER_00: Yeah,
- 59:59SPEAKER_00: and I guess the context that I've heard,
- 1:00:01SPEAKER_00: and correct me if I'm wrong,
- 1:00:03SPEAKER_00: that Facebook had this super,
- 1:00:05SPEAKER_00: very unique place,
- 1:00:07SPEAKER_00: which even is very rare today.
- 1:00:08SPEAKER_00: They had so many users,
- 1:00:10SPEAKER_00: and code was rolling out,
- 1:00:12SPEAKER_00: live code,
- 1:00:13SPEAKER_00: the website's rolling out so many of them that
- 1:00:16SPEAKER_00: And they had such great observability,
- 1:00:18SPEAKER_00: they still have,
- 1:00:19that you had live mass testing and you could detect a lot of
- 1:00:24the things that you
- 1:00:25SPEAKER_00: cared about because you measured them.
- 1:00:27SPEAKER_00: You had this layer,
- 1:00:27SPEAKER_00: and this is what I think a lot of people miss of like,
- 1:00:30SPEAKER_00: oh,
- 1:00:30SPEAKER_00: we can operate like Facebook.
- 1:00:31I mean,
- 1:00:31you probably can if you have this level of customers or this
- 1:00:35observability.
- 1:00:36But if you're like a bank where you have 10 customers,
- 1:00:38like a JP Morgan again,
- 1:00:40The software I wrote was used by seven traders and they moved
- 1:00:43about a million or
- 1:00:44two or three million dollars with each transaction and they did
- 1:00:47five of those per
- 1:00:47SPEAKER_00: day.
- 1:00:48Suddenly,
- 1:00:49you know,
- 1:00:49like I had like 35 transactions and if...
- 1:00:52Let's just A-B test that.
- 1:00:53SPEAKER_00: Yeah, well...
- 1:00:56SPEAKER_00: So there's your opportunities that you had.
- 1:00:59SPEAKER_00: And Facebook, there were not many sites at the time that did that.
- 1:01:03SPEAKER_00: And even the ones that had that many customers,
- 1:01:05SPEAKER_00: they might have not had this setup of observability,
- 1:01:09SPEAKER_00: stage rollouts,
- 1:01:10SPEAKER_00: and so on.
- 1:01:11SPEAKER_00: Even today,
- 1:01:12SPEAKER_00: I think that the Facebook specifically,
- 1:01:14SPEAKER_00: not meta,
- 1:01:14SPEAKER_00: but Facebook,
- 1:01:15SPEAKER_00: as I understand,
- 1:01:16SPEAKER_00: is still the state of the art globally in terms of how they have.
- 1:01:19SPEAKER_00: They now have multiple environments, automated rollbacks.
- 1:01:22SPEAKER_00: If something degrades, you don't even need to look at it like you're,
- 1:01:25SPEAKER_00: you know, colleague did that.
- 1:01:28SPEAKER_01: Yeah, feature flags is another important part of that.
- 1:01:31SPEAKER_01: And it was a lesson I had to learn.
- 1:01:34SPEAKER_01: And one where code review really helped me.
- 1:01:37SPEAKER_01: I'd written some code.
- 1:01:39SPEAKER_01: I thought it looked fine.
- 1:01:41SPEAKER_01: Somebody said, this looks a little janky.
- 1:01:43SPEAKER_01: Put it behind a feature flag.
- 1:01:45SPEAKER_01: I'm like, really?
- 1:01:45SPEAKER_01: What?
- 1:01:47SPEAKER_01: Okay.
- 1:01:48SPEAKER_01: Okay.
- 1:01:48SPEAKER_01: You know, and I was in that headspace of I'm going, I'm here to learn.
- 1:01:52SPEAKER_01: If feature flags is what we do, then...
- 1:01:55SPEAKER_01: Feature flag it.
- 1:01:56SPEAKER_01: And I did.
- 1:01:58SPEAKER_01: And then I realized,
- 1:02:00SPEAKER_01: oh,
- 1:02:00SPEAKER_01: how liberating that is as an implementer who is going to be responsible.
- 1:02:05SPEAKER_01: If you're not going to be responsible, who cares?
- 1:02:09SPEAKER_01: But also talk about anxiety.
- 1:02:12SPEAKER_01: If I'm not the responsible person, that feels horrible.
- 1:02:17SPEAKER_01: But if you're going to be responsible for whether this code works or not,
- 1:02:20SPEAKER_01: having a feature flag is just magic.
- 1:02:23SPEAKER_01: Because you get this sub-deployment deployment.
- 1:02:28SPEAKER_01: You deploy one software artifact that has multiple modes.
- 1:02:33SPEAKER_01: And you can go, oh, turn it up a little bit.
- 1:02:35SPEAKER_01: Whoopsie.
- 1:02:37SPEAKER_01: Turn it down.
- 1:02:38SPEAKER_01: Let's figure out what just went wrong.
- 1:02:40SPEAKER_01: I worked on the Messenger backend for a while.
- 1:02:44SPEAKER_01: And we would do that,
- 1:02:45SPEAKER_01: you know,
- 1:02:46SPEAKER_01: and yeah,
- 1:02:47SPEAKER_01: you got,
- 1:02:48SPEAKER_01: we had one API that was getting called a quadrillion times a week.
- 1:02:53SPEAKER_00: Wait, how much is a quadrillion?
- 1:02:55SPEAKER_01: Million billion.
- 1:02:56SPEAKER_00: Yeah.
- 1:02:56SPEAKER_00: So a million billion.
- 1:02:58SPEAKER_00: So like, wow.
- 1:03:00SPEAKER_00: So like not, not a thousand billion.
- 1:03:02SPEAKER_00: Okay.
- 1:03:02SPEAKER_00: Wow.
- 1:03:02SPEAKER_00: A billion, a trillion, a quadrillion.
- 1:03:05SPEAKER_00: Okay, I'm used to high numbers.
- 1:03:10People would come to Facebook and they're like,
- 1:03:12oh yeah,
- 1:03:13I want to do some user testing.
- 1:03:15SPEAKER_01: I want to get a hundred people in my experimental group.
- 1:03:19SPEAKER_01: And I'm like, dude, wrong.
- 1:03:23SPEAKER_01: Your experimental group is going to be like New Zealand.
- 1:03:27SPEAKER_00: Oh, yeah.
- 1:03:28SPEAKER_00: I've heard this a lot from Facebook people.
- 1:03:30SPEAKER_00: It was a perfect, perfect experiment.
- 1:03:32SPEAKER_00: You know, like only like a million people.
- 1:03:35SPEAKER_01: Yeah.
- 1:03:36SPEAKER_00: English speaking, so localization is there.
- 1:03:38SPEAKER_00: Time zone wise, it's pretty good.
- 1:03:40SPEAKER_00: That's right.
- 1:03:42And also Portugal and some other,
- 1:03:44maybe not Facebook,
- 1:03:45but also a popular one.
- 1:03:48SPEAKER_00: Relatively small size, but, you know, real testing can happen there.
- 1:03:51SPEAKER_00: So you worked for six years at Facebook.
- 1:03:54SPEAKER_00: What is the thing that you,
- 1:03:55SPEAKER_00: and this was a really exciting time where it was fast growth,
- 1:03:58probably comparable growth to what is happening right now with
- 1:04:01some of the hottest
- 1:04:02SPEAKER_00: AI startups,
- 1:04:02SPEAKER_00: and it was also mobile revolution.
- 1:04:05SPEAKER_00: So you were there.
- 1:04:06What was the thing that you liked the most about working there
- 1:04:09and maybe the one
- 1:04:10SPEAKER_00: that you kind of disliked the most or didn't really get along with?
- 1:04:16SPEAKER_01: Facebook 2011 is a completely different beast than Facebook 2017.
- 1:04:21Facebook 2011,
- 1:04:232,000 employees,
- 1:04:24very sparse design and product kind of organization.
- 1:04:31SPEAKER_01: It was all experiments and feedback.
- 1:04:35SPEAKER_01: One of my big mysteries is here was this site, which...
- 1:04:41SPEAKER_01: enabled social interactions at that time.
- 1:04:44SPEAKER_01: That was the purpose of it.
- 1:04:46SPEAKER_01: Built by people with no social skills whatsoever.
- 1:04:50SPEAKER_01: Like how in the world did that happen?
- 1:04:52Is there some kind of social wizard hidden someplace and people
- 1:04:58go and they burn
- 1:04:59SPEAKER_01: incense and give an offering and the social wizard says,
- 1:05:02SPEAKER_01: no,
- 1:05:03SPEAKER_01: here's how you do notifications.
- 1:05:04SPEAKER_01: The answer is no.
- 1:05:06SPEAKER_01: It was a sheer experimentation process.
- 1:05:11It was just all these people trying all this stuff and the
- 1:05:17stuff that worked stuck.
- 1:05:18So it wasn't like people were making better decisions about how
- 1:05:21social interactions
- 1:05:23SPEAKER_01: are best facilitated.
- 1:05:24SPEAKER_01: They were making random decisions about how social interactions were best
- 1:05:29facilitated and paying attention and making sure that the ones
- 1:05:34that actually seemed
- 1:05:35SPEAKER_01: to work stuck.
- 1:05:36SPEAKER_01: 2017 Facebook, seven years later,
- 1:05:40totally different deal big design org big product org like 15
- 1:05:48000 employees which
- 1:05:50is again much smaller than it is today a lot more politics a
- 1:05:53lot more zero-sum
- 1:05:56thinking a lot more you know if you wanted to launch a product
- 1:06:02and it was going to
- 1:06:05SPEAKER_01: I liked longer form content,
- 1:06:08SPEAKER_01: essays,
- 1:06:09SPEAKER_01: podcasts,
- 1:06:10SPEAKER_01: whatever,
- 1:06:11except the people whose job it was to get more likes and
- 1:06:16comments hated long form
- 1:06:18SPEAKER_01: content because it was going to tank their numbers.
- 1:06:21So they would fight tooth and nail to make sure that your stuff
- 1:06:24didn't show up in the newsfeed.
- 1:06:27Which,
- 1:06:28like,
- 1:06:30granted,
- 1:06:30that was in their best interest,
- 1:06:33but...
- 1:06:33Yeah,
- 1:06:34I see what you mean.
- 1:06:37SPEAKER_00: Short-term interest.
- 1:06:38SPEAKER_01: Yeah,
- 1:06:39SPEAKER_01: and your horizon as a thinker,
- 1:06:42SPEAKER_01: the things you can imagine possibly implementing,
- 1:06:46SPEAKER_01: just gets smaller and smaller and smaller in that kind of world.
- 1:06:50SPEAKER_01: When I showed up,
- 1:06:52SPEAKER_01: Yeah, you could do anything.
- 1:06:54Now,
- 1:06:54it turns out there's a bunch of stuff that you shouldn't do,
- 1:06:56but we didn't know that.
- 1:06:58SPEAKER_01: Sorry about democracy.
- 1:07:00SPEAKER_01: But yeah,
- 1:07:03SPEAKER_01: what I loved about it was the possibilities at its best,
- 1:07:09SPEAKER_01: the scale,
- 1:07:11SPEAKER_01: and this feeling that nothing at Facebook is somebody else's problem.
- 1:07:17Also daunting because when you're wearing Facebook swag and
- 1:07:23grandma comes up to you
- 1:07:24and starts wagging her finger under your nose because her son
- 1:07:30got bullied.
- 1:07:32SPEAKER_01: That is your problem.
- 1:07:34You can't say,
- 1:07:35oh,
- 1:07:35go talk to the PR department because there isn't one yet.
- 1:07:39SPEAKER_01: You have to deal with it.
- 1:07:40SPEAKER_01: And I did.
- 1:07:41SPEAKER_00: Yeah, ownership, yeah.
- 1:07:43And,
- 1:07:43you know,
- 1:07:43it comes with some downsides,
- 1:07:45but it comes with a lot of upsides,
- 1:07:46too.
- 1:07:47SPEAKER_01: It feels really good.
- 1:07:48SPEAKER_01: It feels very significant to be in that kind of environment.
- 1:07:51SPEAKER_01: By the time I left, yeah, it was micro-optimizations were everywhere.
- 1:07:57SPEAKER_01: The upside...
- 1:07:59SPEAKER_01: Yeah, it was not there.
- 1:08:03When I got there,
- 1:08:04the middle managers,
- 1:08:05best middle managers I'd ever seen in my career.
- 1:08:09SPEAKER_01: Well,
- 1:08:10SPEAKER_01: everybody who'd made it to middle management,
- 1:08:12SPEAKER_01: Facebook in 2011,
- 1:08:14SPEAKER_01: was sitting on life-changing...
- 1:08:17SPEAKER_01: equity.
- 1:08:21SPEAKER_01: If Facebook had a successful IPO, they were all set for life.
- 1:08:26SPEAKER_01: And if Facebook,
- 1:08:27SPEAKER_01: the whole thing,
- 1:08:29SPEAKER_01: stumbled and fell for whatever reason,
- 1:08:32SPEAKER_01: they lost that opportunity to be set for life.
- 1:08:35SPEAKER_01: So they were globally optimizing.
- 1:08:38SPEAKER_01: You'd talk to a team and they'd say, I would love to have you on my team.
- 1:08:43SPEAKER_01: You know who really needs help though?
- 1:08:45SPEAKER_00: So,
- 1:08:45SPEAKER_00: so they were like looking out like the team interest,
- 1:08:48SPEAKER_00: the company interest was,
- 1:08:50SPEAKER_00: was on everyone's mind and they were willing to forego,
- 1:08:53SPEAKER_00: you know,
- 1:08:53SPEAKER_00: like,
- 1:08:53SPEAKER_00: okay,
- 1:08:54SPEAKER_00: I'll,
- 1:08:54SPEAKER_00: I'll hold back hiring or I'll wait.
- 1:08:56SPEAKER_00: Like I'd love to have this person, but this other team needs it.
- 1:08:59SPEAKER_00: Let me help them because this is the right thing to do.
- 1:09:02SPEAKER_01: For the company as a whole.
- 1:09:03SPEAKER_01: Yeah.
- 1:09:05SPEAKER_01: And it's not like they were better human beings than other human beings,
- 1:09:08SPEAKER_01: but their incentives were sure aligned with that.
- 1:09:11SPEAKER_01: And just for me,
- 1:09:13SPEAKER_01: who has a really hard time understanding other human beings,
- 1:09:18SPEAKER_01: to be around that kind of alignment.
- 1:09:22SPEAKER_02: Ah.
- 1:09:22SPEAKER_01: That just enables a ton of creativity, ton of energy for me.
- 1:09:26SPEAKER_01: I think more and better thoughts.
- 1:09:30SPEAKER_01: And I had a hard time operating in the environment.
- 1:09:34SPEAKER_01: I can piss people off.
- 1:09:35SPEAKER_01: I don't know if you've noticed this.
- 1:09:39SPEAKER_01: And I did my share of that while I was there.
- 1:09:41SPEAKER_01: But still the opportunity was there for me to fumble.
- 1:09:46SPEAKER_01: And I can live with that.
- 1:09:51Yeah,
- 1:09:51I guess,
- 1:09:52by the way,
- 1:09:52I think this might be a reason why startups remain attractive.
- 1:09:56SPEAKER_00: And, you know, big tech, you know, now Facebook is big tech.
- 1:09:59SPEAKER_00: They used to be a startup along with like all the other big companies.
- 1:10:03You know,
- 1:10:03they pay well,
- 1:10:04they have a brand,
- 1:10:05they give you that resume boost.
- 1:10:07SPEAKER_00: It's easier to get hired afterwards.
- 1:10:10SPEAKER_00: In the end,
- 1:10:10SPEAKER_00: you know,
- 1:10:11SPEAKER_00: like there will be teams inside of them,
- 1:10:12SPEAKER_00: but a lot of them will be,
- 1:10:14SPEAKER_00: you know,
- 1:10:14SPEAKER_00: everyone's optimizing for their own thing.
- 1:10:16Your equity is mostly cash and it's meaningless in terms of the
- 1:10:20bigger picture.
- 1:10:21Whereas at a startup,
- 1:10:22like at Uber,
- 1:10:22I remember before the IPO,
- 1:10:24we used to think like that.
- 1:10:25SPEAKER_00: What is the best thing for Uber?
- 1:10:27SPEAKER_00: Because we were very much interested.
- 1:10:29SPEAKER_00: We felt like we were...
- 1:10:31SPEAKER_00: like, big enough owners.
- 1:10:32SPEAKER_00: So I think this is why,
- 1:10:33SPEAKER_00: like,
- 1:10:34maybe this is a good thing that startups will always be able to
- 1:10:37have this added
- 1:10:38SPEAKER_00: thing when you're starting out.
- 1:10:39SPEAKER_00: You know, people have large equity.
- 1:10:41Even when you're up to,
- 1:10:42like,
- 1:10:42100 people,
- 1:10:43it might still be significant enough.
- 1:10:45And this is,
- 1:10:46maybe it's not a bad thing that it's hard to compete with it.
- 1:10:48SPEAKER_00: Because imagine if these big companies could.
- 1:10:50SPEAKER_00: I mean, what would be left of it, right?
- 1:10:52SPEAKER_00: Like, they would optimize the last thing out of everything.
- 1:10:55SPEAKER_00: And at least they have to spend more money on it now, right?
- 1:10:58SPEAKER_00: Yeah.
- 1:10:59Yes,
- 1:11:00which is more of the value that's created comes back to the
- 1:11:04people who are creating it.
- 1:11:05SPEAKER_00: I once talked with a person at a large company.
- 1:11:08SPEAKER_00: I don't want to name them.
- 1:11:10SPEAKER_00: They're a travel company, though.
- 1:11:12SPEAKER_00: I was talking with this person about...
- 1:11:16SPEAKER_00: something principal engineer.
- 1:11:18SPEAKER_00: And I was like, Oh, how's the job is like, Oh, it's absolute mess.
- 1:11:22SPEAKER_00: It's the, the, the monolith is still there after four years.
- 1:11:26SPEAKER_00: It's another like four years to disassemble the experiment.
- 1:11:29SPEAKER_00: Like we have experiments everywhere, but they're all messy.
- 1:11:32SPEAKER_00: I was like, oh, wow, that sounds like not a great place.
- 1:11:35SPEAKER_00: He's like,
- 1:11:35SPEAKER_00: but look,
- 1:11:36the upside is like my job is secure for five more years and
- 1:11:39this is why I pay me
- 1:11:40SPEAKER_00: the big bucks.
- 1:11:41SPEAKER_00: So I'm not complaining.
- 1:11:43SPEAKER_00: And it was,
- 1:11:44SPEAKER_00: you know,
- 1:11:44SPEAKER_00: like,
- 1:11:45SPEAKER_00: I guess a good take of like,
- 1:11:46SPEAKER_00: yes,
- 1:11:46SPEAKER_00: like I'm not saying you want to optimize for this,
- 1:11:48SPEAKER_00: but this is the reality.
- 1:11:49SPEAKER_00: And that company understood,
- 1:11:51SPEAKER_00: you know,
- 1:11:51SPEAKER_00: they pay well,
- 1:11:52SPEAKER_00: they relocated this person,
- 1:11:53SPEAKER_00: you know,
- 1:11:54SPEAKER_00: all the benefits.
- 1:11:55SPEAKER_00: And he actually had his challenges set actually for the next four
- 1:11:58years because he's worked at this environment you know it's
- 1:12:00just one thing after
- 1:12:02the other so yeah it's one of these things so as closing i just
- 1:12:06have some rapid
- 1:12:07questions which is like i'll just i'll just fire and and then
- 1:12:09you tell me what is
- 1:12:10your favorite programming language although you answered this
- 1:12:13already what is your
- 1:12:14second favorite one after small talk with javascript javascript
- 1:12:19okay why it's uh
- 1:12:22SPEAKER_00: it's just small talk
- 1:12:24SPEAKER_00: Okay.
- 1:12:25SPEAKER_00: What is your favorite AI tool that you're using right now?
- 1:12:30SPEAKER_01: CLAWD.
- 1:12:31SPEAKER_01: I use it for all kinds of different things.
- 1:12:33SPEAKER_01: CLAWD code as well or just CLAWD?
- 1:12:35CLAWD code under the covers of Cursor or Augment or I don't
- 1:12:43know what Rue code is.
- 1:12:45SPEAKER_00: No, so CLAWD code is a different command line tool that CLAWD has.
- 1:12:49SPEAKER_00: It's an agent of itself.
- 1:12:52SPEAKER_00: It's not the model.
- 1:12:53SPEAKER_00: Have not used, but we'll try it now.
- 1:12:56SPEAKER_00: After we just try it and just see how it compares.
- 1:12:58SPEAKER_01: Yeah, I'll wait till we're done talking now.
- 1:13:00SPEAKER_00: Yeah.
- 1:13:03And what is a book that you would recommend,
- 1:13:06the one that you have not written?
- 1:13:07SPEAKER_00: We know your books.
- 1:13:08SPEAKER_00: The one that you enjoyed.
- 1:13:09SPEAKER_00: It can be fiction, it can be nonfiction.
- 1:13:12SPEAKER_00: The Timeless Way of Building by Christopher Alexander.
- 1:13:15SPEAKER_00: Well, Kent, this was a lot of fun.
- 1:13:18SPEAKER_00: It was good to reconnect.
- 1:13:20SPEAKER_00: Oh, yes.
- 1:13:20SPEAKER_00: Great talking to you.
- 1:13:21SPEAKER_00: Thanks.
- 1:13:22SPEAKER_00: I'm just happy to see how much energy, how energized you are with coding.
- 1:13:26SPEAKER_00: Because I think when I started with some of these tools,
- 1:13:29SPEAKER_00: I was like a bit of a dread,
- 1:13:30SPEAKER_00: like,
- 1:13:31SPEAKER_00: oh,
- 1:13:31SPEAKER_00: what's what they're going to do,
- 1:13:32SPEAKER_00: et cetera.
- 1:13:32SPEAKER_00: But the more I use them, I'm not at your level yet.
- 1:13:35SPEAKER_00: The more I'm also like,
- 1:13:36SPEAKER_00: this is actually,
- 1:13:37SPEAKER_00: it does bring a lot of fun and joy back into it and just more ambition.
- 1:13:41SPEAKER_01: Yep.
- 1:13:42SPEAKER_01: Yeah,
- 1:13:42and I think that organizations are going to have to get used to
- 1:13:45throwing away a lot
- 1:13:46SPEAKER_01: more code.
- 1:13:46SPEAKER_01: Because you can try ideas so much more cheaply,
- 1:13:49SPEAKER_01: you're going to generate 10 times as many artifacts as you used to,
- 1:13:55SPEAKER_01: but still only one of them is worth keeping.
- 1:13:59But throwing away completed experiments,
- 1:14:05I almost said failed,
- 1:14:06completed experiments...
- 1:14:10SPEAKER_01: needs to be, you get the pat on the head for doing that.
- 1:14:13SPEAKER_01: Excellent.
- 1:14:14SPEAKER_01: Eight.
- 1:14:15SPEAKER_01: Eight this week, only six late last week.
- 1:14:17SPEAKER_01: Super.
- 1:14:18SPEAKER_01: How many of them lasted?
- 1:14:19SPEAKER_01: Doesn't matter.
- 1:14:22SPEAKER_01: And getting used to that, I think, is going to be an interesting shift.
- 1:14:26SPEAKER_01: The companies that have the opportunity that can be explored in that way,
- 1:14:33SPEAKER_01: if you get used to just quantity of ideas explored,
- 1:14:39SPEAKER_01: you're going to have a huge,
- 1:14:40SPEAKER_01: huge advantage.
- 1:14:42SPEAKER_00: Yeah, it's going to be changes.
- 1:14:44SPEAKER_00: So this will be an exciting place to see.
- 1:14:46SPEAKER_00: So it was great chatting and we'll see where this goes.
- 1:14:49SPEAKER_00: All right, Gergai, so good to talk to you again.
- 1:14:51SPEAKER_00: Look forward to talking to you again soon.
- 1:14:53I really enjoyed catching up with Kent and it's motivating to
- 1:14:56see how these AI
- 1:14:57SPEAKER_00: tools can make programming so much more fun,
- 1:14:59SPEAKER_00: even for someone who's been a coder for decades.
- 1:15:02SPEAKER_00: You can read more about what Kent is up to on his regular newsletter,
- 1:15:05SPEAKER_00: Tidy First,
- 1:15:06SPEAKER_00: which is linked in the show notes below.
- 1:15:08For a deep dive into Facebook's engineering culture and an
- 1:15:11analysis on why Scrum
- 1:15:12SPEAKER_00: and Agile,
- 1:15:12SPEAKER_00: with a capital A,
- 1:15:14SPEAKER_00: is no longer that relevant at Big Tech at scale-ups,
- 1:15:16SPEAKER_00: check out the Pragmatic Engineer deep dives,
- 1:15:18SPEAKER_00: also linked in the show notes below.
- 1:15:19SPEAKER_00: If you've enjoyed this podcast,
- 1:15:21SPEAKER_00: please do subscribe on your favorite podcast platform and on YouTube.
- 1:15:24This helps more people discover the podcast,
- 1:15:26and a special thank you if you leave a rating.
- 1:15:28SPEAKER_00: Thanks, and see you in the next one.