In short
Episode topic: Steve McConnell discusses how Code Complete (first published as a ~900-page single-best reference on software construction) was researched and written, what “code construction” means versus “coding” and higher-level design, and how engineers should think about career growth (including his “career pyramid” and why “lily pad hopping” is harmful). He also addresses AI’s impact, what he left out of Code Complete that he now covers, and practical iteration/design ideas like rewriting.
Guest backgrounds
Steve McConnell is the author of Code Complete and other software engineering books. He wrote Code Complete early in his career (about five years out of college; ~6 years professional programming; philosophy degree with math/computer science minors). He worked at a small insurance consulting firm, Boeing on a defense project, and then Microsoft (including a year around Windows/DOS era).
Key claims
Software construction is the full set of activities around code until it’s ready to ship (design thinking, debugging, testing, readability, maintenance), not just writing code. Many programmers are detail-oriented and think inductively (specifics first), while others can think top-down; teams often mismatch abilities. Design is iterative and “sloppy” (permission to experiment; “design twice”). Career should accumulate value over time via a “pyramid,” not project hopping.
Notable examples
Microsoft Press treated Code Complete as a “sleeper book” that wouldn’t sell well; it became a bestseller. McConnell credits his book’s influence on Jeff Atwood’s Coding Horror blog, which helped lead to Stack Overflow. He describes a Microsoft programmer who rewrote assignments three times to improve quality.
Written by AI. May contain mistakes. Listen to the episode to check what was said.
Chapters
Tap a time to open that second in VOMeeting Steve McConnell
1:08 to 1:53
The host introduces Steve McConnell and shares his impressions of the book.
“This podcast episode is presented by Statsig, the unified platform for flags, analytics, experiments, and more.”
The Journey to Writing Code Complete
1:53 to 4:22
Steve discusses his motivation and process for writing Code Complete.
“And why did you even come up with the idea of writing such a massive and extensive book?”
Impact of Code Complete
4:22 to 6:15
Exploration of the book's surprising success and its influence.
“I was mentally and emotionally committed, and so I decided to just go ahead and do it.”
Coding Horror and Its Influence
6:15 to 7:44
Steve shares the story of how Coding Horror was inspired by Code Complete.
“You must have learned about a really interesting inspiration the book had on the blog called Coding Horror.”
Understanding Code Construction
7:44 to 10:31
Steve explains the concept of code construction and its importance.
“But probably more good things than bad will happen.”
Design Approaches in Programming
10:31 to 14:40
Discussion on different design approaches and mindsets in programming.
“I'm just like double checking that I'm understanding because I feel that code construction in the book, you definitely cover it.”
The Importance of Design Documents
14:44 to 18:33
Explore the significance of design documents in software engineering.
“And when I work, for example, at Uber, like we kind of operate like this, but a lot of times it just feels like a nag.”
Lessons from Iteration and Rewriting
18:33 to 22:08
Understand the value of iterating and rewriting code for better outcomes.
“And as you said, first of all, you blow up.”
Steve McConnell's Career Journey
22:08 to 27:53
Discover Steve McConnell's professional development and philosophy on programming.
“But at the time, less than half the people working in the field had degrees in computer science.”
The Programmer's Pyramid
28:00 to 29:48
Learn about Steve McConnell's concept of a pyramid structure in programming careers.
“And I just kind of organized the software universe into the base of the pyramid was all programmers, like 100 % of the programmers.”
Show all 37 chapters
Understanding Lily Pad Hopping
29:48 to 31:34
Discover the idea of lily pad hopping and its implications on career progression.
“And I really appreciated that you kind of zoomed out and looked like, all right, where am I?”
Taking Initiative in Your Career
31:34 to 33:18
Explore the importance of self-direction and initiative in professional growth.
“So how do I essentially build my skills in such a way that I become increasingly valuable as time goes by?”
Adapting to Workplace Dynamics
33:18 to 35:14
Understand how different workplace cultures impact employee roles and expectations.
“And then Larry Constantine, who's one of the founders of Structure Design, if that term even means anything, had a saying that I like, which he says, nobody needs to give you permission to do your job well.”
The Role of Flexibility in Engineering
35:14 to 39:44
Learn about the evolving roles of engineers in dynamic work environments.
“My first summer job that I got paid for programming is an internship.”
Organizational Maturity and Role Clarity
39:51 to 42:00
Examine how organizations evolve and the need for clear roles as they grow.
“When I say maturing, in this case, I'm not even saying more mature is better than less mature.”
Aging in the Tech Industry
42:00 to 44:34
Exploring how the demographics of tech staff evolve as companies mature.
“I think you're very much right, especially because it is popular now.”
Career Growth and Skills for Developers
44:34 to 47:26
Discussing the importance of technology, business, and best practices knowledge.
“In your experience, like how important are these and how can you get good at them?”
The Changing Landscape of Management in Tech
47:26 to 50:35
Examining the transition from technical roles to management and the challenges faced.
“And then I also need to get better at the business side of it.”
The Role of Energy in Team Productivity
50:35 to 55:54
Highlighting how personal energy impacts productivity and team dynamics in tech.
“If you're at a VP of technology role, VP of software role, it's unlikely that you aspire to be the CEO or the COO.”
The Power of Small Teams in Tech
56:01 to 57:16
Learn how small, focused teams have driven innovation throughout tech history.
“of tools or IntelliSense that just autocompletes your thing.”
Cultural Insights from Microsoft
57:17 to 59:13
Explore the intense work culture at Microsoft and its impact on productivity.
“They don't say energy, but yeah, that as well.”
Burst Mode vs Sustainable Work
59:14 to 1:01:19
Discuss the balance between intense work periods and maintaining long-term productivity.
“Every once in a while, you'll see some individual project where somebody does a halfway decent job of replicating it for a short time.”
Reflections on the Microsoft Experience
1:01:20 to 1:03:09
Reflect on the highs and lows of working in a fast-paced tech environment like Microsoft.
“I came up with this analogy, which is imperfect, but I used to do sports at a competitive level and this involves swimming and running, especially with running because it is something where you can be injured.”
Lessons from Code Complete's Evolution
1:03:10 to 1:06:50
Learn how the software industry has changed since the first edition of 'Code Complete'.
“And after a couple of years, they're like, I don't really want to do this anymore.”
The Rise of Incremental Development
1:06:51 to 1:09:49
Understand the shift towards incremental development practices in software engineering.
“first edition, object-oriented was well-established in academic circles but not well-established in practice.”
Integrating Generative AI in Development
1:09:50 to 1:10:03
Explore the implications of generative AI on coding and software development practices.
“has merged very nicely with how you deliver functionality.”
The Impact of Gen AI on Software Development
1:10:03 to 1:11:19
Explore how Gen AI is transforming coding practices and developer perceptions.
“it or not a little bit to your Agile thing was Gen AI, because ChatGPT had come out about a year before, like before when I finished my manuscript, like six months before, and you could already see that it was big.”
Guardrails and Software Fundamentals with AI
1:11:20 to 1:12:49
Discuss the importance of clear requirements and fundamentals in AI-assisted development.
“It generates the next token, but it does it really well.”
Understanding Complexity in AI-generated Code
1:12:50 to 1:14:15
Delve into the challenges of handling exception cases in AI-generated code.
“And the gist of it was, huh, this just sounds like good software development fundamentals.”
AI as a Tool: Opportunities and Challenges
1:14:16 to 1:16:06
Analyze the benefits and pitfalls of using AI tools in programming practices.
“That's the other thing that's concerning is I still think AI can't count.”
Code Review Practices in the Age of AI
1:16:07 to 1:17:49
Investigate how AI is changing code review dynamics and best practices.
“For example, you tell like, oh, make this work.”
The Evolving Role of Full Stack Engineers
1:17:50 to 1:20:24
Examine the rise of full stack engineers and the integration of AI tools.
“So eventually, in code review, we needed two thumbs up or two people to accept.”
AI as a Potential Silver Bullet in Programming
1:20:25 to 1:22:29
Discuss the implications of AI as a transformative force in software development.
“By the second edition, maybe, you know, maybe it was more common or more universal for people to have learned two or three.”
The Historical Evolution of Programming Languages
1:22:30 to 1:23:59
Reflect on the history of programming languages and the impact of AI on future developments.
“And so, you know, that's really, I think, to me, the gist of it.”
The Evolution of Programming Abstractions
1:24:03 to 1:26:04
Explore the history of programming abstractions from assembly to AI.
“You add an abstraction, more people can get started.”
Career Advice from Steve McConnell
1:26:04 to 1:28:44
Steve shares valuable principles for building a durable engineering career.
“And in programming, we have been used to, and I think we've gotten really good at making the most of deterministic.”
Reflections on an Inspiring Interview
1:28:44 to 1:29:40
A summary of insights and experiences shared with Steve McConnell.
“And you close the book with how you emphasize how craftsmanship is important for professional growth.”
Transcript
Automatic transcript. May contain errors.0:00I thought this book would already have been written by someone, and I wanted to see this book so that I could use it as material for an article. In my mind, I was going to write a 250-page book. So for the first time, I thought, since I'd never published anything, I should probably make it look like I knew what I was doing. And so I created a detailed plan for the book and estimated the page count of the book, and it came out to me 900 pages.
0:21The Pragmatic Engineer Host:Code Complete is a single-best book on code construction, which includes coding, debugging, detailed design, testing, and many more topics. It's also the most detailed one with an impressive 900 pages. The second edition of the book was published in 2004, and 20 years later, the book remains a bestseller in software engineering. I sat down with the author of the book, Steve McConnell in Seattle. In this episode, we get into the history of writing code complete and how the publisher did not expect the book to sell well, the difference between software construction and coding, Steve's mental model of career development for software engineers and why he considers the concept of lily pad hop being harmful, the impact of AI on software engineering, topics that Steve left out of Code Complete, but now talks about in-depth, and many more.
1:04The Pragmatic Engineer Host:Steve rarely gives interviews, so I hope you enjoy this special one. This podcast episode is presented by Statsig, the unified platform for flags, analytics, experiments, and more. Check out the show notes to learn more about them and our other season sponsor. If you enjoy the show, please do subscribe to the podcast on any podcast platform and on YouTube. Steve, welcome to the podcast. It's so good to meet you in person. Yeah, thanks for having me. So you wrote this book, Code Completed. I'm going to show it here. I was amazed when I first got my hands on the physical version, on how long it is, how extensive it is, and how thorough it is.
1:40The Pragmatic Engineer Host:And the other big surprise I had, I assumed that whoever wrote this must have been a really seasoned professional, you know, working 10, 20, probably 30 or 40 years. But I learned that you wrote this somewhat early career. How did you write it? And why did you even come up with the idea of writing such a massive and extensive book? So I didn't start out to write a book. I started out to write an article. And I'd never published anything. And so I thought I'd wanted to write. And I thought about writing all different kinds of things. And I was active as a programmer. So I thought, write about what you know.
2:18And so I started doing research. I'm a good researcher, which is funny in today's context, but back then that involved going to a research library and looking through a card catalog and requesting materials through interlibrary loan. I mean, it's quite a different process. And so there was actually some skill involved in that. So basically I thought this book would already have been written by someone, and I wanted to see this book so that I could use it as material for an article. And so I basically just started doing research. And after reading about, I think I read about 80 articles and a handful of books, I convinced myself that this book didn't exist.
2:59And this was just baffling to me because there were books on requirements, design, testing, project management. But there wasn't a book on the main thing that programmers do, which is software construction. And so I just kind of shifted gears and I didn't set out to write a 900-page book, which was the first edition. I thought, you know, it's funny because in my mind, I was going to write a 250-page book because all the other books I'd read in that space had been 250 to 350 pages. And so I did background research. I wrote a couple sample chapters. I got ready to submit my proposal to the publisher.
3:41And at this point, I only had two chapters written. And so for the first time, I thought, since I'd never published anything, I should probably make it look like I knew what I was doing. And so I created a detailed plan for the book and for the first time estimated the page count of the book. And it came out to be 900 pages. And I thought that can't possibly be right. I'm not writing a 900 page book. I'm writing a 250 page book. And so I estimated it a different way and I came up with something like 875 pages. So I thought, OK, I think I'm writing a 900 page book. I think the thing about that is that if I had thought a year earlier that it was going to be 900 pages, it never would have occurred to me to even try.
4:21But by that time, I was too far into it. I was mentally and emotionally committed, and so I decided to just go ahead and do it.
4:29The Pragmatic Engineer Host:And just help us imagine what stage of your career were you, you know, like in terms of work experience, college, those kind of things. So I was about five years out of college at that point. I'd been programming professionally for, you could call it six years, I guess, because I took some time off in the middle of college. I actually think that was the perfect time to write the book because I think it's really important in writing a book to have a really clear sense of the target audience. And for me, my target audience was me five years earlier. And it was recent enough that I could still remember where I was five years earlier and what I didn't know five years earlier.
5:13I think for somebody who is 20 or 30 years into their career, it'd be really hard to know. Plus, you'd just be out of date in terms of what you needed to know.
5:20The Pragmatic Engineer Host:After the book came out, what was the impact of it? Did you remember? Like initially and then a couple years later? Yeah. So the book came out and it started to get really good reviews. And at that time, the reviews, of course, were in magazines, which people got in the mail on paper. This was pre-Amazon, right? They trickled in way pre-Amazon. And so the reviews were great. And I attended a book signing here in Bellevue. and one of the people from Microsoft Press came in and said, oh, this is our sleeper book. And I learned that they never expected it to actually sell very well, that they decided to publish it because they thought it would be good for the catalog to have a more scholarly, in-depth book, but they assumed it wouldn't really sell very well.
6:12So the sales have been a nice surprise for everybody.
6:15The Pragmatic Engineer Host:You must have learned about a really interesting inspiration the book had on the blog called Coding Horror. I don't remember exactly when it was. It was, I don't remember, 2005, 2007, somewhere in there. Something like that by Jeff Affleck. He started the blog or he renamed it? I'm not sure. I think he conceived it from the beginning as Coding Horror. And he reached out to me and said, hey, I'm writing this blog. I want to call it Coding Horror. can I have permission to use the coding horror icon from your book? And I was like, yeah, sure. And I think he sent me a T-shirt or something with the coding horror image on it.
6:53And of course, his blog did really, really well. And, you know, led to a lot of good things for him. And I think had a positive impact on the world, too.
7:04The Pragmatic Engineer Host:I think at some point it might have been the most popular developer blog. He published stats about something like 100 ,000 requests per day. I was reading it. So when I was early career, I read Coding Horror almost like every day or like, you know, every other day he published an article. And then, of course, that led to Stack Overflow or that helped him meet people, Joel and others. And that led to Stack Overflow. So it's just kind of incredible how indirectly, obviously, but, you know, your book inspired someone else to start a blog, which inspired or helped create this very special upside stock overflow, which stock overflow obviously now has helped train some of the agents.
7:43The Pragmatic Engineer Host:Sure. Like it's just all trickling all down. Yeah. Well, I think, you know, I don't know that I believe in karma literally, but I definitely believe in the general idea that if you put out good things into the world, that there are positive ripple effects and you never know what exactly is going to happen. But probably more good things than bad will happen. And so it sounds like that's part of what happened with that. And so the book is on the concept called software construction. And, you know, you kind of start the book. I'll quote a little bit from it. You say, at one time, software development and coding were thought to be one and the same.
8:19The Pragmatic Engineer Host:But as distinct activities in the software development lifecycle have been identified, some of the best minds in the field have spent time analyzing and debating methods of project management, requirements design, and testing. They rushed to study these identified, but it left code construction as the ignorant cousin of software development. I wanted to ask, what is code construction? I mean, the book is about code construction, but I think it helps us recap and how it's different to, let's say, software development or how it's similar to it. Yeah, I was pretty deliberate in the book in trying to capture the space of software construction and a space that's distinct from writing code.
8:56are not distinct from, but is not the same as writing code. I think that the idea of just jumping in encoding is something that maybe you do when you're first learning how to program. But as you get a little bit more advanced, I think there's a level of intermediate thought that includes thinking about how you're going to test what you're writing, thinking about how you're going to design in the details what you're writing, actually doing the coding and in the full set, the universe of topics that come to bear on the actual code itself. the readability and all aspects of readability. I think that much of the literature before I wrote Code Complete, there were a couple things out there that were decent things on coding style.
9:39But that was kind of it. It was coding style. It wasn't really about, you know, we had books on software design, but the software design really stopped short of the level of design thinking that you would get into at what would have been at one time the routine level and then later was really the class level. And it just seemed to me like there was just a lot of thought that wasn't necessarily guided or necessarily taking place in terms of thinking about the activities that are adjacent to coding but not quite big enough to qualify for a book or a name of their own.
10:19The Pragmatic Engineer Host:and then just to be clear like these thoughts are so clear like obviously we write the code but it's everything that encapsulates until i get something that is ready to to ship that is ready you know like literally we have the planning or requirements or business requirements and then it starts from like me thinking about like how i'm going to structure my code as i build it i iterate i debug i check that it's it's it's running i think about longer term maintenance these are all part of code construction. I'm just like double checking that I'm understanding because I feel that code construction in the book, you definitely cover it.
10:57The Pragmatic Engineer Host:But since then, I don't think we talk about code construction that much. I would probably make it a little narrower than what you just described. I think that some of what you just described, I would probably characterize as a higher level design. But on any given project, depending on how the project evolves or how it emerges, the design level of thinking could happen at the beginning or it could happen incrementally as you go. It could happen by somebody who is good at that kind of thinking or it could happen by the people who are actually doing the implementation. I think one of my learnings over the years, and I didn't really understand this when I wrote the first edition of Code Complete, is really that different people's brains work differently.
11:41And some people really are capable of thinking about design abstractly and then implementing the design. And some people are really good at just writing the code and learning the lessons in the small and then building up from that. And some people are good at both, but I don't think a lot of people are actually good at both. I think much more commonly you find people who are good at one or the other. And then I think there's often a disconnect between the people who have ability in one area and not the other. And I've seen cases where people think that it's just not possible to work the other way because they're not able to do it.
12:17And they just can't imagine that somebody else could be able to work that way. And yet we've got all kinds of instance proofs of people working in both ways and having it work out fine.
12:27The Pragmatic Engineer Host:And then the suitways are like so just I understand is one of like just spell out again the two different ways of working. You could think of it generally as top down versus bottom up. So you could think of it as inductive versus deductive. I believe that most programmers, meaning the majority, not like 99%, but 51 % or maybe 70%, I believe most programmers are pretty detail-oriented. And so I made a conscious design decision as I was writing Code Complete that I would write the book inductively. I wouldn't start out making a bunch of general statements and then demonstrate the specifics. I would start out talking about a lot of specifics and then build up to the general statements at the end.
13:14I just felt like more programmers than not were more oriented that direction. But what I didn't appreciate at the time I was writing that was how big the disconnect was and the idea that I think a lot of people just aren't capable of operating the other direction, whichever the other direction is.
13:30The Pragmatic Engineer Host:Steve was just talking about how there are different ways to get to the good design of a software system. Some developers do it top-down, others do it bottoms-up. But how do you know if a well-designed system works as expected in the real world? This is where analytics and experimentation are so important, and it's why companies like Meta, Uber, and others build complex experimentation systems themselves. These are far more advanced than what engineers at most companies could have access to. Until recently, that is, when Statsig became available. Statsig is our presenting partner for the season, and they built a complete set of data tools that allow engineering teams to measure the impact of their work, focus on outcomes, and create bottoms-up products culture.
14:07The Pragmatic Engineer Host:This includes advanced A-B testing, product analytics, feature flags, plus tools like session replays, a user store, and more. With Statsig, every time you release a new feature, you can see exactly how it moves a product or infometrics that you care about. And then you track progress over time using the same dataset. This toolkit is so valuable to so many teams that OpenAI, who was a huge user of Statsig, decided to acquire the company recently. Talk about validation. Statsig has an incredibly generous free tier, a pro tier for teams starting at$150 per month, and scalable enterprise pricing.
14:40The Pragmatic Engineer Host:To learn more, go to statstic.com slash pragmatic. Yeah, this is really interesting because, you know, for example, these days at a lot of scale-ups tech companies, it's becoming increasingly expected of engineers to start with a design document, which is a software design document. And when I work, for example, at Uber, like we kind of operate like this, but a lot of times it just feels like a nag. Like, I know what I want to write, which kind of makes me realize, I think, your point on some people are very differently. They're always the same developers or engineers who wrote the code, did the thing, and they're like, okay, I'll write a design document just to, like, check the box.
15:20The Pragmatic Engineer Host:But the code is already written. And at the time, I tried to explain to these people, especially eventually I became a manager to some of these people. Like, you need to start, you know, highlight your high-level thing. And I didn't appreciate it at the time. And I was like, what? Because I guess maybe I am fine operating like this. I'm probably in this first group. I didn't appreciate this until now. Yeah. There's a great paper, really old paper by Dave Parnas called The Irrational Design Process, How and Why to Fake It. And the gist of the paper, so this paper is from, I think, the mid-70s. I don't remember exactly.
15:55It was a really old paper. But the gist of the paper is that design is a sloppy process and nobody gets it right. It's not linear. You don't start out and march your way in a straight line toward getting a good design. And so, number one, the paper sort of gave permission to experiment, try stuff, make mistakes, learn from the mistakes, iterate. But then the paper also says the how and why to fake it part was at the end of that, you describe what you did. And the description is not necessarily going to show you all of the mistakes and dead ends and so on. So it's going to look like it was a more rational process than it was.
16:36But so I think both halves of that paper are worth keeping in mind. And it sounds like your experience would kind of bear that out, that it's not even really possible to get it right the first time in most cases.
16:47The Pragmatic Engineer Host:Yeah, and I do sense that in the industry these days, we've kind of forgotten a little bit about the design or the iteration or even things like, I have to remember who said this. I think it was John Alsterhout who in his book on software design, a philosophy of software design, his suggestion was design it twice because the second time you'll get a better design than the first time. These are just things that some people might still do. I would say three times, but yeah. And I'm serious about that. So when I was at Microsoft, there was a programmer inside Microsoft who was famous at the time, who was well known for rewriting everything three times.
17:30And the basic gist of it was if he had two weeks to do an assignment, he would spend the first six days coding and making all kinds of mistakes and not doing it very well. And then he'd just throw it out and spend the next three days rewriting it. By that time, he would be applying all the lessons he learned. Then he'd spend the last day or day and a half writing a third version, and it would be perfect. And, you know, if you think about your own experience, if you've ever, you know, this should never happen in theory, but it still happens where you've done a bunch of work and somehow you lose it.
18:05It gets deleted. You'd have a backup, whatever, right? It should never happen, but sometimes it does. And you think, oh, this is awful. I just spent a whole day working on this. It's going to take me forever. And then you rewrite it in 45 minutes. And as you go, you remember all the lessons that you learned and all the stuff you wish you'd done the first time. It actually turns out probably better than if you'd never lost it in the first place and had to keep what you wrote initially.
18:30The Pragmatic Engineer Host:Well, these days, I think it happens a bit less thanks to get being everywhere and committing. But I've had this earlier in my career. And as you said, first of all, you blow up. You're like so mad. And like, I think it was a file lost or deleted or something like this. And as you said, you're thinking, oh, it's going to be so much work. I don't even want to do it. But when I now remember the same lesson. I spent some time on the school board here in Bellevue. And one of the surprising learnings I got from the school board was that one of the best ways to build reading proficiency is to have kids read things they already have read.
19:07This repetitive reading builds confidence and builds skill. And so I think you kind of apply the same idea to rewriting the same code you've already written, that maybe there's a lost opportunity there because we're always trying to do something new and we don't often get the chance to go back and just redo the thing we just did. Yeah, and I think this is one of the things where I wonder if we're talking a lot less about software design in the industry
19:33The Pragmatic Engineer Host:because we just ship once. We don't even go back to rewrite the whole thing, especially with web-based software. You know, mobile is becoming that. You can ship it. You can change it anytime. You know, there's startups, lean startups from 2010 gave this concept of MVP, minimum viable product. You know, it doesn't need to be good. It just needs to be good enough. And I guess the most mature companies, which hit so-called product market for the product that works, over time, they will do a rewrite or maybe a second rewrite through a series of migration technology choices. So they will get actually a lot better, but that's kind of it.
20:06The Pragmatic Engineer Host:So I think there's a lesson we can probably all just consider. It's not a bad thing to rewrite. So your career path, we know that you wrote this book early career. What was your professional development story up to the book and then after the book? What happened after? Basically, up to the book, I had worked for a small insurance consulting company. I worked for a large, briefly for a large insurance company. I had worked at Boeing on a defense project. I'd worked in a startup mode for a company that was kind of doing just a startup shrink-wrap product. And then I was about to start working on the book full-time, and I got an offer to go to Microsoft just initially for a summer.
20:54And I thought, oh, at the time, Microsoft was the hot tech company. And so I thought, yeah, if I get a chance to see what's going on inside Microsoft, I should do that. It'll make my book better. So I ended up being at Microsoft for a year. That was essentially my background. I'd also done, I always had some kind of startup project of my own going throughout that period. And, you know, I put a lot of time into those as well. I had started out being kind of interested in programming, but not super interested in it. notwithstanding the fact that I seem to spend a lot of my essentially hobby time on it anyway.
21:32And so I started out just kind of thinking I wasn't really sure if I wanted to do this as a job. And then I thought, well, but I had a little bit of an entrepreneurial streak. So I kept doing startup stuff in that mode. And I at some point in there, I kind of switched over from thinking, I don't know if I really want to do this as a job to thinking if I'm going to do this as a job, I probably had to figure out what I'm doing. And I think at the time, for the first couple of years, I had a little bit of imposter syndrome because I didn't have a degree in computer science. I didn't know at the time.
Read the full transcript
22:01Oh, really?
22:02The Pragmatic Engineer Host:Well, of course, what was your degree in? In philosophy. Yeah, I had minors in math and computer science. But at the time, less than half the people working in the field had degrees in computer science. That didn't change for a long time. uh so i but i didn't realize that i that that was common i thought that was unusual so i i started trying to develop or acquire some skills so that i could basically be more more professional uh so i started going to user group meetings i had one friend who was as interested in the programming stuff as i was so we go to these things together and talk about them and and uh and then i got the chance to be, I'd worked at Boeing and I was like, okay, I'm not seeing a whole lot here that really looks like qualitatively different professional programming to me.
22:52And then I got inside Microsoft and I thought, okay, I'm finally going to see what real professional programming looks like.
22:58The Pragmatic Engineer Host:The best of the industry, right? Like Microsoft back then was a bit like what OpenAI is now or Google in like 2000, I don't know, four. It was just the 800 pound gorilla and there was nothing else even close at the time. And I don't know what percentage of all software share of the all market software share they had, but it had to be a pretty high percentage. This was around the peak, right? Around Windows and DOS and that era, right? Windows was not really popular yet, although that's what I worked on. But it was sort of the last phase of the DOS era. Which Microsoft actually dominated. Beginning phase of Windows, yeah.
23:38And they weren't super dominant in applications the way they are now. So I got inside Microsoft, and what I discovered was, number one, people were really, really smart. So that was a factor. And number two, you have like one person working on the printer device driver for one specific printer. And so the difference between that and my experience was my experience up to that point had been you're working for a company and you've got responsibility for figuring out how to get things to print, figuring out how to load and save files, figuring out how to display stuff on the screen. And it's like, oh, I've got like a whole person, not just on printing, but on printing to one device.
24:22So, I mean, that was a lot of it. It's just the projects were broken down into much, much smaller pieces. And so people could put a lot more time into it. And then, yeah, they were really, really bright. But qualitatively, in terms of programming practices, you know, there wasn't really anything different than what I'd already seen.
24:41The Pragmatic Engineer Host:So you got into Microsoft. You write the book. At this point, how did you think about your career? I think you had a talk earlier, which is not recorded, but about the mental model on how you viewed your career at the time and then figured out what next. At the time I wrote Code Complete, I was still trying to decide if I really wanted to be a programmer at all, if you can believe that. And so I spent a year full-time writing Code Complete, but I'd spent two years doing background research before I spent the year full-time. So you did research on, like, you had a full-time job and on the side you were doing, and then you, like, took off time to write?
25:25The Pragmatic Engineer Host:I took a year off. Wow. Yeah. Did that not look scary? I mean, suddenly you were there with, you know, like no job just writing this book? Yeah, I really wanted to write the book. That was the main thing I wanted to do by then. And I knew it was a big project because by then I'd figured out it was 900 pages. And with the 250 page that I'd been carrying around in my mind, that could have been maybe a part-time. But 900 pages, I knew I needed to take some dedicated time to do it. And I wanted to do it. I'd save money and I could, you know, I could afford to take some time off. I had basically, I was living a very low overhead life at the time.
26:05I didn't own a house. I wasn't married. I didn't have a dog, you know, so I could live really cheaply if I needed to, which I did. And so I spent about a year writing full time. And at the end of that, number one, it was a terrific experience. At the time, I felt like I'd gotten three years of experience in one year by writing the book. I would say I learned so much more about what I was doing just through the process of the writing's only not the main part of it. The thinking about what I wanted to write was the main part of it. But then I went back into hands-on programming role and I felt like, oh, this is great.
26:45You know, I like the writing, but I'm so glad I'm doing hands-on programming again because I was kind of sick of the writing at that point. By the time I published Code Complete, I was convinced I was never going to write another book because the end phase of that was just painful. And so then I worked for a couple of years and the memory of the pain faded. And I was kind of getting the itch to write something again. So then I wrote my second book, Rapid Development. And I kept thinking, I was going back and forth. I kept thinking, do I like writing better? Do I like programming better? I kind of liked whatever I was doing at the time better.
27:23It took me a while. Eventually, I realized I liked the back and forth. I like the variety, but not the variety on a day-to-day, week-to-week, month-to-month basis. I liked having big blocks of time to concentrate, dive in, go really deep. So before I wrote Rapid Development, at that point, I was starting to think, all right, yeah, I think this programming thing might be a good direction for me. And maybe I am a little committed to the career. And so I started to think about where do I think my career should go and what do I want to do? And so I have no idea how I came up with the idea, but I created what I thought of as the career pyramid.
28:03And I just kind of organized the software universe into the base of the pyramid was all programmers, like 100 % of the programmers. And my focus was on U.S. And then the second level up was programmers who had maybe actually gotten a degree in programming, which I had not. And then the next level up was maybe advanced degree in programming or maybe written some magazine articles or were in a leader manager position. And so anyway, the pyramid kind of went up to where there were just a very small number of people at the top who had essentially a lifetime of significant contributions to the field.
28:40And so I thought, OK, just in terms of setting a direction, I'll just aim for the top of the pyramid. And it wasn't so much because I thought I wanted to get to the top of the pyramid. It was just more to have a point on the horizon that I could move toward. And so I used that partly to guide what I did on the second book because I had a variety of books I was interested in writing. And the book that would have made the most sense after Code Complete would have been Design Complete. I could have written it at the time, but I felt like I would get pigeonholed as just pure tech guy if I did that.
29:15The other book I really wanted to write was Performance Optimization in Windows, which was a fun topic. But again, it was a little bit too, you know, a little bit too bits and bytes. And so I decided to hop over and write something that was a little bit more management oriented. And because I wanted to kind of triangulate on the top of the pyramid.
29:37The Pragmatic Engineer Host:And then, and by the way, this pyramid you shared with me, so we'll also share it. I thought it was such a good or interesting mental model that I haven't seen many people think. And I really appreciated that you kind of zoomed out and looked like, all right, where am I? Where would I like to go? How do I go there? Now, as part of this, you mentioned, again, in this talk, you mentioned the concept of lily pad hopping. Yeah. What is that? And how did you apply it to your career? Well, I think that the pyramid was, in essence, the antidote to lily pad hopping. What I had noticed, I noticed it a lot more later, but even at the time, I'd realized that programming didn't really feel like a career.
30:21It felt like a job. And the reason it felt like a job rather than a career was I didn't get the sense that it was going anywhere. I saw people who'd work on one project and they'd work on the next project and then they'd work on the next project. That's the lily pad hopping part. But it didn't add up to anything. It was just different. It was kind of like difference for the sake of difference. And, you know, they're probably learning things. They're learning a new business area. They're learning new technology. And, you know, maybe that's interesting and stimulating and there's definitely some personal growth that goes on there.
30:52But I always felt like if I'm going to put the effort into learning something and growing, I'd like it to add up. I'd like it to accumulate. I don't want it to just be a bunch of different things that are all the same in a way. I really want it to be essentially more than the sum of the parts. And so part of the reason for me coming up with the pyramid in the first place was really just trying to think about, okay, how do I get past this idea of I've worked on this project, I've worked on that project. I know a lot more stuff now than I used to, but I'm no more marketable. I'm really no more valuable.
31:27I don't have the ability to really contribute on any individual project or organization more than I used to have. So how do I essentially build my skills in such a way that I become increasingly valuable as time goes by? You know, you're going to put in the same effort either way. And so it's almost back to the design question where it's like, if I'm going to put in this much effort, I can either have it add up to this or I can have it add up to that, where that is a lot more than this if I put some thought into it.
31:59The Pragmatic Engineer Host:So I really like this thing, especially because as developers, I think we forget or our software engineers that we have a lot of freedom on the job. For example, when I was a manager to engineers, if an engineer came to me and said on my team and said like, hey, I'm really interested in this area. First of all, if they said that, I would be thinking, how can I help them with that? But even more so, but sometimes that would be tricky to do or not a simple way to say like, hey, I'm interested in this other project. I'd love to work on it because I think it would help my skill set. So if they kind of did the work to just look around, understand, you know, the limitations of the team, whatnot, like my answer was like amazing.
32:39The Pragmatic Engineer Host:And I also thought, wow, this is a person who's really taking initiative. Let me help them because because as their manager, I think, you know, I'm not sure if people still have the notion of like the other like the boss who's a who's something negative. Like as a manager, you really want everyone to thrive. You want people to grow professionally because guess what? They'll have better output, more motivation. it makes your team better. And as a manager, that's your goal. So I think the more people realize that you can think about where you want to go, even at the workplace, you can almost always make some of it happen, if not all of it.
33:10I think that's right. I think, you know, there's saying that most people live in a box that they build for themselves. And then Larry Constantine, who's one of the founders of Structure Design, if that term even means anything, had a saying that I like, which he says, nobody needs to give you permission to do your job well. And the corollary to that is your managers already think that you're going to do whatever needs to be done to do your job well. They assume that you believe that you have permission to do it. Meanwhile, on the ground, a lot of people live in that box they built for themselves.
33:44And they think, oh, I got to do this the same way that they did it last time. There's no reason they think that. It's just, I guess, it's human nature for people to just kind of constrain themselves that way. So I think you're absolutely right that in the vast majority of software jobs that I've ever been aware of, people can design a lot of their own job or their own day-to-day work in such a way that they can learn a lot and grow a lot in a more strategic way.
34:16The Pragmatic Engineer Host:And I think this is just becoming, it's starting to become more of a baseline expectation. So one thing I noticed is when we were hiring people at Uber, we had the, we had a culture that was very startup-y, experimental. We, we, we had the same, be an owner, not a renter, you know, do what needs to be done. And I have people who joined from like consultancies, places where it was common for the client or someone to sign tickets to them, for example, JIRA tickets, you know, and they would work on it. And they got used to, they, they weren't really allowed to go and ask questions. It was kind of like, don't question it.
34:48The Pragmatic Engineer Host:And so when some of those people came over, they found it really hard to adjust because they were like, oh, you know, what ticket should I sell? And I was like, well, like, don't tell me. You tell me. But it's interesting how that's the first time I saw that there was a divide where people at some point in their career, they got told, you know, like, this is the box. Stay inside the box. And then they found it really hard to, oh, I can actually, oh, there's nothing here. I can actually go outside. My first summer job that I got paid for programming is an internship. And I basically finished all the work they had for me halfway through the summer.
35:25So they had to make up stuff for me to do. And my boss gave me the assignment. He just handed me a box of floppy diskettes. You have to put up a picture so people know what those are. and he said, I want you to do something useful with this box of diskettes. And my response was, well, what do you want me to do? And he said, I don't know what I want you to do. Part of your job is to figure out what I should want you to do. So you take this away and, you know, do something useful with it. And at the time, I was incredibly frustrated. I felt like the boss wasn't delegating anything to me, wasn't giving me clear direction.
36:00I really felt like he'd sort of abdicated his responsibilities as a boss. But as the years went by, and certainly by the time I started my own company, that was basically the model for 99 % of my day, which is nobody when the owner of your company tells you what the next most useful thing to do is. You've got to figure that out. In fact, it's really mainly your job to be the one who's looking at the whole landscape and saying, what do I do next? What's the next most useful thing to do? So, yeah, I completely agree with that and identify with it. And it's funny how as a junior person, you can feel like the ambiguity in that assignment is a real liability.
36:41But really, that's incredibly valuable training for what you deal with as you get into higher positions of responsibility. And when I say responsibility, I'm not just talking about for people. I'm talking about product direction, health of the organization, all kinds of stuff.
36:58The Pragmatic Engineer Host:Just to see how baseline it is. You know, like at Uber, I didn't know if we were exceptional or not, but just a few weeks ago, I talked with someone at OpenAI about, in fact, I talked with the head of engineering at OpenAI. And, you know, they're now one of the hottest companies right now, a bit like how Microsoft was in the 90s or Google later or maybe Uber even at some point. And I asked the head of engineering, like, how are you structuring, you know, like your teams, engineers, et cetera. And he told me something interesting how, like, they don't really have roles anymore because they actually have some of the designers write code, obviously, with the help of AI.
37:35The Pragmatic Engineer Host:Some of the engineers, like, do the product requirements or even do design. And it's all becoming really fluid. And he said that the model they follow is, you know, everyone should pick up both what they think is the most important thing to do. And so suddenly what used to be a pretty well-defined role of software engineer, product manager, designer, they're all kind of murky. I mean, people still have their expertise. And this is one of the most innovative companies right now. I'm seeing startups do more and more of this. They're now calling it actually a product engineer, which means you are a software engineer, but your job is not just to write code.
38:08The Pragmatic Engineer Host:Your job is to understand what we do and then build solutions for the most pressing problems. And now it is spreading across that more and more startups are only hiring for these folks. And if you're used to being told what to do or you're looking for it, they'll be like, yeah, sorry, we're not looking for these types of folks. We just talked about how OpenAI works differently than many companies, even in the roles they have. One other thing that are different is in the tools engineers at the company use to get things done. They use Linear, who are the seasoned sponsor of this podcast. And a big reason for their choice was the need to harmonize all the different ways their product team was working.
38:42The Pragmatic Engineer Host:Picture this. You're an engineer working on a critical project. You need to coordinate with another engineering team on a shared dependency. But here's the problem. Your team tracks work in Jira, they use GitHub issues, and the product team writes specs in Google Docs. Every handoff requires you to translate not just the work, but the entire way of thinking about the work. This slows you down massively. One OpenAI engineer described it as an archipelago, where each team is on their own island using their own language, which sounds funny, but from my experience at Uber, it's super accurate. So their switch to linear was driven by the need to establish a shared vocabulary between teams.
39:17The Pragmatic Engineer Host:Every project now follows the same lifecycle, uses the same labels, moves through the same states. When an engineer from one team needs to understand what another team is working on, they don't have to learn a new system or decode different workflows. Their usage of linear in this way is how they can move so fast despite being quite a large company. And to close, linear is just so simple to use. Their team needed no formal training. Try it for yourself by heading to linear.app slash pragmatic. Well, what comes to my mind when you say that is I think companies go through a maturing process. When I say maturing, in this case, I'm not even saying more mature is better than less mature.
39:56Sometimes less mature is better. But you have certain personalities that work well in startup mode, and you have other personalities that work better as you get into slow growth or sustaining mode. And so what you described, I think, is just is great when you've got most of the staff that's self-motivated, self-driven, and they're part of something exciting and it's growing. And they're probably young and they're probably hired directly out of school or a couple of years out of school. There's a lot you can do in that mode. As the company gets bigger, as it gets installed client-based, as other companies start to do things that rely heavily on the reliability, not just the innovation, but they need different things.
40:37They no longer need what's latest and greatest and coolest. They need the thing to work the same way it did yesterday because they've made assumptions that depend on it. Then you get essentially you're calling for a different kind of staff to work on that. So as time goes by, some of the staff that were the biggest contributors early on get bored and frustrated with all the restrictions and they leave. And then all that ambiguity or flexibility in the roles and stuff, that's no longer a positive. And so my prediction with the scenario you described is that 10 years from now, that organization will need what my company called a roles and responsibilities workshop because it's just so common that you start out in a way that that works.
41:18But you get to a point where as things scale up and as the characteristics of the staff change, it just doesn't work anymore. And so you just need to be a little bit more explicit about it. And I think these are all just natural pendulum swings that happen as time goes by. And it's not that one is better or worse than the other. It's really fit for purpose, which in startup mode, having a lot of bureaucracy in startup mode is a great recipe for never getting started. But adding the right kind of bureaucracy at some point becomes necessary to sustain an organization of a larger size.
42:01The Pragmatic Engineer Host:I think you're very much right, especially because it is popular now. Obviously, I also talk with a lot of basically startups. Sometimes their scale ups are larger, but they're still very young, growing, especially in AI. It's a new topic. And if you look at companies, there's this joke that goes in the tech industry that eventually every company becomes IBM. And now, like when you look at Google in some ways, well, they're behaving awfully a lot like IBM used to. But if you look at Google, it's now 30 or, well, it's going to turn 30 years old. It's a massive business. It has 100, 200 ,000 people, et cetera.
42:36The Pragmatic Engineer Host:Like, as you said, the things don't work. And one model I've heard, which I don't know who to attribute it to, but there's the pioneer settler and city builder. Yeah. Which also is one variation of what you said. And then I add age on top of that. When I was at Microsoft in the early 90s, the campus age was aging 0.8 years per calendar year. And so when I was at Microsoft, I was 27. Average age on campus was 27 point something or 26 point something. I was about half a year off the average age on campus. And that's average. That's not median. That's average. And so if you've got one guy who's 60, you need a lot of guys who are like 22 to get the average down to 27.
43:20And so the average misrepresented how old the campus was, really. It was probably younger than... The media must have been younger. Yeah. So when I was there, there were about 15 ,000 people total, and the dev staff was about 2 ,000. But aging, 0.8 demographic years per calendar year, fast forward 15 years, now the campus is 40, not 27. And now people have got houses, and they've got kids, and they've got spouses. And, you know, it's just all this other stuff that's more on the kind of technical technology, code base, customer base. There's all the business stuff. But I think the demographics of the staff matter.
44:03And the reality is the people in the company age as the company ages. And that has some pretty big impacts.
44:13The Pragmatic Engineer Host:Yeah. And some of the companies that have been the hottest and fastest growing startups of all time, I'm thinking of Amazon. of Google, of Meta, you know, like their CEOs and their staff is now, you know, they used to be 20 when they started, or even I think Facebook 19, something like that. Now they're, you know, 40, 45, 50. As you say, it's all growing with it. It's good to keep in mind. Now, also in this kind of career advice talk that you did, you outlined three areas that you've noticed that software developers should become proficient in, technology knowledge, business domain knowledge, and software best practices knowledge.
44:53The Pragmatic Engineer Host:In your experience, like how important are these and how can you get good at them? And if you had to take a stab at which ones are becoming more important as a developer is getting more experience, which in your experience, which one was like one more important either for you or the people you work with? They all matter to some degree at all times. If you're a junior developer, you're not very good at all of them or any of them, but you're probably the strongest in the technology area. If you're a little bit less junior developer, you know, maybe you've worked for the same company for five years, then you could be pretty strong in the software best practices or pretty strong in the business in addition to being pretty strong on the technology side.
45:38I mean, five years is a long time in the software world. At some point, the vast majority of software professionals I've ever met, they end up concentrating in one area or another. And so I think the most career limiting, unless you're in just a super techie organization, is to just go all in on the technology side. There are some places where that's going to work, but that's the exception. Going all in on the business side is a really good background for moving into more of a company-level architect role. You understand how the different pieces fit together for both the technology and the business.
46:18You're able to make technical decisions on a business basis, and not very many people are good at that. And so I think that can be a super valuable, useful career path. The best practices path, which is my path, is actually probably a little bit more limited in the vast majority of companies. It's less limited if you're a consultant or a trainer. But inside a company, you can still be valuable, but you're probably going to move into more of a coach role or possibly move into more of a manager role. Anyway, I think either of those either of those second focus areas can be viable and valuable paths to focus on.
47:02And I think one thing I mentioned in that talk was that it's just it's very useful to think through which one do you want to be? And I don't know that a lot of people actually think about it that much. They kind of they get an opportunity to be a manager. And so they're like, OK, that seems like a step up. and they don't necessarily realize, oh yeah, if I take the manager path, part of what goes with that is I need to get better at the people side of it. And then I also need to get better at the business side of it. If I go high enough on the manager path, at some point, the business needs come into conflict with the technology needs.
47:37And my role is going to require me to favor the needs of the business. And a lot of technical people can't make that transition because they're too wedded to the technology, and they just can't conceive of the idea that the business would take precedence over the best, you know, that's in quotes, the best technical decision.
47:56The Pragmatic Engineer Host:Yeah, that's interesting with the manager path. I think we've had about 10 years where looking back, we had zero interest rates and companies were growing really fast, investing, investment in the technology was huge thanks to the mobile revolution, smartphone revolution, thanks to cloud, thanks to startup returns and IPOs just being big. and going at the manager path used to be seen as a very low risk one as one where you could go in you could manage people maybe make a bit more money open your options because now you could you could go to found a startup say i have management experience you could go back to being an engineer later as well but what what happened now well some a some of those people like who thought oh i'll just go into management for a little bit and see how it is and i'll go back They ended up, you know, going higher and higher again with this high growth area, earnings potential was higher.
48:47The Pragmatic Engineer Host:But now the reality is hitting where teams are not growing as fast. In fact, there are some companies are scaling back. So managers are finding themselves formally technical people in this really awkward position where they're not that technical anymore. Their past few years of experience is scaling fast growing teams, which is no longer needed. Yeah. So I've had some friends who saw this coming a little bit earlier, head of engineering or director of engineering, and some of them went back to individual contributor roles or to tech lead roles where technically they took a step down. But some of them are actually happier for it.
49:22The Pragmatic Engineer Host:Yeah. And it just gives a lot more stability. You know, there's there's still a lot of engineers who need to be hired, but just fewer managers and especially fewer managers without a warm referral. Yeah. I don't have enough knowledge of sales staff or general business staff to know how it looks on that side of the fence. But from the reading I've done, I feel like technical staff have a couple of interesting attributes as they move into management that I don't read about in general management literature. One is that I think a pretty common pattern for technical staff is going into management for a year or two, deciding they don't like it, going back into a technical contributor role, enjoying it, but going back to thinking about, huh, here, it could have done the management thing this way, it could have done it that way.
50:08And then they make a second attempt at manager, and then they actually really like it and they do well. I've seen that pattern many times. And so just the idea of kind of bouncing up against the ceiling, coming back, regrouping, and then taking a second run at it a few years later. And some of those people end up being really, really effective managers. Another attribute that I find to be really uncommon is that most technical managers at any level don't have any aspiration to general management positions. If you're at a VP of technology role, VP of software role, it's unlikely that you aspire to be the CEO or the COO.
50:50What's likely, if you aspire to anything, is you aspire to having the VP technology role at a cooler company. And that's it. And so it's funny because I think for general business people, this doesn't really compute. They're like, hey, if I'm a VP, I want to be the CEO. I want to move into the C-level. But for whatever reason, I don't think technical people think that way. I don't read about it as technology. Yeah.
51:16The Pragmatic Engineer Host:And there are some really interesting stories as well. The founder and for a long time CEO of HashiCorp, Michael Hashimoto, he was the CEO of the company for a while, I think because he needed, I think he took over from his co-founder. and then he went back to being an individual contributor at the same company, which is uncommon, but it comes to show, and now he's actually, he went back to writing, you know, he founded HashiCorp by writing software, I think Terraform or some of the others, and now he's back to writing software. It just shows that he just loves building. Yeah, you know, there's a great leadership book called What Got You Here Won't Get You There, and it's really aimed at organizational leaders, and the gist of the book is, here are all the things you did to kind of get to where you are.
52:07And they were all great for that role, but you're not in that role anymore. And so to be successful in your new role, you have to operate differently. And some people don't want to operate differently. So the ones that actually have some self-awareness do what you describe. They go back into a different role. I think the specific scenario you described of the founder of the company going back into a contributor role, So organizationally, we've seen that as super messy just because it's hard to disagree with the owner and all that stuff. And it can be incredibly, incredibly randomizing for the organization.
52:45But if that same person instead goes off and starts the next new thing, that can be great. You know, they can take advantage of everything they learn the first time.
52:54The Pragmatic Engineer Host:I do think that a lot of tech founders don't really think or even talk or consume literature or learnings from other companies. There's a lot of first timers. Why not? So there is some drama and conflicts and learning. Sometimes it works out. Sometimes it doesn't. But I wonder if this is engineering specific. And any company has this tendency of like, look, I know what I'm good at, which is engineering. And you assume that you're going to be good at other stuff as well, which. Sometimes you are. Sometimes you are. Sometimes you're not. Yeah. Yeah. Well, I think, you know, a topic that I don't think I've ever written about, but that I think is worth just throwing on the table is that focused application of personal energy makes up for a lot of other deficiencies.
53:45and in startup mode when you're talking about not having well-defined roles and so on, if everybody's actually working in a focused way and they care about getting work done and they're applying a lot of energy, mistakes aren't a big deal. You just go in and you fix it because you've got the energy to do it. If you're working in a super process-oriented way and people are kind of thinking half about their home life and they're checked out because now they're 45 instead of 27, Not that that's a universal pattern or anything. But, you know, if you don't have the same level of personal energy to correct mistakes, the mistakes linger.
54:25They affect more people, affect more downstream products, work products, and it just becomes a much bigger deal. And, you know, when I was at Microsoft, the core Windows team was under 15 people. Of course, this was, you know, a much earlier version of Windows. But at the time, there was a project going on at IBM. Well, Microsoft and IBM were jointly developing an operating system called OS2. And IBM had something like 10 times the staff, maybe more than that. And Microsoft was really frustrated at how slow IBM was on their side. And the reality is you can get a lot of stuff done with the right 10 people who are all super focused.
55:08And even if you just start thinking about it in terms of number of communication paths, how many people do I have to interact with on a day-to-day, hour-to-hour basis if I've got nine or ten people? How many does it take to make a decision that sticks? How many does it take to fully consider an issue? I hear if I have a decision where I'm on a ten-person team, I need four people to weigh in. I've now heard everything with four people. If I've got 100 people on the team, I've got 30 that need to weigh in. And that's an entirely different proposition. And so, yeah, you can get an awful lot done with the right with a high level of energy.
55:45And I don't think in the technical space, I haven't read much at all on people talking about the role that energy plays. It's all about process and training your training, your different people and technology and so on.
56:00The Pragmatic Engineer Host:And if I just think back of, you know, the past, like just 20, 30 years, the ones that I've seen repeatedly, regardless of technology, regardless of, you know, right now we have AI earlier, we have like code generators in terms of tools or IntelliSense that just autocompletes your thing. You know, we have all these tools that make teams productive. But whatever tools we have, if I think back from the 90s all the way to like today, we always see these things where there's a five, 10 person team comes out of nowhere, builds this thing. And so, you know, within the gaming, there's the team that built its software.
56:39The Pragmatic Engineer Host:You know, they built Doom with, I think, like three core people, nine people. And it was a huge hit. than in social media with Instagram, which was 10 people. Facebook acquired them because they were growing so fast, they would have been bigger on the face of WhatsApp. Again, it was a small team, but I think there were 50 people by the end when they got bought. Right now we have a social media, a platform called Blue Sky, which again, they're with 12 engineers. They're growing really fast. Open AI when they were small and so on. And it feels that it doesn't really matter what the tech stage is.
57:11The Pragmatic Engineer Host:Like what connects them is, well energy focus yeah and i i've not read anything about this you know there's always the they interview people and like how did you do it and they tell you some kind of story and when you ask people about like so right now i've been talking with like some people for example to open ai because right now they're the hottest one i asked them like what is a special how how do you ship so fast like open ai is still out shipping some smaller startups as a larger organization and the answer i get sounds cliche but their tongue is true they say well it's the people and how everyone's so focused and motivated.
57:44The Pragmatic Engineer Host:They don't say energy, but yeah, that as well. Yeah, and so during the era I was at Microsoft, I think the culture at Microsoft when I was there was if you were awake, you were working. And the thing that it looks from the outside like it's a sweatshop, but from the inside, it's just, they were doing an incredible job at that time of hiring people who really didn't want to do anything other than work on the next generation of software. And it was a great time to be there because you felt like you were at least a year ahead of the rest of the world because number one, you were developing it at Microsoft.
58:21Number two, everybody else who was doing anything interesting wanted to come to Microsoft to show it to you. And so you were constantly in one mode at work where you were seeing the future. And then when you went home or talked to somebody from a different company, they were a year or two behind where you were. So it's incredibly exciting, stimulating place to be. And of course, you just naturally wanted to spend all your time working. But you can't replicate that through good management where you're just trying to somehow motivate people to want to work 100 percent of their waking hours. You really have to just put the pieces in place so that people want to do it.
58:58And if you're a super high marquee company like Microsoft, I was at that time, then it happens kind of automatically. Really, the manager's job is not to mess it up. But if you're a regular just business or a sustaining mode company, I don't think it's possible to replicate it in those companies. Every once in a while, you'll see some individual project where somebody does a halfway decent job of replicating it for a short time. But, yeah, so all the examples that you gave resonate with me because they're all kind of in this same mold of super exciting time to be there. Part of something, you know, you're creating the state of the art, advancing the state of the universe.
59:43Unfortunately, it doesn't last forever. And so, you know, it's cool to be a part of it while it lasts.
59:49The Pragmatic Engineer Host:Yeah, and I think, you know, those of us, for example, I've had opportunities to be part of a team where at the time, I mean, we weren't changing the universe, but we were doing something really exciting and felt we're up against the world. It felt a bit impossible as well. Those are relationships where I still keep in touch with some of the people, you know, like it's like friendships are made through these crazy times. And it's weird because I wanted it is crunch time, but a little bit of self-inflicted sometimes external pressure. But I would never advocate for that. But I'm also very glad that I did it, that I had.
1:00:19The Pragmatic Engineer Host:Like, I do want some times in my life like that, you know, like not all the time because that's burnout. But also, like, if you have none of it, like, it's just a nine to five then. Like, I don't want that. A hundred percent, yeah. And it was funny because we saw the Agile movement go through the same kind of maturing of its view of sustainable pace that my company had gone through. We originally, as a company, really before Agile existed, had started out thinking 40-hour work week. But the first guy that I hired, who ended up being the CTO for 20 years, eventually he and I realized neither of us had ever worked in a 40-hour work week.
1:01:00We both naturally worked in burst mode. And we both did our best work in burst mode. And so it's not about having a steady state. It's about having a sustainable pattern. And, you know, what you described resonates with me 100 percent in that you don't want it all the time. But yeah, if you had to go through your whole career and never experience that, I would really feel like I had missed out on something if I couldn't have been in that mode, at least some.
1:01:27The Pragmatic Engineer Host:I came up with this analogy, which is imperfect, but I used to do sports at a competitive level and this involves swimming and running, especially with running because it is something where you can be injured. You know, when you're training, like you have when you're actually sprinting or you're doing the competition, but even during training, you're doing that part. You're also doing the kind of endurance part where you're not giving all that. And then you're also like resting. And a coach, you know, will instruct an athlete to go like, okay, go all out, give me 70%, give me 50 % rest for this much.
1:02:03The Pragmatic Engineer Host:and if I think about our professional career, if I had a coach who was looking to maximize my impact on the long term, right? I mean, for athletes, it's only 10 years. For us, we have 40 years. They would actually tell me the same and yet when we're in a job, we feel that, I mean, either we feel bad about kind of coasting a little bit after a hard project, but we probably should be doing this. I mean, maybe don't advertise it because there's a bad stigma these days when you say like, oh, I'm doing, But like after you do something like really tough, et cetera, I mean, yeah, like it's kind of okay to – Yeah.
1:02:39The Pragmatic Engineer Host:As long as that's not – you're not getting stuck in that, right? Yeah. You know, I didn't really spend that long at Microsoft, but for some reason this keeps coming back to that topic. And I think being part of that is exciting for a while. But as you say, when it becomes a marathon and not – or it becomes multiple marathons back to back, it doesn't really work as well. And, you know, Microsoft in that era had a lot of stuff going on that wasn't really that exciting. And so there's this background culture that people have participated in where they're working themselves to death. And after a couple of years, they're like, I don't really want to do this anymore.
1:03:17And so, you know, there were cases where as the years went by, they're sort of developing an expectation that that was going to be the work mode. But we're now in a completely different space when there's an expectation that it's going to occur rather than just the individuals doing it because that's what they want to do. And Microsoft, because they were so successful, got into a mode where they basically had to go to people and key products and say, you know, we need you for one more release because we've identified that. We need to carry forward at least two of the key people from the last release to be successful in the next release.
1:03:52And they were basically saying, look, we'll give you enough stock to make you rich, but we need you one more release on this. And so now that's just a completely different vibe on the project than the one before.
1:04:05The Pragmatic Engineer Host:So you mentioned that one topic you didn't write about, but maybe it could have been a good idea in hindsight, is rule of energy. I wanted to ask you, since the second edition has been published, that must have been 20-something years as well. What are one or two other topics that if you wrote this book today, you might have added into it? Yeah, so I think that really gets into the limitation of where I am professionally now.
1:04:41I mean, the irony of it is I've spent more time actually doing hands-on programming just for my personal use the last five years than I did for probably 15 years before that. But it's really just one-person project, me personally doing it. I think, you know, we've talked quite a bit in this conversation about design three times. And I think one thing that has worked out really well for Code Complete 2nd edition is really that it is the 2nd edition. And then I published it 11 years after the first edition. And so I think that was really kind of an ideal amount of time between the two editions because I had learned a lot in the intervening 10 years.
1:05:24The industry, I think, had matured quite a lot. And when I went back and started working on the second edition, I had a great vantage point for looking at, OK, what has changed since the first edition and really thinking through, well, what insights does that give me about the kinds of things that are shorter lived. And the whole point of the book was to try to capture the longer lived best practices that would span generations of technology and span programming languages and so on. So the 10 years between those two, there was some stuff in the first edition is like, yeah, okay, this really wasn't lasting.
1:06:01This needs to go. There was other stuff. It's like, wow, you know, it's been 10 years. This really hasn't changed much at all. And I think when the second edition came out in in 2004, Agile was really, it was beyond infancy. It was kind of at the toddler stage at that point, maybe a little beyond that. But we were still mostly focused on XP. Scrum really hadn't emerged as the dominant practice at that point. And so I think one of the challenges for me in the second edition was trying to figure out, okay, well, how much do I really want to talk about Agile and how much do I really want to talk about XP in particular.
1:06:39I decided really I only used XP in one example in the book, so I'm pretty happy with how that worked out. But in the first edition, that consideration had really been about object-oriented because when I was writing the first edition, object-oriented was well-established in academic circles but not well-established in practice. And so I made a decision to really not do very much with it. And in the intervening 10 years, it became so well established that it wasn't really a separate topic. I originally thought I'd have some separate treatment of it, but really it just ended up weaving its way in really throughout the book.
1:07:17And it didn't make sense to try to treat it as a separate topic. So I feel like the first edition had aged more in 10 years than the second edition has aged in 20 years. Yeah.
1:07:29The Pragmatic Engineer Host:And I actually, like, I just collected a few topics we don't need to go through, But the things that I thought did not age or actually age well, so it's very applicable, the parts of managing complexity. You go through how you can use things like abstraction, clear conventions to reduce cognitive load. Our brains have not gotten bigger in the last 20 years. No, cohesion and coupling, how cohesion within modules, but also loose coupling between the modules help for more maintainable software also has not changed. I wanted to ask you, like, in the book goes into the value of iteration and continuous improvement.
1:08:05The Pragmatic Engineer Host:Was this, because I feel this is like, duh, like, this is how we work. But at the time when you wrote it, was this a bit less accepted still or a bit more novel of idea? Because it's interesting to see things that were like today, like, obviously, but these are not how ideas start, right? Yeah, no, it's a really interesting question. And it does take me back to kind of the state of the world in 2004. In 2004, the reason we were talking about incrementalism and iteration had nothing to do with product delivery. It had to do, it really had to do with efficient technical practices and a virtuous learning cycle.
1:08:46But kind of around 2004, we started to go from Internet brochureware to actual meaningful, more rich functionality websites. So the idea of CICD wasn't really a concept in 2004. Not yet. But we had done work for Amazon in about that same time frame. And at the time, AWS didn't exist, at least not by name. But what we'd observed in the work for Amazon was I thought they were okay at the technical programming level, but I thought they were probably the best in the world at operations, as we called it at the time. and their concept of just, if it doesn't work, we'll roll it back. There just weren't a lot of organizations back then that could do that.
1:09:33And so, yeah, in the last 20 years with mobile, well, internet at first and then mobile, and just functionality getting rolled out continuously, these two, what's good for the learning cycle and for containing errors at the development level has merged very nicely with how you deliver functionality. product. Yeah.
1:09:58The Pragmatic Engineer Host:And so, you know, today, like when I was writing my book, the Software Engineer's Guidebook that was published two years ago, one topic I was really unsure of, should I include it or not a little bit to your Agile thing was Gen AI, because ChatGPT had come out about a year before, like before when I finished my manuscript, like six months before, and you could already see that it was big. It was great for learning. It was good at generating code. So I figured, should I add this or not because and i in the end i added it because it felt to me already all developers i knew were already using it even if just to explain things and since then one of the biggest changes how how gen ai is becoming i'm not going to talk about the the generic so but but for coding it turns out it is very good at generating code and for example in the book uh one tech one technique that you encourage and what i've used before is the the pseudocode programming process where you come up with pseudocode.
1:10:52The Pragmatic Engineer Host:And for example, when you do that, you could, it's great at giving it the more detailed pseudocode, the better. And you can tell to generate Java, Kotlin, Rust, whatever. It does a great job of doing so. So I just wanted to get your thoughts into the first principles. Now that I know you've not been as embedded in software in the past few years, but knowing that there's this tool, which is very good at generating code, it's a weird intelligence. It's not intelligent per se. It generates the next token, but it does it really well. And what we're seeing is it spits out code really, really quickly, oftentimes good, sometimes not.
1:11:32The Pragmatic Engineer Host:I think some people, like I compare it when I talk with John Osterhout with the tactical tornado of doing so. And there is some scare with some developers of like, wow, it's actually coding better than I do. If you were, you know, like an early career professional in this industry, seeing that there's this tool that is actually good at spitting out code, not perfect code, but pretty good code, how would you think of making the most out of it for your career to understand how to tame this and how this might even change software development if it will? Maybe it won't. Yeah, well, I think it's pretty clear it will.
1:12:14I think it's totally unclear how it will. In my mind, we're still in the pretty early stages of how we would use any kind of AI for help with software development or really for help with anything. I think at this point in time, the lessons I feel like I've learned are the more guardrails you put in place, the better result you're going to get. There was a funny LinkedIn post yesterday from somebody who said the learnings about using AI and software are you've got to be really clear about your requirements. You've got to really define your test cases well. You've got to define all the exception cases really well.
1:12:51And the gist of it was, huh, this just sounds like good software development fundamentals. And only we are now, you know, AI is the thing that's finally after 75 years forcing us to do this. And maybe it hasn't been 75 years that it's been. It has been 60 plus. Yeah. So, I mean, I think that that's funny, but it's also true. You know, one of the things that I think is true of software developers is developers are so tech oriented. And if you give them a tool to do something, that works a lot better than giving them some rules or guidelines. And so if AI is a tool and now to get the tool to work, you've got to go through these software fundamentals.
1:13:34yeah, maybe that is the thing that finally makes that happen. My other feeling about it, and I would love it if you correct me, if you feel like I'm off base on this. My other feeling is that I think writing the gold path or the happy path through the code has always been the easy part of coding. And understanding which exception cases did I forget about or was I unaware of or did the requirements never capture in the first place? You know, Fred Brooks published a paper called No Silver Bullets, and he talks about the difference between accidental complexity and essential complexity. And a lot of the essential complexity comes from the real world because the real world is messy.
1:14:21And to the degree that AI isn't 100 percent lined up with the messiness of the real world, than the programmer job of being the party that fully vets all of the exception cases and the corner cases and the off-by-ones and so on. That's the other thing that's concerning is I still think AI can't count. And so off-by-one errors seem like they're just probably...
1:14:46The Pragmatic Engineer Host:So I have to agree because I think we should not forget, like obviously the interesting thing with AI, I talked with a really experienced engineer, Simon Willis, and he created the Django framework. work. He is a very productive engineer for about 20 or 25 years, just like codes a lot and writes really good code. And he's been using ChatGPC and all the other tools since they've come out. So coming up three years now. And he told me, because I asked like, hey, Simon, is it worth like understanding a theory? Because I took time to understand how this thing works. It's just matrices everywhere, which is why GPUs work so well with them, because it turns out, you know, that are hard for us to understand and they predict the next token.
1:15:31The Pragmatic Engineer Host:And he said, actually, it might be a little bit harmful in his experience because you need to get a feel for how this works because now it does work. And he says that it just takes a lot of time to figure out where it works and where it doesn't. Now, in his case, and I think for a lot of us more experienced engineers, it can be super helpful because as it works, like I will call BS. I'll be like, this is bad. And it often gets things really bad. So as long as I just use it as like this, people think about it. I think Ken Beck said he thinks of it as his genie where you ask, it grants your wish, but sometimes in really funny ways.
1:16:06The Pragmatic Engineer Host:Yeah. For example, you tell like, oh, make this work. And it does or make it work and the test should not fail. And sometimes it will just go and delete the test when it cannot. early in my career when I was at Boeing we had a CDC cyber supercomputer and the way the cyber supercomputer was explained to me is it's a very powerful, very literal giant that will do exactly what you tell it to do but it's so literal that it has no ability to do anything other than exactly its interpretation of what you tell it to do and I kind of feel like AI is in that same space it's incredibly powerful and, you know, your comment about sometimes it's glaringly off.
1:16:52I don't worry about that case. I worry about it being subtly off.
1:16:56The Pragmatic Engineer Host:Yes, and it is off subtly a lot. So there are already some small stories that are going viral, which are, it could have happened to a human, but a good example is startup. You know, they use one of the many agents, which does stuff. It created a PR. It looked good. And, you know, after a while, when it generates good stuff, you're like, looks good to me. You commit it. So it just made a small change that added up observability logging to one of their things that was unnecessary. And this agent cost$500 a month. And in a month, it generated an extra$800 for nothing. And the guy was like, oh, okay.
1:17:28The Pragmatic Engineer Host:And I think we're going to see a lot of these things. I think we'll have to ask ourselves again, like, what is software engineering? Because now what I'm hearing for teams that are using more of those AI is reviewing code is super important. Yeah, yeah. But of course, it is hard to, like, I remember when I, again, I worked at Uber, it's like, the more you got to know an engineer, sometimes you realize they're really reliable. So eventually, in code review, we needed two thumbs up or two people to accept. And when that person came and wrote their stuff, and it was a long pull request, you tended to say LGTM looks good to me without reading it.
1:18:05The Pragmatic Engineer Host:And of course, the shorter it is, we also started to have this rule, I don't have long pull requests, because like for a 500 line change, most people were like, looks good to me because I just don't have the mental capacity. For five lines, you get like 50 comments saying, hey, what about this? What about that? Et cetera. So it feels like we, I don't know when, but I think we're going to come back to some of the earlier learnings on Software Engine because this thing will not change whether it's a machine doing it or whether it's a human doing it or whether a machine that is able to take on some things that a human can do.
1:18:36The Pragmatic Engineer Host:Won't go anywhere. Yeah. So sometimes programmers have difficulty just getting started. You mentioned the pseudocode programming process. I think that's something where AI can be pretty helpful. You're stuck to say, hey, look, what are the steps I should, what are the different topics I should consider when I'm designing this? Okay, what sequence would make sense? You can basically dialogue and say, give me a breakdown of this space and show me what the class design would look like. Okay, I don't like that. Give me a different breakdown. Show me what that would look like. The ability to iterate super quickly and insert your own brain into those iterations, I think, is incredibly valuable.
1:19:15and for that matter it's incredibly stimulating to be the human in that in that loop and then of course you can also say what test cases should i consider you know you can kind of pit it against itself and and i think i mean at least my own experience with that is you know i haven't tried it on anything super complicated but i think the general concept seems to work yeah these are
1:19:36The Pragmatic Engineer Host:definitely also one other thing that seems to be very useful is explaining things uh may that be a a language, a framework, technology, obviously you always need to double check, but some of them are already giving you references. So like, it can speed you up a lot and help you. And you know, one thing I am seeing, it seems to be happening across the industry, is engineers are going to be more full stack in the sense of, you might remember the time where there was like Java engineer and.NET engineer, and they didn't mix. And then later at my time, when I started to work, we now had backend engineers work across languages.
1:20:08The Pragmatic Engineer Host:You could do multiple, and that was kind of expected. But still backend and front and mobile were separate. And now with the help of these things, you know, like a backend engineer can generate a mobile pull request and so on. Yeah, and, you know, one of your questions or one of the threads has been kind of what's changed over the years. I think what you just described is a huge change where first edition of Code Complete, a lot of readers would have learned one programming language when they read the book. By the second edition, maybe, you know, maybe it was more common or more universal for people to have learned two or three.
1:20:41But the idea that it's just assumed that you're going to learn a few because you need to be using a few on a day-to-day basis in your job as a full stack engineer, that's just a complete change. And I think the mental development that goes along with that of understanding what's common and what's different across languages, I mean, that's just really valuable.
1:21:00The Pragmatic Engineer Host:Yeah, and I also wonder if it will be really valuable now because I feel the breadth keeps increasing. But don't forget, back in 30 or 40 years ago, the people who learned one language, they were just as smart as the people now. I guess the difference is so they – and they probably store equal knowledge. They need to tell way more details. There are a lot more this and that. So I wonder if it will be more really valuable. We now have a lot more breadth for sure. Yeah. But you cannot have as much depth. So the people who are able to balance this and even though you have access to this, you know, genie that can explain everything, actually taking the time to understand and have that mental model, you'll probably go further.
1:21:38Yeah, I think, you know, in thinking about the Fred Brooks No Silver Bullets paper, which is pretty interesting to think about in terms of AI, because the whole premise, the whole concept of a silver bullet is any single innovation, technology development method that by itself is capable of producing an order of magnitude improvement over a 10 year period. You know, AI might very well be the thing that is the exception to the rule in that paper. But, you know, the basic argument is that the real world messiness and other sources of essential complexity aren't going away. And unless you find a tool that can deal effectively and utterly reliably with all those details, the corner cases, the off by one cases, all that stuff.
1:22:26You know, programming, we don't get to be approximately right. We have to be exactly right. And so, you know, that's really, I think, to me, the gist of it. If AI can get to the point where it's exactly right, then, you know, maybe we really do start to replace programming jobs with AI. But the whole history of programming as languages have gotten more powerful and more expressive, tools have gotten more powerful and more expressive. I think that the defining characteristic of a programmer is being the person whose job it is to figure out what is exactly right. And if AI just basically changes the playing field, so now you're trying to identify what's exactly right with AI-generated output, to me, it's almost the same job it always was.
1:23:13The Pragmatic Engineer Host:Yeah, and don't forget that AI generates code, and that code at some point needs to be understood, especially because they can get into loops. Again, they can get confused because, again, just how it works once we understand that. So there is value both in that. But also, I feel like there's this thinking as well. I'm not sure I subscribe to it, but how we used to have assembly as the programming language, machine code. Then there was C or C++. Then we had compiled languages. We have some visual languages or Visual Basic. And this can be seen as like yet another layer where English translates to this, except it's not a one-on-one mapping like all the other ones.
1:23:55The Pragmatic Engineer Host:So it's a lot more. We'll see where it goes. It's changing things. But I think the history of programming has been layers upon layers. You add an abstraction, more people can get started. I mean, COBOL apparently was invented to make it a lot easier for developers to get started. Everything was invented to eliminate programming. All the programming was invented to eliminate programming, including Fortran. Yeah. So I would take what you say and I would look at it from a slightly different angle, which is I think the history of programming is a history of increasing levels of aggregation. So you started out with assembly or machine language, and then you had aggregation into assembly.
1:24:37And that was one level of aggregation. Then you had aggregation into macro assembly. So that was a second level of aggregation. Then you had this amazing invention called the subroutine, which was an aggregation of callable functionality. And then you had an aggregation into classes where you had a combination of data and functionality. And then, I don't know, it kind of, you know, at least that's kind of where my knowledge of it, my direct involvement of it kind of stopped.
1:25:02The Pragmatic Engineer Host:And now I think you have a combination of like these reusable functionality or like things that, you know, like some of the AI can definitely spit out things that it's seen a lot. Yeah. And actually we even have like, you know, some templates. So, you know, we'll see how it goes. But I like this idea. I think it makes sense. You know, and maybe it is truly that above. And, you know, there were lots of attempts to have the next level of aggregation way back when Ada had a notion of packages and C Sharp had a notion of namespaces. And, you know, there have been other attempts and maybe there's an environment out there that I don't know about, which is entirely possible, that has done a great job of aggregating packages with their own interface and their own behavioral rules and so on.
1:25:46But, you know, if AI ends up being the way to achieve the next level of aggregation, that would kind of make sense.
1:25:53The Pragmatic Engineer Host:Well, maybe, but don't forget one thing that I think we just didn't, neither of us mentioned, a huge difference with AI and everything else that came before it is it's non-deterministic. And in programming, we have been used to, and I think we've gotten really good at making the most of deterministic. And non-determinism always has its dangers, its flaws, it's harder to work with. and often especially when you're a non-determinant system and you want a deterministic outcome you you need to do a bunch of work around that so so maybe that'll keep us busy for a while and sometimes it's not possible by the way as as closing uh you've had a long and successful career you've written a book that actually kicks turn in a lot of people's careers i had one of my uh colleagues from from one of my companies tell me that in their first first few years as a A developer actually served as a military and they read the book and it really helped them.
1:26:46The Pragmatic Engineer Host:What suggestions would you have for an engineer to have a durable career? Principles that worked for you, probably independent of technology. When I was writing the first edition of the book, one of the things I tried to keep firmly in mind was that the guiding principle for writing the book and the principle that answered every question was, does this make the book more valuable for the reader? And so there were some things that I kind of liked, but maybe were idiosyncratic to me. I ultimately decided that doesn't make it more valuable for the reader. So I left him out. Design elements of the book, content of the book, everything was about what makes this more valuable for the reader.
1:27:26And as I iterated on that over the course of writing the book, I think that iteration, with that in mind, just added up to something. And I think the same thing would, my career advice would be exactly the same. what makes you more valuable to your organization or to the world at large. And, you know, it's not like anybody, I would think someone's a bad person if they don't think that way. But if everything you're doing is just to scratch some personal itch, it's idiosyncratic, you're interested in it, but it doesn't add up to something, just be aware that that's, you know, that's a lost opportunity.
1:28:07And if, on the other hand, every time you think about, well, what project should I do next? What do I want to do next in the organization? Sometimes you don't get a choice. Sometimes you do get a choice between option A and option B. Does option B open up more doors possibly than option A? Well, maybe you should choose option B for that reason. Does one of them make you more valuable? You know, choose it for that reason. And I don't think this is just about personal development or personal success. I think it's about making the world better. If you're making yourself more valuable, you're increasing your ability to contribute to the world.
1:28:44And I think that's a virtuous thing.
1:28:46The Pragmatic Engineer Host:And you close the book with how you emphasize how craftsmanship is important for professional growth. And you write how curiosity, continuous learning are essential traits of great software engineers. And to me, it feels this is just as relevant as ever. I just think it's part of the human experience, and I think that programmers, probably more than average, are curious people who like to learn, who are attracted to novelty, who want to learn what's new and what's cool, and who want to explore what's possible with what's new and cool. A lot of our conversation today about AI has been all about exploring what's possible with what's new and cool.
1:29:27I think this is just the way programmers are, and I wouldn't change that.
1:29:31The Pragmatic Engineer Host:Steve, it's been both a really good conversation and a privilege. Thank you so much. Thanks so much for having me. It was such a blast to interview Steve. After the interview, we grabbed dinner at one of his favorite local restaurants. And he told me more about why he decided to make a shift and leave the software industry after a successful 30 plus year career to try something different. Steve's energy levels, positivity and thoughtfulness run deep. And I hope this came across through the podcast as well. For more observations on how the software engineering industry has changed the last few decades, check out Related Deep Dives into the Pragmatic Engineer, which are linked in the show notes below.
1:30:05The Pragmatic Engineer Host:If you've enjoyed this podcast, please do subscribe on our favorite podcast player and on YouTube. This helps more people discover the podcast and a special thank you if you leave a rating. Thanks and see you in the next one.
From the publisher
Brought to You By:
• Statsig — The unified platform for flags, analytics, experiments, and more. Statsig built a complete set of data tools that allow engineering teams to measure the impact of their work. This toolkit is SO valuable to so many teams, that OpenAI - who was a huge user of Statsig - decided to acquire the company, the news announced last week. Talk about validation! Check out Statsig.
• Linear – The system for modern product development. Here’s an interesting story: OpenAI switched to Linear as a way to establish a shared vocabulary between teams. Every project now follows the same lifecycle, uses the same labels, and moves through the same states. Try Linear for yourself.
—
The Pragmatic Engineer Podcast is back with the Fall 2025 season. Expect new episodes to be published on most Wednesdays, looking ahead.
Code Complete is one of the most enduring books on software engineering. Steve McConnell wrote the 900-page handbook just five years into his career, capturing what he wished he’d known when starting out. Decades later, the lessons remain relevant, and Code Complete remains a best-seller.
In this episode, we talk about what has aged well, what needed updating in the second edition, and the broader career principles Steve has developed along the way. From his “career pyramid” model to his critique of “lily pad hopping,” and why periods of working in fast-paced, all-in environments can be so rewarding, the emphasis throughout is on taking ownership of your career and making deliberate choices.
We also discuss:
• Top-down vs. bottom-up design and why most engineers default to one approach
• Why rewriting code multiple times makes it better
• How taking a year off to write Code Complete crystallized key lessons
• The 3 areas software designers need to understand, and why focusing only on technology may be the most limiting
• And much more!
Steve rarely gives interviews, so I hope you enjoy this conversation, which we recorded in Seattle.
—
Timestamps
(00:00) Intro
(01:31) How and why Steve wrote Code Complete
(08:08) What code construction is and how it differs from software development
(11:12) Top-down vs. bottom-up design approach
(14:46) Why design documents frustrate some engineers
(16:50) The case for rewriting everything three times
(20:15) Steve’s career before and after Code Complete
(27:47) Steve’s career advice
(44:38) Three areas software designers need to understand
(48:07) Advice when becoming a manager, as a developer
(53:02) The importance of managing your energy
(57:07) Early Microsoft and why startups are a culture of intense focus
(1:04:14) What changed in the second edition of Code Complete
(1:10:50) AI’s impact on software development: Steve’s take
(1:17:45) Code reviews and GenAI
(1:19:58) Why engineers are becoming more full-stack
(1:21:40) Could AI be the exception to “no silver bullets?”
(1:26:31) Steve’s advice for engineers on building a meaningful career
—
The Pragmatic Engineer deepdives relevant for this episode:
• What changed in 50 years of computing
• The past and future of modern backend practices
• The Philosophy of Software Design – with John Ousterhout
• AI tools for software engineers, but without the hype – with Simon Willison (co-creator of Django)
• TDD, AI agents and coding – with Kent Beck
—
Production and marketing by https://penname.co/. For inquiries about sponsoring the podcast, email podcast@pragmaticengineer.com.
Get full access to The Pragmatic Engineer at newsletter.pragmaticengineer.com/subscribe




