But that's a problem because we're headed for a disaster. And we've already seen hints of the disaster coming. We've seen the crashes of the 737 Maxes that were partially due to software. We have seen the loss of billions of dollars software developers as they hid the emissions from cars when the cars were put on test stands, but then allowed the cars to emit when they were taken off of test stands. And perhaps that disaster will be something like some software person doing some dumb thing and killing 10,000 people at a shop. And when that happens, and you've got to fingers squarely at us, and they will ask us the question, how could you have let that happen? And we're going to have to have an answer for them. And if our answer is, yeah, well, you know, my boss told me it had to be done on Tuesday. If that's the answer we give, then the politicians of the world will hang their heads in dismay and they will walk away and they will begin to pass laws, laws that regulate us in ways that we do not want to be regulated. They will tell us what languages we have to use and what frameworks we have to use and what platforms our software must run on and what processes we have to follow and what signatures we have to get, what courses we have to take and what books we have to read. And we will all wind up as civil servants working for the post office. And that is something I would like to avoid. How do we avoid that? Well, we avoid that by becoming professionals. But what does it mean to be a professional? A professional is someone who professes something. You must have something that you profess. And what is it that you profess? You profess standards, disciplines disciplines and ethics standards disciplines and ethics and what we're going to it over time? Why does it rot? Now, you've probably all had this experience. The software starts out okay. It starts out relatively clean. It's well-structured and well-designed. But then over time, it begins to rot like a piece of bad meat. It starts to decay and degrade. Why does this happen? What goes on? Why does software get worse and worse with time? I'll probably tell you why this happens a little bit later. There are reasons for it. But before I do, let's just talk about that rot. Have you ever been significantly slowed down by messy code? If you are a software developer in the 21st century, you have almost certainly been slowed down by messy code. It might have been messy code that you wrote. It might have been messy code that someone else wrote. But you have been slowed down by messy code. And everyone else has been slowed down by that messy code. That is the thing about messy code. Messy code slows everyone down for as long as that messy code exists. It is a constant break on the productivity of the software team. Imagine trying to make dinner in this kitchen. You would have to move the mess around so that you could make the next mess. And there would be very little way for you to make the dinner productively. It would take you a long time because it would be too hard to work in that environment. That is much like working in messy code. So what are the symptoms of messy code? How do we know that we have messy code? Well, first of all, the neglect that causes messy code, and it is neglect, boys and girls. You don't get messy code by being righteous, by being careful, by being responsible. You get messy code by being neglectful. code by being neglectful. But because you have been neglectful, you have left the state of the code with detriments, with holes in it. And those holes, that mess, encourage other people to continue to make messes. This is the broken windows theory, right? If you walk past a building that has no broken windows, you are not likely to pick up a rock and break the first one. On the other hand, if you walk past a building where all the windows are broken except for one, you are much more likely to pick up a rock and finish the job. That is the broken windows theory of software. If you work in a messy environment, you are likely to add to the mess. If you work in a clean environment, you are not very likely to be the one to make the first mess. So what does the mess look like? A messy system is rigid. Rigidity is the tendency of a system to be difficult to change. The system itself resists that change. And let me explain how that happens. Your boss comes to you one day and says, I've got a bug for you to fix. And he shows you the bug. And you realize that you know exactly where the bug is. You were actually in that module not too long ago. You passed right by that bug. You know where the bug is. So you tell your boss that you can fix the bug and you give your boss the minimum estimate, which is six weeks. Because in this company, nothing happens faster than six weeks. So you begin to work. Your boss goes away happy. He got the minimum estimate. You bring up that module on your screen where you know the bug is and you scroll down right to the place where you know the bug is and you look at it and say yep there's the bug and you start to type the code that will fix the bug and as you are doing that you realize that if you add these lines of code here well then there's these other modules over there that you're probably going to have to change as well. So you bring those modules up on your screen and sure enough, you're going to have to make some changes in those modules so that the change you made in the first module remains consistent. And as you're changing those modules, you realize that there are other modules over there somewhere that you're going to have to change as well. And now you are chasing your tail through the vast bulk of the code in the system. And the weeks go by. And eventually every module in the system has been touched because of this one change that you had to make in one module. And the weeks go by beyond six and seven and eight and nine weeks, and your boss comes to you one day and says, I thought you were going to get this done in six weeks, and you utter the immortal words of every software developer, well, it was a lot more complicated than I thought. That is rigidity. Rigidity is the tendency of a system to resist change because it is so internally coupled that you cannot make a change in one place without making it everywhere.