Does Code Quality Still Matter? It Depends on This — Max Kanat-Alexander, Capital One
Read full transcript 14 segments
-
So, today I So, today I decided to choose a decided to choose a decided to choose a pleasant, pleasant, pleasant, non-conflictual topic that no non-conflictual topic that no non-conflictual topic that no one one one has any opinions about. Is has any opinions about. Is has any opinions about. Is n't that right? Nobody n't that right? Nobody n't that right? Nobody said anything about it on said anything about it on said anything about it on social media, social media, social media, you know, and of course, you know, and of course, you know, and of course, every opinion on this every opinion on this every opinion on this issue on social media is issue on social media is issue on social media is very deep and very deep and very deep and considered, people have considered, people have considered, people have a lot of thoughts and a lot of thoughts and a lot of thoughts and serious reflections. serious reflections. You know, maybe there's You know, maybe there's a little more to it than a little more to it than a little more to it than just "yes" or "no." just "yes" or "no." just "yes" or "no." And you know, of course, And you know, of course, And you know, of course, if you ever if you ever if you ever ask a senior ask a senior ask a senior engineer about anything, we engineer about anything, we engineer about anything, we always have the same always have the same always have the same answer to answer to answer to any question. any question. Every senior Every senior engineer's favorite answer to any engineer's favorite answer to any engineer's favorite answer to any question is: "it depends. question is: "it depends. question is: "it depends. " " " Honestly, this is not a very Honestly, this is not a very Honestly, this is not a very useful answer, because useful answer, because useful answer, because what exactly does it what exactly does it what exactly does it depend on? So let's start depend on? So let's start depend on? So let's start with this. Why did with this. Why did with this. Why did code quality ever code quality ever code quality ever matter at all? I see matter at all? I see matter at all? I see many people saying, " many people saying, " Well, that made me feel Well, that made me feel Well, that made me feel good." This is not good." This is not good." This is not quite a sufficient quite a sufficient quite a sufficient excuse. So excuse. So excuse. So let's try to add let's try to add let's try to add a little nuance to this a little nuance to this a little nuance to this conversation and help conversation and help conversation and help everyone at least everyone at least everyone at least get a basis for get a basis for get a basis for reasoning during the reasoning during the reasoning during the discussion. discussion. discussion. Let's try to create Let's try to create Let's try to create some structure here. This is exactly what some structure here. This is exactly what some structure here. This is exactly what we we we will try to will try to will try to do in this do in this do in this report. OK.
-
report. OK. report. OK. Let's start by saying that everything Let's start by saying that everything you want you want you want to achieve with to achieve with to achieve with software software depends on two depends on two factors, and only factors, and only factors, and only two. It is two. It is two. It is understanding and understanding and understanding and putting that putting that putting that understanding into understanding into understanding into practice. Whether it's practice. Whether it's practice. Whether it's model alignment, model alignment, system scaling, system scaling, driving driving driving adoption, or anything adoption, or anything else. The success of else. The success of any software any software is determined by these is determined by these two factors. That's two factors. That's two factors. That's why we have things why we have things like debuggers, like debuggers, like debuggers, observability, observability, observability, evaluations, and even tests evaluations, and even tests . All of these tools are . All of these tools are . All of these tools are actually there to actually there to improve your improve your understanding or understanding or understanding or ability to act ability to act ability to act on it. on it. on it. People think they People think they People think they exist for other exist for other exist for other reasons, but reasons, but reasons, but fundamentally they fundamentally they fundamentally they exist for this very reason exist for this very reason exist for this very reason . Everything we've ever . Everything we've ever done in the area of done in the area of done in the area of code quality has code quality has code quality has been focused solely been focused solely been focused solely on these two things. It's for nothing on these two things. It's for nothing on these two things. It's for nothing else. This else. This else. This has nothing to do with has nothing to do with has nothing to do with correctness or correctness or correctness or anything else. It anything else. It anything else. It only has to do with these only has to do with these only has to do with these two things. So, there are two things. So, there are two things. So, there are two types of understanding two types of understanding two types of understanding that are most important for a that are most important for a that are most important for a software engineer software engineer . There are other aspects of . There are other aspects of . There are other aspects of understanding understanding software if you software if you work with product work with product work with product or in sales, but for a or in sales, but for a or in sales, but for a software engineer, software engineer, software engineer, these two are the these two are the these two are the most important. And most important. And most important. And first—what is the behavior of first—what is the behavior of first—what is the behavior of this system? this system? this system? Specifically, not what the Specifically, not what the Specifically, not what the documentation says documentation says documentation says about the about the about the system's behavior, but what the system's behavior, but what the system's behavior, but what the actual behavior of the actual behavior of the actual behavior of the system is. And secondly, how do system is. And secondly, how do system is. And secondly, how do I I I change this change this change this behavior correctly and safely, okay?
-
behavior correctly and safely, okay? In a very small In a very small system, if you system, if you system, if you want to understand what want to understand what want to understand what it does, I just it does, I just it does, I just tell you what it does. tell you what it does. tell you what it does. It prints "hello world It prints "hello world ". You say, "I want it to ". You say, "I want it to ". You say, "I want it to say 'hi world' say 'hi world' ." I reply: " ." I reply: " Okay, now I'll make it Okay, now I'll make it Okay, now I'll make it say ' say ' hi world'." There's almost hi world'." There's almost hi world'." There's almost nothing to nothing to nothing to understand here, except for what understand here, except for what understand here, except for what it does. it does. it does. That's all the understanding That's all the understanding That's all the understanding you need. However, you need. However, you need. However, any real any real any real software system is software system is software system is extremely complex. extremely complex. This is a real-world map of the This is a real-world map of the Chromium codebase, the Chromium codebase, the Chromium codebase, the open source project open source project open source project that underlies that underlies that underlies Chrome. And if you think Chrome. And if you think Chrome. And if you think about all the different ways about all the different ways about all the different ways these these these components interact, they components interact, they components interact, they have a virtually have a virtually have a virtually infinite infinite infinite number of possible number of possible number of possible behaviors. behaviors. For example, I couldn't For example, I couldn't describe to you describe to you describe to you in words the behavior of in words the behavior of in words the behavior of Chromium as a whole Chromium as a whole Chromium as a whole system. However, what I system. However, what I system. However, what I can describe, and as we can describe, and as we can describe, and as we all know—anyone all know—anyone all know—anyone who's been a who's been a software engineer for a software engineer for a software engineer for a while—I can describe to while—I can describe to while—I can describe to you the components of the you the components of the you the components of the system. I can system. I can system. I can successfully describe to you successfully describe to you successfully describe to you how a how a how a system component behaves.
-
system component behaves. system component behaves. Here is the URL parser, Here is the URL parser, Here is the URL parser, actual functions and actual functions and actual functions and more for the URL parser in more for the URL parser in more for the URL parser in Chromium. It defines Chromium. It defines Chromium. It defines all the different parts of a URL. all the different parts of a URL. And that's the only reason the And that's the only reason the code exists. The whole code exists. The whole code exists. The whole reason we reason we reason we have code at all have code at all have code at all is for structure. is for structure. That's because...What do I That's because...What do I mean? OK. So mean? OK. So , both of these things, , both of these things, , both of these things, on the left and on the right, on the left and on the right, on the left and on the right, will output "Hello World" will output "Hello World" will output "Hello World" if run on if run on if run on Linux. However, on the left you Linux. However, on the left you Linux. However, on the left you see that it is "Hello World" see that it is "Hello World" . It has . It has . It has the identity and the identity and the identity and structure of "Hello World". structure of "Hello World". structure of "Hello World". On the right, you see On the right, you see On the right, you see simply a series simply a series simply a series of instructions without of instructions without of instructions without any distinct, any distinct, any distinct, recognizable, or recognizable, or recognizable, or understandable understandable understandable identity. It's not a identity. It's not a identity. It's not a component, it's just a component, it's just a component, it's just a set of instructions. set of instructions. set of instructions. While it's understandable there While it's understandable there , if it were , if it were , if it were millions or billions of millions or billions of millions or billions of lines of such code, lines of such code, lines of such code, it would be much it would be much it would be much harder to comprehend. In harder to comprehend. In harder to comprehend. In the past, we talked the past, we talked the past, we talked about things like about things like about things like readability or readability or readability or testability, or testability, or testability, or things that seemed like things that seemed like things that seemed like human human human concepts of code, but concepts of code, but concepts of code, but in reality, the in reality, the in reality, the most important thing most important thing most important thing was always that the system was always that the system was always that the system had a clear had a clear had a clear structure. So, it's the structure. So, it's the structure. So, it's the structure that really structure that really structure that really matters. And this is the matters. And this is the matters. And this is the most important thing when most important thing when most important thing when you want to you want to you want to change the system—this is the change the system—this is the change the system—this is the second understanding second understanding second understanding we talked about. All we talked about. All we talked about. All system modifications system modifications system modifications carry two categories of carry two categories of carry two categories of risks. The first is that risks. The first is that risks. The first is that you you you will create some kind of will create some kind of will create some kind of problem, and a problem problem, and a problem is not just a is not just a is not just a mistake, it is anything mistake, it is anything mistake, it is anything bad that can
-
bad that can bad that can happen. For example, happen. For example, happen. For example, your project may your project may your project may take much take much take much longer than you longer than you longer than you expect. It may expect. It may expect. It may not behave the way not behave the way not behave the way you intended for your you intended for your you intended for your users. The project users. The project users. The project may fail may fail may fail due to due to due to budget overruns. Any budget overruns. Any budget overruns. Any problem may problem may problem may arise simply arise simply arise simply while trying to go through the while trying to go through the while trying to go through the process of making this process of making this process of making this change. And second, you change. And second, you change. And second, you may make it difficult to may make it difficult to may make it difficult to make future make future make future changes. Specifically, this changes. Specifically, this changes. Specifically, this means you may means you may means you may increase increase increase the likelihood of the likelihood of the likelihood of future future future problems. You may problems. You may problems. You may increase future increase future increase future risks to the system. risks to the system. These two things are These two things are caused by caused by caused by problems with problems with problems with understanding. So understanding. So understanding. So the first is related to the first is related to the first is related to the difficulty of understanding the the difficulty of understanding the the difficulty of understanding the system from the system from the system from the beginning, and the second is that you beginning, and the second is that you beginning, and the second is that you make the system make the system make the system more difficult to more difficult to more difficult to understand. I can understand. I can understand. I can boil down every boil down every boil down every postmortem I've ever postmortem I've ever read about read about read about any incident any incident any incident to these two factors: to these two factors: to these two factors: either the either the either the product configuration was too product configuration was too product configuration was too difficult to understand, difficult to understand, difficult to understand, someone did something someone did something someone did something impossible to impossible to impossible to understand, there were understand, there were understand, there were system properties system properties system properties that were impossible that were impossible that were impossible to comprehend, etc. to comprehend, etc. The second point The second point feeds the first in a feeds the first in a feeds the first in a vicious circle that is vicious circle that is vicious circle that is amplified amplified amplified nonlinearly. Therefore, nonlinearly. Therefore, nonlinearly. Therefore, the complexity of understanding the complexity of understanding the complexity of understanding does not increase linearly, does not increase linearly, does not increase linearly, it accumulates over it accumulates over it accumulates over time. You will eventually time. You will eventually time. You will eventually reach a point, and reach a point, and reach a point, and all systems eventually all systems eventually all systems eventually tend to reach tend to reach tend to reach that point, where that point, where that point, where every modification every modification every modification entails some kind of entails some kind of entails some kind of problem. And you know, problem. And you know, problem. And you know, some systems some systems some systems get to the point where get to the point where get to the point where they're impossible to change, they're impossible to change, they're impossible to change, if you think about, if you think about, if you think about, for example, the for example, the for example, the giant giant giant mainframe codebases of
-
mainframe codebases of mainframe codebases of 100-500 million lines 100-500 million lines , where every change is a , where every change is a , where every change is a problem. You'll problem. You'll problem. You'll see it in see it in see it in organizational organizational organizational matters, you'll see matters, you'll see matters, you'll see it everywhere, you'll see it everywhere, you'll see it everywhere, you'll see it in deadlines, in anything it in deadlines, in anything it in deadlines, in anything . And look, . And look, . And look, there are many arguments that there are many arguments that there are many arguments that maybe maybe maybe future models future models future models will fix this. Look, will fix this. Look, will fix this. Look, maybe they'll fix it maybe they'll fix it . Perhaps future . Perhaps future . Perhaps future models will somehow models will somehow models will somehow have an unlimited have an unlimited have an unlimited ability ability ability to handle to handle to handle complexity. But we complexity. But we complexity. But we don't need to don't need to don't need to discuss that discuss that discuss that today, because I today, because I today, because I think models think models think models are doing something different now are doing something different now are doing something different now , something very interesting. , something very interesting. They are creating a new They are creating a new kind of kind of kind of software, a new software, a new software, a new category of software. This category of software. This category of software. This category has category has category has always existed, but it is about to always existed, but it is about to become a hundred thousand become a hundred thousand become a hundred thousand times more common than times more common than times more common than any other form of any other form of software. And this is disposable disposable disposable software. So, software. So, software. So, what is it? OK. what is it? OK. what is it? OK. Imagine a world where Imagine a world where Imagine a world where the consequences of your the consequences of your the consequences of your system failure are system failure are system failure are minimal or minimal or minimal or nonexistent. nonexistent. nonexistent. Imagine that Imagine that Imagine that very few very few very few people depend on it, or almost no people depend on it, or almost no people depend on it, or almost no other systems other systems other systems depend on that depend on that depend on that piece of piece of piece of software.
-
software. software. Change management is Change management is minimal or minimal or minimal or non-existent. Imagine that the non-existent. Imagine that the non-existent. Imagine that the replacement cost replacement cost replacement cost has become almost zero. has become almost zero. has become almost zero. You can replace You can replace You can replace everything in a matter of hours everything in a matter of hours everything in a matter of hours or days. And it requires almost no or days. And it requires almost no maintenance costs. In maintenance costs. In such a world, such a world, such a world, code quality doesn't matter. code quality doesn't matter. Because all those risks of Because all those risks of accumulating problems accumulating problems accumulating problems that we tried to that we tried to that we tried to prevent disappear. prevent disappear. Traditionally, we have always Traditionally, we have always built built built durable durable durable software. You know, software. You know, software. You know, it lives for years. it lives for years. Millions or thousands of Millions or thousands of people depend on it. The consequences of failures are people depend on it. The consequences of failures are people depend on it. The consequences of failures are huge, sometimes huge, sometimes huge, sometimes catastrophic for catastrophic for catastrophic for businesses. And it businesses. And it businesses. And it requires tremendous requires tremendous requires tremendous maintenance. maintenance. maintenance. Most Most Most developers in the world developers in the world developers in the world spend most of their spend most of their spend most of their time supporting time supporting time supporting such huge such huge such huge systems. I expect systems. I expect systems. I expect them to continue to them to continue to them to continue to exist. So, exist. So, exist. So, in my opinion, in my opinion, in my opinion, the conversation sometimes the conversation sometimes the conversation sometimes deviates a bit from the deviates a bit from the deviates a bit from the topic here, you know? topic here, you know? Long-lasting systems are Long-lasting systems are likely to remain likely to remain likely to remain the most important in the the most important in the the most important in the world. And there will probably be world. And there will probably be world. And there will probably be even more of them. But even more of them. But even more of them. But the most numerous the most numerous the most numerous will be disposable will be disposable will be disposable software products.
-
software products. software products. They can be They can be They can be replaced in a matter of replaced in a matter of replaced in a matter of hours. hours. Few people will depend on them, or Few people will depend on them, or change management change management change management will not matter. And will not matter. And will not matter. And look, if something look, if something look, if something doesn't work, you just doesn't work, you just doesn't work, you just give everyone agents. give everyone agents. give everyone agents. They will create their own They will create their own They will create their own version of the program. version of the program. version of the program. You know, You know, You know, maintenance will become maintenance will become maintenance will become unimportant or almost unimportant or almost unimportant or almost free. Don't free. Don't free. Don't like like like the calculator in your the calculator in your the calculator in your OS? Make your OS? Make your OS? Make your own. Want to own. Want to own. Want to plan a party plan a party plan a party for the kids? Write a for the kids? Write a scheduling program just scheduling program just for this one for this one for this one party. Throw it away party. Throw it away party. Throw it away afterwards. Code quality doesn't afterwards. Code quality doesn't afterwards. Code quality doesn't matter. This matter. This matter. This doesn't concern anyone. In doesn't concern anyone. In doesn't concern anyone. In the future, we the future, we the future, we will apply will apply will apply engineering rigor engineering rigor engineering rigor depending on the level of depending on the level of depending on the level of software disposability. software disposability. On the left—nothing. On the left—nothing. None of our practices of None of our practices of None of our practices of engineering rigor engineering rigor engineering rigor matter. matter. matter. On the right—all the On the right—all the On the right—all the engineering practices engineering practices engineering practices accumulated over accumulated over accumulated over decades are of decades are of decades are of great importance. We great importance. We great importance. We can determine can determine can determine your place on this your place on this your place on this scale by the four scale by the four scale by the four factors I factors I factors I talked about. Consequences, talked about. Consequences, talked about. Consequences, replacement cost, replacement cost, replacement cost, dependencies and dependencies and maintenance cost. If maintenance cost. If they are low, it is a they are low, it is a they are low, it is a one-time software. If one-time software. If one-time software. If they are high, it is a they are high, it is a they are high, it is a durable software. And durable software. And durable software. And look, anyone who has been look, anyone who has been look, anyone who has been writing code for a long time knows writing code for a long time knows writing code for a long time knows that it's better to lean towards that it's better to lean towards that it's better to lean towards durability. It is worth durability. It is worth durability. It is worth considering that all of considering that all of considering that all of these indicators are higher these indicators are higher these indicators are higher than you expect. But a than you expect. But a than you expect. But a new opportunity has also appeared new opportunity has also appeared new opportunity has also appeared in the world.
-
in the world. You can make You can make the the the software more software more software more disposable. So what does disposable. So what does disposable. So what does this entail? Well, this entail? Well, this entail? Well, create better create better create better isolated isolated isolated environments, right? environments, right? environments, right? For example, For example, For example, deployment is deployment is deployment is only allowed in an only allowed in an only allowed in an environment that environment that environment that only has access to your only has access to your only has access to your data. No data. No data. No customer data, no customer data, no customer data, no personally personally personally identifiable identifiable identifiable information, nothing like information, nothing like information, nothing like that. You can that. You can that. You can ensure ensure ensure independence. You could independence. You could independence. You could say, "Okay, say, "Okay, say, "Okay, no incoming API no incoming API requests from other requests from other requests from other production systems production systems production systems to this system in to this system in to this system in this environment, this environment, this environment, okay?" So, everything okay?" So, everything okay?" So, everything that is deployed in that is deployed in that is deployed in this environment is this environment is this environment is disposable. disposable. disposable. Reliability. You Reliability. You Reliability. You may have an old, may have an old, may have an old, clunky backup clunky backup clunky backup system that is difficult system that is difficult system that is difficult to use. And to use. And to use. And look, if people look, if people look, if people want to want to want to write their own more write their own more write their own more efficient efficient efficient interfaces "on vibe"—let them interfaces "on vibe"—let them interfaces "on vibe"—let them write, because there's an old, write, because there's an old, write, because there's an old, reliable, clumsy reliable, clumsy reliable, clumsy backup system that backup system that backup system that they can they can they can use if use if use if their hacky " their hacky " vibe" thing breaks vibe" thing breaks vibe" thing breaks down. And of course it down. And of course it down. And of course it will fail, will fail, will fail, right? This is normal. But it doesn't matter right? This is normal. But it doesn't matter right? This is normal. But it doesn't matter if if if it breaks. And you it breaks. And you it breaks. And you can limit the can limit the can limit the scope, scope, scope, as I said, right? This is as I said, right? This is as I said, right? This is just a calculator just a calculator just a calculator for one person. This is for one person. This is for one person. This is just a just a just a one-party planner. We one-party planner. We one-party planner. We can do a can do a can do a lot more and lot more and lot more and discuss ways to discuss ways to discuss ways to increase increase increase disposability.
-
disposability. In fact, I think it's a In fact, I think it's a whole new whole new whole new discipline of discipline of discipline of software development: thinking not about software development: thinking not about software development: thinking not about how to increase the how to increase the how to increase the rigor of reliable rigor of reliable rigor of reliable systems, but about how to systems, but about how to systems, but about how to encourage encourage encourage disposability or disposability or disposability or let people let people let people just throw these just throw these just throw these things away. Interesting thought. things away. Interesting thought. Now I want Now I want to emphasize that to emphasize that to emphasize that developing reliable developing reliable developing reliable software is not going away, software is not going away, software is not going away, because this is the biggest because this is the biggest because this is the biggest confusion I see confusion I see confusion I see on on on social media today. social media today. In fact, I believe the In fact, I believe the total total total amount of reliable amount of reliable amount of reliable software in the world will software in the world will software in the world will grow as grow as grow as AI tools AI tools AI tools make it easier to make it easier to make it easier to create. It is also important create. It is also important create. It is also important to understand that “ to understand that “ disposable” and “ disposable” and “ reliable” are not black reliable” are not black and white concepts. There is a and white concepts. There is a and white concepts. There is a spectrum, as I've spectrum, as I've spectrum, as I've shown, and what shown, and what shown, and what varies along varies along varies along that spectrum is the that spectrum is the that spectrum is the amount of effort amount of effort amount of effort you put into you put into you put into engineering precision. engineering precision. engineering precision. Of course? And that Of course? And that Of course? And that applies to both applies to both applies to both immediate efforts and immediate efforts and immediate efforts and efforts over time, as efforts over time, as efforts over time, as we've always said we've always said we've always said about about about software. However software. However software. However , what you want , what you want , what you want to do, and what to do, and what to do, and what I think you should I think you should I think you should care about the most, is care about the most, is care about the most, is reduce the cost of reduce the cost of reduce the cost of effort. Reducing effort. Reducing effort. Reducing the cost of rigorous the cost of rigorous the cost of rigorous engineering. If engineering. If engineering. If rigor becomes rigor becomes rigor becomes cheaper, if the cheaper, if the cheaper, if the easier it is to be precise, easier it is to be precise, easier it is to be precise, the less you the less you the less you need to worry need to worry need to worry about where you about where you about where you are on that are on that are on that spectrum. So, this is spectrum. So, this is spectrum. So, this is another approach that another approach that another approach that can be taken.
-
can be taken. can be taken. If you change your mind, If you change your mind, If you change your mind, it will be much easier it will be much easier it will be much easier to change the decision: "Oh, I to change the decision: "Oh, I to change the decision: "Oh, I thought this was going to be a thought this was going to be a thought this was going to be a one-time solution, and one-time solution, and one-time solution, and now it has to become now it has to become now it has to become reliable." The reliable." The reliable." The cheaper it is to make something cheaper it is to make something cheaper it is to make something durable, the durable, the durable, the easier it is to change your mind easier it is to change your mind easier it is to change your mind or make a mistake, because or make a mistake, because or make a mistake, because you will never be you will never be you will never be 100% right in your 100% right in your 100% right in your assessments. This assessments. This assessments. This implies a different implies a different implies a different set of practices that set of practices that set of practices that are not an are not an are not an engineering engineering engineering discipline in themselves, but rather are discipline in themselves, but rather are discipline in themselves, but rather are aimed at aimed at aimed at reducing the cost of reducing the cost of reducing the cost of that discipline. I could that discipline. I could that discipline. I could talk about talk about talk about this for hours. I've this for hours. I've this for hours. I've spent a huge spent a huge spent a huge part of my career doing just that part of my career doing just that part of my career doing just that . But I do . But I do . But I do n't have 10 hours. I have n't have 10 hours. I have n't have 10 hours. I have about 5 about 5 about 5 minutes left on the timer. minutes left on the timer. minutes left on the timer. So I'll tell you what I have time for So I'll tell you what I have time for So I'll tell you what I have time for , okay? , okay? , okay? Let's talk Let's talk Let's talk about standardization. about standardization. about standardization. Why are we doing this? Why are we doing this? Why are we doing this? People say, "Well, I don't People say, "Well, I don't People say, "Well, I don't know, probably because the know, probably because the know, probably because the boss said so." boss said so." boss said so." In fact, we In fact, we In fact, we standardize to standardize to standardize to eliminate unnecessary eliminate unnecessary eliminate unnecessary capabilities. If you capabilities. If you capabilities. If you don't have PHP on your system don't have PHP on your system don't have PHP on your system , you don't need , you don't need , you don't need to look for PHP linters, to look for PHP linters, to look for PHP linters, learn all the practices, learn all the practices, learn all the practices, or security holes that or security holes that or security holes that need to be closed. You need to be closed. You need to be closed. You simply eliminate the simply eliminate the simply eliminate the redundant through redundant through redundant through standardization, and that standardization, and that standardization, and that reduces the cost of reduces the cost of reduces the cost of enforcing enforcing enforcing discipline. The same discipline. The same discipline. The same goes for goes for goes for frameworks. Why would frameworks. Why would frameworks. Why would n't you want to have every n't you want to have every n't you want to have every frontend or backend frontend or backend framework there is?
-
framework there is? framework there is? Because it makes Because it makes Because it makes discipline more expensive. discipline more expensive. discipline more expensive. Yes, discipline is Yes, discipline is Yes, discipline is still possible. You can still possible. You can still possible. You can have agents have agents have agents configure all your configure all your configure all your tools, but you tools, but you tools, but you will have to do it will have to do it will have to do it every time. You know, every time. You know, data transfer protocols. Why do you want to data transfer protocols. Why do you want to have standardized have standardized have standardized RPC protocols? All for the RPC protocols? All for the RPC protocols? All for the same reason. same reason. same reason. Standards exist Standards exist Standards exist for exactly this. for exactly this. for exactly this. Of course? What I Of course? What I Of course? What I call call inner flow tools. inner flow tools. So, these are tools So, these are tools So, these are tools that work that work that work automatically. automatically. automatically. The programmer does not The programmer does not The programmer does not need to choose whether need to choose whether need to choose whether to run them or not. They to run them or not. They to run them or not. They don't need to understand don't need to understand don't need to understand how they work. how they work. how they work. They just work. They just work. They just work. If they are, they If they are, they If they are, they appear to be appear to be appear to be free and free and free and reliable. reliable. reliable. Reliability is very, very Reliability is very, very Reliability is very, very important. They don't important. They don't important. They don't give a bunch of give a bunch of give a bunch of false false false positives. They are positives. They are positives. They are fast. They just fast. They just fast. They just work. And the work. And the work. And the more more more true this is, the more true this is, the more true this is, the more often you can often you can often you can apply it to apply it to apply it to disposable software. If disposable software. If disposable software. If it's free and it's free and it's free and fast, what's the difference? fast, what's the difference? fast, what's the difference? Simplifying testing Simplifying testing . It's not just a question of, . It's not just a question of, "Hey, how can we "Hey, how can we "Hey, how can we test better?" test better?" test better?" See how to See how to See how to make sure no make sure no make sure no one has to one has to one has to think about how to think about how to think about how to test better? How do you make test better? How do you make test better? How do you make every test every test every test fast and fast and fast and deterministic, without deterministic, without deterministic, without having to be a having to be a having to be a deep expert in deep expert in deep expert in testing? A testing? A testing? A huge amount of work needs to be done huge amount of work needs to be done huge amount of work needs to be done on the on the testing infrastructure to testing infrastructure to make this possible.
-
make this possible. make this possible. For example, you know, For example, you know, For example, you know, one of my long-standing one of my long-standing one of my long-standing dreams as a dreams as a dreams as a test owner was to have test owner was to have test owner was to have everyone everyone everyone provide provide provide in-house in-house in-house mock versions of mock versions of mock versions of their services, and for their services, and for their services, and for me to be able to just me to be able to just me to be able to just run those run those run those mock versions. And mock versions. And mock versions. And you know what? A coding you know what? A coding agent can do this. agent can do this. agent can do this. So, you can So, you can So, you can do it right do it right do it right now, right? But now, right? But now, right? But you have to want to you have to want to you have to want to do it and give do it and give do it and give access to everyone else. And one more thing access to everyone else. And one more thing access to everyone else. And one more thing —look, —look, —look, maximum maximum maximum severity. You're just severity. You're just severity. You're just increasing the severity increasing the severity increasing the severity everywhere. You everywhere. You everywhere. You set all set all set all linter rules to linter rules to linter rules to maximum. You never maximum. You never compromise on anything, and it compromise on anything, and it just eliminates...it's just eliminates...it's just eliminates...it's a lot like a lot like a lot like standardization. This standardization. This standardization. This eliminates a lot of discussion. eliminates a lot of discussion. eliminates a lot of discussion. Sometimes the linter Sometimes the linter Sometimes the linter makes mistakes. But makes mistakes. But makes mistakes. But as long as the false positive rate is as long as the false positive rate is relatively relatively low and doesn't have low and doesn't have low and doesn't have catastrophic catastrophic catastrophic consequences, it doesn't consequences, it doesn't consequences, it doesn't matter because matter because matter because suddenly a bunch of suddenly a bunch of suddenly a bunch of future future future linter errors or problems linter errors or problems linter errors or problems that you won't have to that you won't have to deal with disappear. Ask deal with disappear. Ask anyone who is like, " anyone who is like, " Oh, I suddenly want to Oh, I suddenly want to Oh, I suddenly want to enable linter on enable linter on enable linter on this this this million-line codebase." And million-line codebase." And million-line codebase." And they're like, "Oh, wow they're like, "Oh, wow they're like, "Oh, wow . Now here's my . Now here's my . Now here's my 100,000 lines of changes that 100,000 lines of changes that 100,000 lines of changes that I need to make, I need to make, I need to make, right?" It's much right?" It's much right?" It's much easier to do it easier to do it easier to do it right away and keep it right away and keep it right away and keep it on for everyone. on for everyone. on for everyone. Now look. Like I Now look. Like I Now look. Like I said, I could said, I could said, I could literally stand here literally stand here literally stand here and talk to you about and talk to you about and talk to you about this for 10 hours straight. this for 10 hours straight. this for 10 hours straight. There is still much, There is still much, much more that can be much more that can be much more that can be done. These are just a done. These are just a done. These are just a few directions. But few directions. But few directions. But there is also a whole there is also a whole there is also a whole area of the discipline of area of the discipline of area of the discipline of software engineering software engineering that can be that can be that can be applied in another applied in another applied in another plane. So, now plane. So, now plane. So, now we can answer we can answer we can answer our question not our question not our question not simply “it depends simply “it depends simply “it depends on the circumstances,” but “yes on the circumstances,” but “yes ” or “no.” So does ” or “no.” So does ” or “no.” So does code quality matter?
-
code quality matter? code quality matter? For disposable For disposable software—no. For software—no. For durable durable software—yes. And software—yes. And we can answer the we can answer the we can answer the third and even more third and even more third and even more interesting question: interesting question: interesting question: does it have to be expensive? does it have to be expensive?
Summary
The main theme is the importance of understanding and practical application in software engineering, particularly regarding code quality. The discussion emphasizes that success hinges on comprehending system behavior and knowing how to safely modify it, rather than subjective feelings or mere correctness. The takeaway is that all tools like debuggers and tests ultimately serve to improve these two core aspects of understanding and action.