 I went to Garter College, home of Moonbaths. We had an alternate Frisbee team. They were the Visigoths. Our college was black on black. They were very appropriate for sort of the tanner of the school. The school that we played against was the local military college. They couldn't party on their campus. We had more than 80 schools and party on our campus. We had all the best drugs. But I did go to Garter, which is an interesting school. You don't know about it. Some people do. It's in Plainfield, Vermont, which is kind of nearby here. Almost in the D Drive. But it's in Dewey School. It's based on the principles of democratic education. What does that mean? Well, one of the primary ideals of it is that students direct their own knowledge, direct their own education. And so you get to do things like say a student, a friend of mine for example, has five college credit hours in the philosophy of Starcraft. I have five credit hours in crossing the road. There's a joke that says, why did you guys cross the road? The answer is to get credit. So that's a funny joke. I'm going to do a class about that. So transform this entire semester long study into what does the good mean? Because it relates to American society and philosophy and writing and culture. Because one of Garter's values is that we challenge ourselves each other to embrace uncertainty, to experiment, to imagine unexpected outcomes. And it taught me that I can learn from anything as long as I can find someone with more wisdom and more smarts and a better SAT score than me. And I can paper some books and do it. And that means that I have unfortunate addiction. It means I have a lot of hobbies. I went to a cooking school for three whole weeks before I decided I'd be yelling at four in the morning. I took a year off from developing because I said, man, this is a great game. I'm going to cook me a professional game. I'm a self-examined glass artist because I don't get paid at all for anything I do on Etsy. I take the abolition trail for six months. I apprenticed in Mary Ann Public to your company and I published two role-playing games. That's pretty cool. Right now I'm into yo-yos. I always have yo-yo in my hand these days and it's not because I got many good at it, but I'm just trying to get to a place of being natural. The same way that if you might use an editor for everything, writing email and code and to do this because you won't learn that editor inside now, I'm walking around everywhere with a yo-yo these days because I want that yo-yo to feel natural in my hands and for tricks to be just part of what I do. And it means that I'm constantly looking like an idiot on the street. I don't know, is it going to be like a yo-yo when I've heard like a dumb word and just like drop it down, blow it back? Okay, one person might want to go to a place like that. The problem is you look like kind of kind of like an idiot, right? Because it comes up and stacks you in the face. That's what you're afraid of. So like it comes back and I'm like, I'm going to flinch away from it all the time or I'm like doing loops and such and I'm like unwinds and then I have to like, I'm a little kid. And so I have to be really comfortable with kind of looking like an idiot a lot. And it's that sort of same impression I have with code where I don't know what I'm doing but I have a book and I have a teacher so I can go learn these things. Right now, thanks to my dad, I'm going to ask for the scooters. This is my first scooter. This is an 1979 Vespa that I got off of Craigslist for $2000. This is the one I ride right now. It's a 2005 Stella. It's a two-stroke engine. It's a beautiful piece of Indian engineering. They're all made in India and they should come over here and assemble in Chicago so it's made in America. But it's a beautiful, beautiful machine. It's basically from the 70s. It's a reproduction of these Italian scooters. And I've done almost every piece of work. You can imagine to it except change my brakes because that's really scary. Like, I might die. But I got into these scooters to bring everybody around when you don't have to deal with snow at all. Because I was talking to my dad. My dad is a motorcycle guy. He loves motorcycles. Right now, he's actually at some motorcycle rally somewhere. That's why I get to not go home this weekend because my dad's out on his motorcycle. And I said, yeah, I want to do this computer thing but I just want to do some physical work again. I worked in class. I was like, stagehand, cooking. Those are physical things. I developed something and it came out on the other side. So why don't you get into, why don't you get yourself a motorcycle? Like, well, I'm scared of motorcycles. It's like, well, get yourself a scooter then. So I did. And getting an older machine like this means that I have to constantly do all these maintenance to it because it's falling apart. But it's not just like, there's like this fun thing of like, going to rallies and like, getting the source parts and the like old, secure manuals that really appeals to like the software engineer, right? It's a piece of machinery, it's a system that you pull apart and make rational assumptions about and have it not really quite work that way. But it's good to work with my hands continually. And one time it wouldn't start as often the story of these old machines. It just wouldn't start. That's the time I guess. Like that said, you have to remember there's really only four things that an engine needs. It needs air and fuel. It needs a spark to ignite that air and fuel. And it needs compression. It needs a way to contain that explosion so the engine can drive itself. And, well, my God, this describe it was a really simple search tree, right? So if the engine doesn't start, I can look at it and I can say, well, is it getting fuel? Is it getting air? Is it getting electricity to make this spark? Is there compression to capture that energy that's being generated? And then based on one of those four things not happening, I go down this search tree of similarly like almost binary, yes, no. Does it have gas? Does it have the right kind of gas? Well, is the gas line blocked? All these sorts of things. And this sort of approach helps me to not assume obvious problems that are coming up. About a year ago, I got this new scooter and the first thing I did was change the fuel injection tubes because the ones that come on it are really, they're not that great. They're not that powerful. A little bit of power. So I switched them out for new ones. Clean them all out, spray them down with a special fluid that comes in a very expensive can. Put it back in, hopped on. It starts right out and you're right down the street. And in between two gas stations, halfway between them, exactly, it just stops. It stops dead. And gas stations are great because you can wheel it over right now. And no one thinks twice about it being there. But if you're in the parking lot in Starbucks, working in your bathroom, your bike, it's... So anyway, I immediately assumed that I could screw something up. But I put the pins back in wrong. Or I had to bid, oh my god, I've got this fuel cleaning spray can stuck into the gas line. And I was like, it's exploded. So one time I took my engine apart, they could screw the spark plug all the way back in. And the force of the engine, that compression, actually popped the spark plug out and drove it through the cowl of the engine. Like, that was exciting. But in this case, it just turned out that I was actually into that gas. And it took 25 minutes to figure that out. I should have followed the scientific method. Does anybody remember what the first, what the principles of the scientific method are? Yeah, yeah, you ask a question. You do some background research and that sort of identify what this problem is. Instruct your hypothesis. You test that hypothesis. You create an experiment. How can I tell that this thing that I think is going wrong is actually going wrong? I analyze the results of that. And then I find out how to communicate my results that get published. Now there's actually a good step in here that a little scientist won't tell you about which is the original results to match your funding hypothesis. That funding has got to be in there somewhere. But the point about the scientific hypothesis, right, is that the method is to make sure that nature hasn't just led us. That we're not too smart. We're not as smart as the thing we are. If we get further fielded into more and more esoteric concepts and ideas and projects and problems, because less and less obvious when we're running it, we have to get further correct. We have to do machine learning to say, yes, we have in fact seen a 0.2% lift in sales this month. And it wasn't just, you know, that it was really just changing the color of the violin. So I would do it as long as I could go out. Asking these sorts of questions to define what it is that we know and what we don't know. We are asking the questions that we already have the answer to. And we're asking them really more in question. We have to be always asking the sorts of questions that are pushing ourselves to the limits of what we think that we know in order to increase our understanding and to level up to understand the experience that we're having. We need to ultimately understand that when we're trying to diagnose a problem, when we're trying to do rational pieces of software, we are the most complicated piece of that system. There's no piece of software on the planet. It doesn't ultimately have a human somewhere in its loop. The software is there to serve us. It's there to solve the need that we have to fill a need or solve a problem. Even stuff that's ascending people's movement, like what program talks to them, the program talks to them, the program, somewhere in them that's a human. And a human is punching in a number, or it's following a process to enter a car or something. And we're the ones that have that potential disaster. So we have to understand our own interactions, our own abilities, why we make the certain mistakes. I go to Katie's school. I think a lot about learning and how I approach learning and understanding things. I've been trying to teach myself to go right now. I've been a Ruby developer for like five or six years. Before that, I was a Pearl Hacker. Before that, and before that. Because I remember the 70s. I've been doing this for a long time. I mean, we think that this being like my 6% of language that I've had to pick up, I would understand that I'm going to feel kind of bad. Things aren't going to go the right way, I think, that I'm going to write some very bad, obvious, stupid code for a long time because this language is not the language I'm used to. My code looks like Ruby. And all the developers that I work with are like, yeah, okay, that works. You're testing basic compliance at this night. But have you looked at this library? Have you looked at this thing you never do about before? Okay, well, I guess I should have known about that before, right? Well, that will come in time. Eventually, I will figure these sorts of things out and I'll gain that knowledge and that confidence to understand and I'll get out of that zone and that sort of valley of desperation where I don't really know what I'm doing, or I'm the idiot who's hitting yourself in the face with yo-yo day after day. And then sort of new normalcy will set in. I'll have new levels of expectations. The problem is that I do have expectations, right? I expect myself to be able to perform at a certain level. When I'm below that level, I'm stressed, you know? Yearly reviews are coming up. Committing as much as I should or my commits are broken or my commits are getting a lot of code review that's giving a kind of basic stuff, kind of one-on-one stuff that I get stressed about that. That period of chaos is going to last. I have no idea how long it's going to take me to come out of that place of not knowing what I'm going to do to not do it. I've been doing it for six years. Let's say five, let's say six. But if I don't know how long it's going to take me to get to that level of confidence and expertise, then how can I know that I'm going to come out of this new level? How do I know that this is a language that I can master except for my own sense and self, my own confidence that I'm good enough, that I'm smart enough, and gosh darn it, most people like me. I'm pretty approachable. I mentioned I took a year off from poker and by this way, the slides don't even really matter. I'm just dancing inside my nose. I took a year off from developing and becoming a poker player and the way that I became a poker player was that I played a lot of poker and I talked to a lot of friends that played poker and I watched a lot of poker videos and I read a lot of poker books. And one of my favorite books is by this guy named Mike Carrot. Mike Carrot likes to read things out of himself. He'll find that out immediately if you're looking at him at all. And one of the books he wrote, it's relatively famous in the poker world, is Mike Carrot's big book of poker tales. And it's got Mike Carrot's like cartoony space on it and like on every page, there's little cartoons with Mike Carrot like giving you little lessons. And he had this concept that he calls a carousel or shoulder misery. And he names things out of himself. Anyway, here's how it goes. If you're a poker player or a gambler of some sort and you can envision yourself comfortably losing $1,500 in a game, I don't know that all of you would be comfortable losing that much money, I'm not comfortable losing that much money the same that you are. But that's just the level where you would start to actually feel some pain about losing a series of bets or gambles. And so if you find yourself down $500, then $1,100, and then before you can notice it, you've gone past this $1,500 threshold, you've lost $1,800. Now this is a dangerous sort of territory for people psychologically. Your past year here, your threshold of comfort, and it gets worse and worse. Hours later you found out you've lost $4,500. Three times when you think that you're comfortable losing. Your mind becomes numb. And most people at this point can't mentally comprehend what's happening to them. They can pass the point of pain to a point of misery. This point of misery is the point when mental and emotional pain is maximized and nothing further will register. This is a defensive mechanism that our own brains do is abstract away our problems. We do this in our own minds, not just with gamblers, but everyday people. I believe most of you have probably woken up two hours late and written off your entire day before. We're decided, well, it's already 1 a.m. And I don't have 8 a.m. to drink. So I'm going to take a taxi home anyway, so... Chunks. I shouldn't be factoring this massive digital clock, but the code is so shaky anyway. Man. This database model is a mess. It's an absolute mess. It's huge. I shouldn't be factoring this and break out and do that normalization thing, but I'm just going to add a column. The home page is already 4-button, 4-meg. What's another JavaScript one? These are really kind of unprofessional choices that we make about software frequently in the day-to-day work environment. And these aren't choices that we make out of malice or ignorance, or even really laziness. So much as we've just probably crossed into this area of misery, this place where the decisions that we make don't matter anymore. We're not necessarily in control of our own destiny, or even if we are, what destiny are we moving towards? Does that destiny count for anything? We're close to that edge of burnout. And this is the place where, as organizations, we start to lose our best developers. When developers look around, how do they do matters? That their own success or failure is a little bit of a consequence to the business. Or vice versa, the things that they're not in control of relate directly to their own success or failure, or rewards or punishments. You're not getting a raise this year, but the sales team didn't even recover. How can I as a developer do anything about that? That's not my fault. That's when people start to look around to solve their problems, because they can't solve the problems they're dealing with. They have no fulcrum. They have no place to stand. They have no leverage. So we'll look for some place else that they can go to to do that. So we have to be aware when we cross this threshold. Because even though beyond it, decisions don't seem to matter, they do still matter. And the secret is to keep performing as if you care. It's in your lack of care, when you don't actually feel the importance of a decision in the moment, it will matter to you. There will come a time when it does matter. To be successful at poker, you have to do this crazy weird jet in mind trick with yourself. You have to think that you're the absolute boss of the table. You're the best, no one can beat you. Because as soon as you show any amount of fear to somebody else, like a little bit, you're not going to be playing optimally. You're not going to be in a position away from the table about how can I do better. I have to do this in software all, I feel like I do this in software all the time. I have to believe that I can write a load balancer to go. But I'm not really entirely sure that I can. How can I get there? What pieces of knowledge do I need to assemble? What sort of plan of education can I create to get myself there? Because we have too many choices. We don't. We have imperfect information about what we're attempting to do. Almost always. There's no design document that has ever captured everything it needs to do. It's certainly never going to capture all of the inputs that users will do. I have no idea why someone will put invalid UTF-8 bytes into the name of their branch. People do it. And it breaks the world sometimes. But because I have to deal with the sort of cloud possibilities all the time of what my software can do what it should do and how it will be used and I can't possibly do it that's a really hard thing to grab away as a human. It certainly has an engineer. How do I apply rationality to something that I can't even begin to put metrics around? I can't begin to understand the scope of a problem and how can you show it and something happens when I'm debugging a problem because where do I start? It doesn't work. That's the thing that user always says, doesn't work, make it work. So if you have a good support team you're probably trying to take certain shots and maybe capture some bad ideas or get some sort of structure around your bug reports or your issues. You ask me, please what sort of things, what browser were you using? What time of day was it? But so often we're dealing with a problem, especially if we're working with VMs or servers and we're working with, like, perhaps a different operating system here. We can't actually test the precise situation so we don't have a capability for all things. When we don't have the exact content where a piece of code is hidden here or all the inputs can't be known but given enough time you can perfectly do it. Sometimes though we can only diagnose these problems through the side effects that we have to deal with. That's frustrating as hell for me because I want to be able to reach in and touch the thing but now I've got to do it write this thing that maybe puts it into a log file somewhere and then I've got to deploy it and I get way too weak. That can be really frustrating if it can take me away from being rational about the problem or being in that moment understanding my engagement with the software. How do I know I'm not fooling myself that it just magically starts working again? I don't know what fixed it. And this is a result of looking at things of what they are and not enough of what they mean. As an engineer, like, it is what it is, right? A is A. Something is equal to something else. But taken together, what does that piece of software mean? What is its place in the world? What does this piece of class do to the structure of a repository or an application? The complexity of our applications grow outwards from single lines of code. They become multicellular creatures in a sense. This complexity is grown to the point where we can't begin to comprehend all of the factors that are going into making something wiggle across the slide or through a pond or across a forested floor. This begins to expose the limits of our ability to be rational about software. We can't apply simple tools to it anymore. We can no longer say I have a hypothesis, here's the experiment. Unless we pull back to this higher levels. But what we work with in the moment is something equal to something else yes or no? We work with single lines of code when we need to be looking at clouds of code together. I don't know why I was going to say something about French impressions things. As I came about it was marked as poor technique because up to then painters were striving for photo realism or what we would think of as photo realism. The best painter of course reveals something about the inner life of the subject or the subject had a hand on a globe or a tree or a sword or something to tell the story of that subject. But impressionist was about the person. He was about and Go was in his field a starry night and this is what it looked like to him his personalized experience. It was something new. But it was also in your system it was an opportunity for artists to learn something new. In the same way it loves your something that are amazing because it allows us an opportunity to learn something about our system. I love the rebel languages and I've struggled with languages that have a really poor rebel story. And part of that's my training coming up as a groupie. I can check everything and I can test the little things and see how it breaks. I feel like I can't do that as much in compilers. I'm trying to compile it and the compilers are probably going to break but I don't get to see what my experience of that code is what's separate from anyone else's attempts to capture it. When I see it in a new era come along it's a beautiful opportunity to understand the system in greater depth. Like as sociologists for studying new species I get to say, oh it's the rainy season what does this creature do when it rains? What? What does my software do when it rains? Is it reactor rain? I'm fascinated by the way the software evolves over time and sometimes it reacts in like weird fun ways when suddenly the environment which is operating has changed somehow because software carries with it the story of every single thing that ever had to do. I worked for I worked for a company a few years ago that did hosting enterprise hosting and part of that was for some reason we also let customers register domain names through us we would charge them $15 we had a deal with some domain name service who charged us $12 so every year we would automatically re-register their domain names for them and we made three bucks that's pretty awesome right that's just printing money just printing money today one of our largest customers called us up and said hey I've noticed that the last six months our bills have been about $35,000 a month higher than we expect this is like a $100,000 a month company one of our top best players so like this was a severe increase and then new CFOs just happened to know that it's hot so we finally tracked it down to a domain name registration I'll talk through what we did very briefly I said okay for all their domain names that have come up that need to be re-registered that are out to aspire what we want to do is we want create an asynchronous job that asynchronous job is first going to go into the hosting company's building system charge that customer the $15 then we go in and we use the hosting company's credit card to attempt to review the domain if the registrar returns answer with an error at all we try three times and then if after three attempts we don't do that we'll recue the entire job but the problem with this is that we build them first at the start of every single job and what happens when the hosting company's credit card expired you have to let it's hard-coded excuse me if I'm actually looking at it it's private though I don't know how to say that so we ended up it took me about 60 hours well myself and other developers 30 hours each to track this problem down and I figured that there were 600 domain names that would be registered at $3 for profit every year this one wasn't how do we do it why why are you trying to do this $7 for $3 thing well it turns out that if you go back in the company's history they were small 2 or 3 person shop they had a customer whose domain name expired and for some reasons they said no never have a customer get mad at us for domain name failures like that we're going to build this little system and it worked perfectly fine for years until suddenly the soccer town maladapted for its environment you know just like the way that creatures evolve over time and like they still have vestigial hind limbs do you ever look at a whale skeleton like wayyyy like floppy little legs or like a foot long we don't do anything but whales still have them whales and dolphins still have little tiny bits of fur because they're animals and that betrays or belies their origins as land animals way back when until the creature is actually harmed by an adaptation that adaptation doesn't go away is a hindered in evolution we carry around all these little things we're not going to remove it we're not going to need to remove code well actually if anybody paid to remove code what's your name I've got this once once though right well it was so horrible I didn't want to accept another project from that dude because he actually through his own languages let malware and SQL interactions be injected into someone into a client's website and I just thought it was so horrible that yeah I just I kind of got an attitude that's what that was no I mean I felt bad for the client because the client had no idea that this was what was going on but I had to go in there and convince this this person who had put together this project this wasn't a professional developer this was somebody we call a cowboy governor who really isn't a professional developer he's not many people sitting in this room just somebody who thought oh gee I'm going to jump on the dead van wagon and he sold a product to a client he didn't think about what he was doing didn't care gave the client an idea I felt bad I think it was so often we build these features and we approach this at some cost while we had developers build this thing we have three users who love our web based notifications we can't get rid of that we don't get rid of the code it's actually causing problems there's no negative impact banks still I mean I've seen banks still do things like issuing cashier checks but that's a very serious need for cashier checks and the postal service still still has one cent stamps why do you have one cent stamps why is it just for our scandal so I'm on k-talk genius early computer scientists had this next quote that was worth needing points of IQ I really need I really need to discuss and understand the nature of code to understand why it's a gaming and surprising manner requires often to shift our view of the code away from what away from the place that our questions have naturally been and it's fine it's no longer enough to sort of say well, why are we when we say we have a bug because of our fork version of Ruby it's doing this weird thing question is how do we fix our fork version of Ruby question should be why aren't we at mainline that is the problem understanding a problem that our system is trying to solve really understanding what is the end goal how is it being used not just what do we intend for it to do is something that mechanical engineers have taught they're talking about the ethics of engineering about how their devices could be used in the real world something that poses a danger to people how do we make it safer the test panel is great but I don't have any test for how somebody is going to use my software I love the fact that JavaScript developers can use GitHub just as a weird cheap database because there's an API for it it's just a bunch of tests so you can use GitHub just as a database you'll get shut down in about five minutes but you can do it this is this idea of multifunctionality we're not functionally fixed to our use cases and things one of my favorite tools is C-Wrench it's in every single one of my tool kits no matter what it is, even my electrical kits because I've used it to start cars by bridging electrical gaps I once used a C-Wrench to in the place of the fuse you know under damn service electrician, that's a lot of power to be fair though it was 8.20, the show was supposed to start at 8 we couldn't find a fuse we had to do something and I said effectively hold my gear while I jammed it in my wall and it worked and it's very dangerous and we should not do that and I think the statute of limitations are over but a cognitive psychology is called functional fixedness if I just thought well that's the only positive solution to this problem instead of saying I have something that would work for about 35 minutes before it melts then it would have been much in the dark one of the classic examples that's taught about functional fixedness is when the Titanic hit an iceberg there weren't enough lifeboats to go around that's why the only reason why so many people passed away why didn't people get on the iceberg it couldn't be the lifeboats that buried people from the boat because the boat did take a long time to sink though but you know what I hate to say it but most people are not always realistic if you studied and read the professional testimony of what happened in the aftermath of the Titanic sinking you know it was utter pandemonium because there was no training for how to use how to get people into boats and they were boats that sealed away with only 12 people in it and they were not willing to rescue anybody else from the water struggling for their lives even though this 12 person built lifeboats had capacity for 65 most people unfortunately don't think about the welfare of others better talking about this a lot of things I think as an example though it's been as an example I guess the software development we have the same sort of cognitive barriers we think about a piece of software if it only does this thing now what could it possibly do how could I modify it to do the thing that I wanted to do the spring that we bring to software when we're interpreting it and trying to understand it and our ideology is ultimately insufficient in the task of the hand the ideology is a kind of filter a frame that we look at the same word there in value too but if we change that frame everything changes like a new pair of glasses we see new details different details I prefer sunglasses that are polarized which I love and I can see all sorts of weird shimmery colors and glass sometimes the sky looks weird and I feel like yes, Jesus has a projector like glasses really added anything to the world that's around me it just really allowed me to process new kinds of information filter the information differently forming it allowed me to have a different frame of reference what was going on around me and I'm a better developer developer actually not because I got lucky and went to a really good school my school we decided to program we actually had people that were protesting when we got into your lab with three machines in it because the EM radiation was throwing off the vibes they ran the land across campus and there were people that were planning to make us feel the EM radiation from Cat 5 cable that's in a very high 2,300m I'm not one to necessarily say that you know they couldn't but I doubt it but I didn't have that experience I had the experience of being a performance production major because I stood up on ladders and changed lights for a long time and I loaded trucks in the cold and I loaded the backup in the cold that the show was over I got into development because I kind of liked what developers were playing about when you're complaining that one of the two gear taps is empty my fan give me that I'll trade in all of the busted beads and all of the scuff knuckles so how do you debug? what are the tools? what are the processes? the best tool for debugging or troubleshooting anything lies inside of your own skull every piece of software was written by a human it can be comprehended by humans it's 95% competent and everybody cares a human but if I research a small amount of judgment because I think I might actually be in a simulation but I think everybody here is human at least reacts like a human and has a mental processing similar to something on the range of what humans can possibly do there's nothing that you can comprehend that was done by another human because ultimately we all contained within us an exact capacity for greatness for tragedy for happiness for love for joy for passion and every other human on this planet has