October 13, 2026Main stage4 min read

Does Code Quality Even Matter?

Cheap code makes some programs disposable. For the systems people will keep changing, Max Kanat-Alexander argues that AI should make engineering rigor cheaper too.

Max Kanat-AlexanderCapital OnePrincipal Software Engineer

From the conference livestream · 0:43:51–0:59:57 on YouTube. The player starts and stops at this session’s boundaries.

0:44:36 ↗

What quality buys

A program that prints “Hello World” is easy to understand and change. Ask it to print “Hi World,” and there is little room for misunderstanding. Chromium is a different proposition: its components can interact in too many ways to describe the whole system’s behavior in a short explanation.

Max Kanat-Alexander starts the code-quality debate by asking why quality mattered in the first place. His answer has two parts: understanding a system and acting successfully on that understanding. Tests, debuggers, observability, and evaluations help with those jobs.

For an engineer, the crucial questions are what the system actually does and how to change that behavior safely. A component such as Chromium’s URL parser has an identity and a behavior that can be described. That structure allows reasoning to happen at a manageable scale.

Code quality gives the system recognizable parts. When the URL parser has a clear job, an engineer can reason about changing it without understanding all of Chromium at once. A pile of instructions might produce the same output today; its structure determines how hard tomorrow’s change will be. Watch the structure argument at 0:46:09.

0:48:23 ↗

The cost compounds when software must change

Every modification carries two kinds of risk. It can cause a problem now: a bug, unexpected behavior, a budget overrun, or a project that takes much longer than expected. It can also make future changes more dangerous by making the system harder to understand.

The second feeds the first. If each change adds confusion, the next change starts from a worse position. Eventually even small modifications become expensive and uncertain. Engineering rigor pays for itself by slowing that accumulation of confusion.

Arguments about future models understanding arbitrary complexity do not settle what to do today. AI coding tools are already changing another variable: the cost of replacing a program. Some software can now be created for a narrow purpose and thrown away when that purpose ends.

0:50:58 ↗

A spectrum of disposability

Imagine software with minimal consequences of failure, few users and dependencies, almost no maintenance burden, and a replacement cost of hours rather than months. A personal calculator or a tool for one children’s party fits the idea. If it fails, rebuilding or abandoning it may be the right response.

That is disposable software. The long-term risks that justify extensive engineering effort are small because there may be no long term to protect. A system used by thousands of people, relied on by other systems, and capable of causing serious business harm sits at the other end of the spectrum.

Kanat-Alexander uses four factors to reason about the difference:

  • Consequences of failure: what happens when the software breaks?
  • Replacement cost: how difficult is it to discard and recreate?
  • Dependencies: who and what relies on it?
  • Maintenance cost: how much continuing work does it demand?

How much rigor a program needs depends on where it sits along this spectrum.

A spectrum links more disposable software with less rigor, and more durable software with more rigor.

At 0:53:08, disposability changes the amount of engineering effort worth investing. It is a continuum, not a certification that a program can never become important.

The categories are not permanent labels. A tool can become more important than expected, and experienced engineers should be cautious about assuming a system will remain disposable. He expects lasting systems to remain important, even if short-lived software becomes much more numerous.

Teams can also deliberately increase disposability. Put a tool in an isolated environment with only the user’s own data. Prevent production systems from depending on it. Keep a reliable older system available while people experiment with a more convenient frontend. Limit the purpose to one person or one event. These choices reduce the cost of failure instead of merely hoping failure will be harmless. Watch the examples at 0:53:36.

0:55:46 ↗

Make rigor the cheap path

There is another axis besides how much rigor a program needs: how much that rigor costs. Reducing the cost makes it easier to recover when a supposedly disposable tool becomes important.

Standardization helps by removing possibilities that every team would otherwise need to manage. Supporting fewer languages, frameworks, and protocols means fewer combinations of security practices, linters, and operational knowledge. The reason is economic: each extra option makes consistent engineering more expensive.

Tooling should also work inside the normal development workflow. A fast, reliable check with few false positives can run without requiring the programmer to decide to use it or become an expert in its implementation. When it feels nearly free, it can help even with disposable software.

Testing infrastructure is part of the same work. Engineers should not have to solve test speed and determinism from scratch for every project. Kanat-Alexander gives in-memory service fakes as an example of infrastructure coding agents can help produce. Someone still has to decide to provide those fakes and make them available to other teams.

Finally, strong defaults avoid expensive cleanup later. Enabling lint rules early can eliminate repeated arguments and prevent a huge retrofit across an established codebase. His endorsement of strictness comes with a practical condition: the tooling’s false positives must remain low enough that it does not create serious harm of its own.

For software that is truly disposable, Kanat-Alexander is willing to say code quality does not matter. For software that must last, it does. His challenge to engineering teams is to make the useful checks so cheap that even a disposable tool can afford them.

Full transcript 285 timestamped passages

Machine transcription with reviewed terminology and names. Some recognition errors may remain. Timestamps refer to the livestream; subtitle downloads are timed to the session clips.

0:43:52All right.

0:43:53So today I figured I'd pick a nice uncontroversial topic that nobody has any opinions about.

0:43:59Right?

0:44:00Nobody has said anything on this about social media.

0:44:04And of course every take about this on social media is really deeply nuanced.

0:44:10People have lots of depth and really big thoughts.

0:44:13You know, maybe there's a little bit more to it than like yes or no.

0:44:18And, you know, of course, if you ever ask a senior engineer a question, we always have

0:44:22the same answer to every question, every senior engineer's favorite answer to every question,

0:44:26which is, it depends.

0:44:30Now, that's not a very helpful answer, though, frankly, because what does it depend on?

0:44:36So let's start with this.

0:44:38Why did code quality ever matter in the first place?

0:44:41I see a lot of people be like, well, it made me feel good.

0:44:44That's not really a sufficient justification.

0:44:46So let's see if we can inject some nuance into this conversation and help everybody at

0:44:50least be able to have a basis for reasoning about it while we're discussing it.

0:44:54So let's see if we can make a framework here.

0:44:56That's what we're going to try to do with this talk.

0:44:59So we're going to start off with everything you want to ever accomplish with a piece of

0:45:02software depends on two factors and two factors alone.

0:45:06And that is understanding and executing on that understanding.

0:45:09Whether that's aligning a model, scaling a system, driving adoption, anything, all software

0:45:14success is determined by these two factors.

0:45:17This is why we have things like debuggers and observability and evals and even tests.

0:45:21All those things actually are there to improve your understanding or ability to execute on

0:45:25that understanding.

0:45:25People think that they're there for other reasons, but fundamentally they're there for that reason.

0:45:30Everything we have ever done in the field of code quality is exclusively and only for

0:45:36these two things.

0:45:37It's not for anything else.

0:45:39And that doesn't have something to do with correctness or something else.

0:45:41It has to do only with these two things.

0:45:44Now, there's two understandings that are the most important to have

0:45:46if you're going to be a software engineer.

0:45:48There are other understandings to have about software,

0:45:50if you're going to be a product, if you're going to be in sales.

0:45:52But if you're a software engineer, there's the two that are the most important.

0:45:55And the first is, what is the behavior of the system?

0:45:58Like, concretely, not what does a doc say the behavior of the system is,

0:46:02but what is the actual behavior of the system?

0:46:04And the second one is, how do I correctly and safely modify that behavior?

0:46:11On a very small system, if you want to understand what the system does,

0:46:16I just tell you what it does.

0:46:18It prints hello world.

0:46:19You say, I wanted to say hi world.

0:46:21I say, okay, I will make it say hi world now.

0:46:23There's very little to understand about it other than purely what it does.

0:46:28That's all of the understanding that you need.

0:46:30However, any real software system is enormously complex.

0:46:34This is a real map of the code base of Chromium,

0:46:39which is the open source project behind Chrome.

0:46:42And if you think about all of the different ways

0:46:45that these components can interact,

0:46:46they have essentially infinite possible behaviors.

0:46:50Like, I could not describe to you in words

0:46:53the behavior of Chromium as a whole, as a system.

0:46:58However, what I can describe to you, and as we all know, everybody's been a software engineer

0:47:02for a while, I can describe to you components of the system.

0:47:06I can successfully describe to you how a component of the system behaves.

0:47:11So this is the URL parser, the actual functions and stuff for the URL parser of Chromium.

0:47:16It figures out all the different parts of the URL.

0:47:19And this is the whole reason that code exists.

0:47:25The whole reason that we have code at all in the first place is for structure.

0:47:32What do I mean by that?

0:47:35Both of these two things on the left and on the right will print Hello World if run on

0:47:40a Linux machine.

0:47:42However, on the left you can see that it is Hello World.

0:47:46It has the identity and structure of Hello World.

0:47:50On the right, you just see a series of instructions with no particular identity, recognizable

0:47:55or understandable identity.

0:47:57It's not a component.

0:47:58It's just a bunch of instructions.

0:48:00While that's understandable there, if that was millions or billions of lines of that,

0:48:04it would be much harder to grok.

0:48:06In the past, we've talked about things like readability or testability or things that

0:48:11seemed like human concepts about code.

0:48:14But what actually mattered the most always was that the system had some sort of understandable

0:48:19structure.

0:48:19So it's the structure that actually matters.

0:48:23And when this matters the most is when you want to modify the system, the second understanding

0:48:30that we talked about.

0:48:32All modifications to a system carry two categories of risk.

0:48:35The first is that you will introduce some sort of problem.

0:48:38And a problem isn't just a bug, it's anything bad that could happen.

0:48:42Like your project could take much longer than you expect.

0:48:44It could not behave in the way that you wanted it to for your users.

0:48:48The project could fail because you have budget overruns.

0:48:50Any kind of problem could happen from just you trying to go through the process of making this change.

0:48:55And the second is you could make it harder to make future changes.

0:49:00In particular, what that means is you could make it more likely to have future problems.

0:49:03You could increase future risk of the system.

0:49:06These two things are caused by problems with understanding.

0:49:12So the first has to do with the difficulty of understanding the system in the first place.

0:49:17And the second is you make the system harder to understand.

0:49:21can reduce every post-mortem I have ever read for any incident to these two factors

0:49:27in one way or another.

0:49:29The production configuration was too hard to understand.

0:49:31Somebody made something impossible to understand.

0:49:33There were emergent properties of the system that were impossible to understand.

0:49:36Whatever.

0:49:37Point two feeds into point one in a vicious cycle that compounds in a non-linear fashion.

0:49:47So the difficulty of understanding does not grow linearly, it compounds over time.

0:49:52You will eventually reach a point, and all systems eventually tend to reach this point,

0:49:57where every modification involves some sort of problem.

0:50:04Some systems get to the point where you can't modify them at, if you think of your giant

0:50:10100 million, 500 million line mainframe code bases, everything, every change is some sort

0:50:16of problem.

0:50:16You'll see it in organizational issues, you'll see it all over the place, you'll see it in

0:50:20timelines, whatever.

0:50:22And look, there's a lot of arguments about maybe future models will fix this.

0:50:25Look, maybe they will, maybe future models will have infinite ability to deal with complexity

0:50:29somehow.

0:50:30But we don't have to discuss that today because I think models are doing something else really

0:50:35interesting right now.

0:50:37They are creating a new kind of software, a new category of software.

0:50:42This category has always existed, but it's about to become 100,000 times more common

0:50:49than any other form of software, and that is disposable software.

0:50:56So what is that?

0:50:58Okay, so imagine a world in which the consequences of failure for your system are very minimal

0:51:04or nonexistent.

0:51:06Imagine that there's very few people that depend on it, and almost no other systems depend

0:51:10on that piece of software.

0:51:12Change management, very minimal, non-existent.

0:51:15Imagine the cost of replacement went to near zero.

0:51:19You could replace the whole thing in hours or days.

0:51:22And it had basically no cost of maintenance.

0:51:25In that world, code quality does not matter.

0:51:32Because all of those things we were trying to prevent

0:51:35about the compounding risks over time don't exist.

0:51:41Traditionally, we've always built durable software.

0:51:45lives for years, it's depended on millions or thousands of people, there's huge consequences

0:51:50of failure, potentially business catastrophic consequences of failure, and it requires enormous

0:51:55maintenance.

0:51:56Most of the software engineers in the world spend most of their time maintaining these

0:52:00giant durable systems.

0:52:02I expect this to continue to exist.

0:52:05So this is one of the areas where I think sometimes the conversation goes a little astray.

0:52:10Durable systems will continue to probably be the most important systems in the world.

0:52:17And there will be probably more of them.

0:52:20But the most numerous systems will be disposable software.

0:52:26They will be replaceable in hours.

0:52:28They will be depended on by a few.

0:52:29Or change management just won't matter.

0:52:31And look, if it doesn't work, we'll give everybody agents.

0:52:35They'll make a version of it themselves.

0:52:38Maintenance will be unimportant or nearly free.

0:52:40Don't like the calculator on your OS?

0:52:42Make your own.

0:52:43Want to plan a party for your kids?

0:52:45Write a party planner software just for that one party.

0:52:49Throw it away.

0:52:50Code quality doesn't matter.

0:52:51Nobody cares.

0:52:53In the future, we will apply engineering rigor to the degree of disposability of the software.

0:53:00On the left, nothing, none of our practices of engineering rigor matter at all.

0:53:06On the right, all the practices of engineering that we have built up over the last many decades

0:53:11matter greatly.

0:53:12We can determine where you are on this scale by those four factors that I have been talking

0:53:17about.

0:53:18Consequences, cost of replacement, dependencies, and cost of maintenance.

0:53:22If they're all low, it's

0:53:23disposable software. If they're all high, it's durable software.

0:53:27And look, any person who's written software for a long time knows you should err on the side of it being durable. You should err on these all being higher than you expect them to be.

0:53:36But there's also a new thing you can do in the world. You can make software more disposable. So, like, what does that involve?

0:53:46Well, come up with better isolated environments.

0:53:50So, hey, you can only deploy to this environment that has access to only your data.

0:53:54No customer data, no personally identifiable information, whatever.

0:53:58You can enforce independence.

0:54:00You can say, okay, no inbound API calls from other production systems are allowed to this

0:54:06system in this environment.

0:54:07And so everything deployed to that environment is disposable.

0:54:11Redundancy.

0:54:11You can have an old clunky backup system that is hard to use.

0:54:16And then, look, if people want to vibe code their own more efficient front ends,

0:54:19you let them vibe code their own more efficient front ends

0:54:21because there is an old, durable, clunky backup system that they can use

0:54:25if their crappy little vibe-coded thing fails.

0:54:28Which it will fail. That's fine. But it doesn't matter if it fails.

0:54:32And you can limit scope, just like I talked about.

0:54:34It's just a calculator for this one person.

0:54:36It just plans this one party.

0:54:38There's so much more we could do here and talk about ways of increasing disposability.

0:54:45In fact, I think this is a whole new discipline of software engineering.

0:54:50Not to think about how we improve the rigor of durable systems, but how do we take our

0:54:55systems and how do we encourage disposability or allow more disposability, allow people

0:55:00to throw these things away.

0:55:02Interesting thought.

0:55:03Now, I want to re-emphasize that durable software engineering is not going away because this

0:55:10is the biggest confusion that I see on social media today.

0:55:14In fact, I believe the absolute amount of durable software in the world will increase

0:55:18because AI coding tools make it easier and easier to make more durable software.

0:55:25another important thing to understand is that disposable and durable are not black

0:55:30and white.

0:55:31There's a spectrum, like I showed before, but that spectrum, what changes across the

0:55:35spectrum is how much effort you're going to put into engineering rigor.

0:55:39Okay?

0:55:40And that's both immediate effort and effort over time, just like we've always talked about

0:55:44for software.

0:55:46However, what you want to do, and I think what you want to care about the most, is reducing

0:55:51the cost of effort.

0:55:53Reducing the cost of rigor.

0:55:56like if rigor is cheaper if it's the easier and easier you make it to be rigor the less you have

0:56:02to worry about where you are on the scale so this is another approach you can take

0:56:07if you change your mind it's much easier to like you're like oh i thought this was going to be

0:56:12disposable and now it needs to be durable the cheaper you make it to make it durable the easier

0:56:17it is to change your mind or to be wrong because you're never going to be 100 right all the time

0:56:22on that estimate. So that involves a different set of practices that are not engineering

0:56:27rigor themselves, but that are about how to decrease the cost of engineering rigor.

0:56:34Now, I could talk about this for hours. I have spent a tremendous amount of my career

0:56:38doing this. I don't have 10 hours. I have about five minutes left on that timer. So

0:56:43I'll talk about what I can, okay? Let's talk about standardization. Why do we do standardization?

0:56:50People are like, well, I don't know, because the boss said so.

0:56:52Well, no.

0:56:54We do standardization because it removes possibilities.

0:56:58If you don't have any PHP in your system,

0:57:01you don't have to figure out what are all the linters for PHP,

0:57:04what are all the practices, what are all the security holes I have to fix.

0:57:07You just eliminate possibilities through standardization,

0:57:10and it just reduces the cost of rigor.

0:57:13Same thing with frameworks.

0:57:15Why don't you want to have every front-end framework

0:57:17or every back-end framework in existence?

0:57:19because it makes rigor more expensive.

0:57:21Like, yes, rigor is still possible.

0:57:22Yes, you could still have the agent code up all your tools,

0:57:24but you have to do it every single time.

0:57:27You know, protocols,

0:57:29why do you want to have standardized RPC protocols?

0:57:30All the same thing.

0:57:32Standards are all for this reason.

0:57:34Okay?

0:57:35What I call in-workflow tooling.

0:57:36So in-workflow tooling is tooling that just occurs.

0:57:38The programmer doesn't have to choose to run it.

0:57:40They don't have to understand how it runs.

0:57:42It just happens.

0:57:43If it's there, it feels and seems free,

0:57:46and it is reliable.

0:57:48Reliability is very, very important.

0:57:50It doesn't have a ton of false positives.

0:57:51It's fast. It just happens.

0:57:54And the more that's true, you can apply it to your disposable software too.

0:57:57If it's free and fast, who cares?

0:58:01Making testing easier.

0:58:02So this is not just about, like, hey, how do we do better testing?

0:58:05Look, how do you make it so that nobody has to think about how to do better testing?

0:58:09How do you make it so that every test is fast and deterministic

0:58:14without anybody having to be a deep expert in testing?

0:58:16There's a ton of work that you have to put into test infrastructure to make that possible.

0:58:22For example, one of the great dreams that I've always had as a test owner is that everybody

0:58:27would provide in-memory fake versions of their services and I could just run those in-memory

0:58:31fake versions of their services.

0:58:32Guess what?

0:58:33The coding agent can do that.

0:58:34So you can just do that now.

0:58:36But you have to choose to do it and make it available to everybody.

0:58:40And another thing is, look, maximum strictness.

0:58:43You just turn the strictness up everywhere.

0:58:44You set all your lint rules to maximum.

0:58:47You never compromise on anything.

0:58:49And it eliminates, it's very similar to standardization.

0:58:52It eliminates a ton of conversations.

0:58:54Sometimes the linter is wrong.

0:58:55As long as the false positive rate is relatively low and doesn't have catastrophic consequences,

0:58:58it doesn't matter because all of a sudden there's a bunch of future lint errors or future

0:59:03issues that you don't have to deal with.

0:59:04Ask anybody who's been like, oh, I suddenly want to turn on my linter in this million

0:59:08line code base.

0:59:09And they're like, oh, wow.

0:59:10Now here's my 100,000 line change that I need to make.

0:59:13Much easier to do that up front and have it on for everybody.

0:59:16Now look, like I said, I could literally stand here and talk to you about this straight for

0:59:21ten hours.

0:59:21There is much, much more you can do here.

0:59:24This is just a few areas, but also a whole area of software engineering discipline that

0:59:28you can apply on the other axis.

0:59:31So this lets us now answer our question, not just it depends, but yes or no.

0:59:37So does code quality even matter?

0:59:40For disposable software, no.

0:59:44For durable software, yes.

0:59:47And we get to answer a third and even more interesting question,

0:59:50which is, does it have to be expensive?

0:59:53No.

0:59:54Thank you very much.