 And they wanted something that was a little more agile if you want to use the term. And they ended up getting a computer that they figured out how they could write compilers for it and make different languages. So they wrote this basic computer. So I learned it basic because it came with every computer that you could buy at that time. In 1982, you could buy a computer for about, in U.S. money, you know, at least a lot less than buying a car. So I thought, I was in a company, I owned a little company where we made signage. You know, signage like on buildings, like these things that they say is agile in the end. We made signage and I knew I needed a computer. And so I was painting, I was a painter, I painted letters. And so I looked up, I would go to the magazines and the conferences and everybody was talking about computers. So I thought I'd better learn about computers. So I tracked down a couple computers. I bought one that was a general purpose computer, like a business, a little business computer. And I bought one that was very dedicated to manufacturing. It did certain kinds of manufacturing stuff. And the manufacturing one worked really well. But the general purpose one, the computer worked well, but the software was terrible. The software didn't work very well. And I talked to my wife and I said, we need software that works. And she said, clearly these companies are making money writing terrible software. If you learn to write software, maybe you can make money writing terrible software. And so she, I said, that's pretty smart thinking. So I went ahead and I got, are we trying to get this one running yet? And we may not be able to do the demo. We'll see what we do. So she understood every night I could program for a couple hours. We worked together in our business. I could program, but I couldn't afford to program all day long because I needed to work. I needed to pay my bills. And I couldn't afford to program for weeks and weeks and weeks without having any result from that. So what I did, I decided to work in this manner. This is 1982-83. I thought, if I can do something tonight that saves me 10 minutes tomorrow, I get 10 minutes more to program tomorrow. And then if I can do something tomorrow that saves me 10 minutes, now I have 20 minutes more that I can work and on and on. So this is what I started doing. Every night I would make something I could use tomorrow. And then tomorrow it saved me more time and I could get more time programming. Over the next 15 years, I've spent more and more of my time programming. And then my wife played a really good trick on me. She said, we would not have to have this business if you would just go get a job as a programmer. And so I thought, okay. And so I went and got a job as a programmer. And she was very smart because she knew then she wouldn't have to work in our business if we got rid of our business. And this was a good trick she played on me. The end result was this. That I got a job at a place that was really wonderful, 1999. And we have a small team in a room that was probably equivalent to where the room divider is in here for. That's about how much room we have. And there were six people working there and we worked as a team. Now we didn't all work at the same computer, which was what mom programming we're going to learn about a little bit today. But we worked with six people that could communicate with each other all day long. And as we did things we were communicating. We had one really smart guy who owned the company and he worked at the whiteboard. He would come in and say, oh, we got to do this. And then he'd go off to think some more and we'd do the work. He hired me for three months to help manage this company because he had to travel to some customers. And he wanted somebody there who understood both programming and management, which I've been doing for a long time. At the end of that three months, which I thought was just wonderful, we didn't do estimates. We worked as a team. We delivered stuff daily, 1999. We delivered stuff daily. We round-tripped with the customers continuously. All the things we now call agile. So I thought, boy, the small companies know how to do this. I bet the big companies really know how to do this. That's how stupid I was because I went to work on a project that's just spinning up. There was three or four that they were just starting in my area. And one of them was at Microsoft, but it didn't look like it was very much the way I wanted to work. But this other place, they were going to do six-week iterations, which I was used to, like, almost daily iterations. And they were going to do retrospectives, but they called them lessons learned every six weeks. But we were doing lessons learned all the time. But I thought, that's the closest I could get. So I went to this big company, and here's what I noticed. They put me on a team. They just hired 200 developers. A good handful of them were from India. Now, in fact, one of the most brilliant programmers I ever worked from was on that project. He came in from India. He would have three computers set up on his desk. One was C++, one with a visual basic, and one was something else that was part of the technology. So he could debug across the components in this system. I learned a lot from that person. But my point was, they put me on a team. They put this team in a room, and then we didn't do anything that was like a team. Could you imagine, if you got onto a sports team, and they said, okay, it's time to play the game, you go play on that field, you go play on that field. Will we be playing a game together? We're not on the same team. So I thought, why did they call this being on a team when we don't do anything like a team? So starting in 1999, I started taking notes. Everywhere I went, they put me on a team. Everywhere I was, we didn't do anything like teamwork. I went on about 10 contracts over the next two or three years. And then I decided, I want to work inside the company. I don't want to be a contract. So I got a job where I worked inside the company. Same thing, they put me on a team, and I started trying to find a way to make it into real teamwork. I didn't know what that would be like, except for I had one example, that first job. But by that time, 2001, agile started coming out. I was reading a lot about it. I'm going, this is about teamwork as well. In fact, you're at an agile conference. You're aware of the agile manifesto. The agile manifesto has some values, and then it has some principles that are combined with it. And if we could have a screen, I would actually show you that. Glad we don't. So I'm going to say it. It's things like working software over comprehensive documentation, customer collaboration, over contract negotiation. So it had a lot of this stuff that sounded to me like it was about rapid feedback and teamwork. Almost every principle connected into those things. I wish they would have put one thing. One more principle would be, we value rapid feedback over whatever, you know? Because I think rapid feedback is a really useful thing. So over the next, from 1999 to 2009, I started experimenting with Woodkey as a team. I learned to do para-programming. Do any of you do para-programming? Okay, four, three, four, five. I learned to do test-driven development. I will tell you right now, I don't think I could have got through those 10 years with any sanity in my brain still if I didn't learn about para-programming and test-driven development. Now not everybody uses test-driven development, but it allowed me to get through to the end of the day without wearing my brain out because I wasn't worried about a lot of stuff. Then in 2009, I started getting really active about thinking about this teamwork and I started looking for a company that was really willing or open to try new things, experimenting with new ways of working. I started experimenting with three people at one computer instead of just a parent. Well, in 2011, I got on this contract and it was actually a job they hired me to manage a team that was not doing very well. What they wanted was a hero who could come in and save the day. Well, I'm going to warn you right now, there are no heroes coming to save the day. Not in your company, not in our industry. There are no heroes. You have to be your own hero. So when they came to work there, I said, as long as you let us experiment, I'm going to come here. I have no interference for a year. Have we replaced the projector? That's what we need to try. That's the missing piece. If that happens, then I know a good garbage can, we can put that in. This is a close range projector. I should have brought my projector. Let's see what happens. At this place where I work is called Hunter Industries. They agreed to do no interference for a year. I would work with the team for a year, and they couldn't tell me whether they liked it or not, or at least I wouldn't listen to it. The team itself would decide how they would work. The team would make that decision. And we stumbled upon, over a six month period, a couple things that have become critical. And that's what I'm here to share with you today. One of those things we called, I had learned, was called encoding Gojo. Now these people that I had learned that from, this came to me through one person who had heard another person talking about it at a conference. And this coding Gojo goes like this. In this particular model, we have five people. Three of them are observers. One of them is sitting at the computer, which is hopefully connected to a projector. And one of them is standing. And the person standing is directing the work that's going into the computer. Now this is not mob programming, but this is five people learning together on the computer. And we spent about six months doing this every Friday for three hours. We would actually get together and learn something we needed to learn. Let's say we needed to learn microservices. Is this starting to work? No. That's very good. Okay. This is interesting. So we were studying every Friday for three hours together. And the way we would do it is the coding Gojo. That was a decision the team made. The team player said, I asked him, how do you want to arrange our learning? And we could... It looks like it's starting to work. Excellent. I'll let them keep going. I'll finish this story because that way it'll be out of the way. So every Friday we would study something we want to learn technical. And usually we were trying to learn about cleaning up our code and refactoring the things that I know help that they wanted to learn. And then one day one of the team members came to the rest of the team and said, I have this project I'm working on and it is a mess. And she was asking for help. Now she was the tech lead. She was the lead person on the team. But she was learning that if we gather everyone together we could get a lot more done. And so we sat together that day to look at this code and instead of just looking at it we started working on it. So she was asking for some advice. There's a thing called read by refactoring. Do any of you know of read by refactoring? You know what? What could that mean? Something tell me. What would it mean to read by refactoring? Why do we read? Why do we read code? To try to understand it. So what would read by refactoring do? By doing it. By doing it we will learn more than by just reading it. So we actually learned techniques where you don't need to understand the code. We were given a batch of code just for fun that was written in Russian. And I don't understand Russian. There are people in the world who do I believe but I don't. And none of my team members did. And we were able to work on it doing the read by refactoring. By just figuring out what each little part did and when you're refactoring if you have a long method and this code had a long method in it which was about 400 lines 500 lines of code. That's a little bit too long. I will ask Fred George what's an appropriate length for your method in code? If it's more than three, it's wrong. If it's more than three lines, it's wrong. That's from the expert. We had a rule of about 10 lines. Maybe 10 lines would be anything more than that you better look at your code and figure out why. It was interesting. So when you read by refactoring what I call paragraph chunks of logic that you can remove and as you do that you start learning about what this code does what the dependencies are, what the problems are. At the end of about two hours of doing this somebody came into the room where we had met we were in a room like this and said you have to leave the room because we have a meeting scheduled in here is that how it is in your companies when you used to work at the same place you have a room for two hours that's a few hours. So we could have just gone back to our desks and said okay we'll have another meeting sometime soon but as we stood up one of the team members did something and this is really critical pay attention to this. As we were standing up one of the team members said let's just go find another room. That's a very packed statement. They were saying in that statement that let's make sure we keep doing this it's working so good. Their statement was let's go find another room. So we did. We found another room in our company we had about 50 meeting rooms. Usually you can't find a meeting room in the last minute but we found one. What is that meeting room like? The one that you can find at the last minute. Anybody know? Why is that meeting room available? The projector doesn't work. The projector doesn't work. The air conditioning doesn't work. Maybe there's loud trucks on the street outside. That's exactly what we found. At the end of that day we asked each other what went well today? And somebody said boy this working together was really powerful. At the end of the day we were doing a daily retrospective. And that daily retrospective can you understand me well enough? Can you hear me okay? That daily retrospective wasn't to look at what were the problems that day. That daily retrospective was to look for what went well today. This is a habit I developed over several years. What went well today? There were five, six, seven of us and this is what happened. Somebody said boy I learned a lot. And somebody else said we got a lot done. And somebody else said it was really high quality. And then somebody else said I think the most important part it was fun. If you work all day and at the end of the day you learned a lot, you got a lot done it was high quality and you had fun would you want more of that? And so this was our habit we would ask how do we get more of that tomorrow? And somebody said we'll go right to the system right now and try to book some rooms for tomorrow. After two or three days of doing that they said why don't we just try to book room for a whole week. Couldn't find a whole week room. But we were finding whole day rooms. After two weeks we said we got to find a permanent room. So we found a closet and we took everything in the closet and we shoved it in the corner. We put a desk like this in the middle and some chairs and got a projector that worked a little bit better than these and projected it up on the wall and we started working that way. That was in 2011 and since 2011 till today we've continued working that way. Now I left the company in 2015 because I was getting invited to go all over the world and speak and you can't work and do the speaking at the same time very well. And so the person that took over for me was somebody I hired specifically knowing he was my first hire there knowing that someday he could be the person that would take over for me. He was smarter than me. He was way more capable. He could read faster. He was better interacting with people. He was taller. He was handsomer. All the things that you need in a bus. And he took over for me and he's still the manager there today. Managing now 40 people instead of my seven. Manager for 40 people and how does that work? It's because these people work as teams. You don't need to manage a team as five individuals. You manage a team as a team. So you don't need this. It doesn't have all the overhead. So I want to get to the actual demonstration part. So this is the way I propose that we're going to do it. Unfortunately, we only have this tiny little screen. Unless somebody brought. Pardon me. So the way that I'm going to do it is here because I want to demonstrate some stuff and maybe everybody will come at them and look as we do it. But not yet. We'll do it when we get there. There is always a way. There is always a way. My father taught me something that is very important as a child. He didn't do this by telling me until I was he was almost gone. He was on his deathbed. And I was, let's say, 10 years old. I have five, there's six of us. Five brothers and sisters. Six brothers and sisters plus my dad and my mom. We're out on vacation and the car breaks down. And we're pulling a big trailer. So he says, he pulls off the side road and all of us are going, what are we going to do? What are we going to do? He says, ah, don't worry. No big deal. He unhooked the car. Was able to get it into town. Ended up, he had to replace the car. He cracked the block in the engine. Years later, Elvis just played while we waited for him. He came back with a used car but a new car, a different car. Years later, I said, how did you have so much confidence that this would all work out? He said, I had no idea. But I acted as if it was all going to work out. Because that would make a calm environment. And my wife also taught me that years later. So when somebody comes into the business, they don't really need the knowledge you have. They need the confidence that you're going to do the right thing. There's a big difference. So once I learned that, so in this case, what happened? I don't really still know. I have a feeling that that speaker wire is bad news. And Bill Gates built into this system a way to recover it. So thank you, Bill, wherever you are. I don't think he's passed away yet but he's actually two years younger than me. Why he made billions, I don't get it. I don't get it. But let's go ahead and I need five volunteers. We're going to demonstrate a coding dojo. Now coding dojo is very different from mob programming or what I'm now calling software teaming. If you want to know why I've changed it to software teaming, maybe I can answer that later. I'm not telling anyone else what to call this. The very first day, the very first talk I gave on this in 2012, I called it whole team programming. And everybody wanted to talk about mob programming. Because our team called themselves the mob programming team. So that became the natural name for it. I wanted to call it whole team. However, I don't buck the system. If somebody says call it mob programming, that's what people want, that's what we did. But there's two things with that name that I don't like, so I'm going to cover that real quickly. Mob has a negative connotation for some people. I pictured it as humorous. It was like an ironic kind of thing. We're not mobbing each other or other people. We're kind of more like we're mobbing the code. Maybe if we thought of it that way. But I see a mob as being a group of people who gather together to do something that they couldn't do alone. You get a mob of people, and so it was kind of a joke that way maybe. But other people didn't like it. So there's two things about it I don't like. Mob has a negative connotation and programming, it's not just programmers. It's people creating the software. And on each team we have way more people than just programmers. Now we can usually staff a team with mostly programmers, but we also need knowledge that's outside of the coding part of things. So let's go ahead and call it something other than programming, so I call it software teaming. But I don't care what you call it. Call it anything you like. But I need some volunteers. Please come forward. Just stand up if you want to volunteer. We've got three guys, so there's got to be some other members of the there we go, there's another one. So okay, so this is like the numbers aren't quite perfect yet. But that's okay. So let's come and sit in these chairs. So we need to have we have four chairs but we're going to have five people. Please leave that chair. We're going to have four chairs. Just like musical chairs. Do you play musical chairs in India? Same kind of thing. The person standing, so please have a seat. Either one of you. You're going to rotate, don't worry. The person sitting at the keyboard, I call the driver. You've seen people, they drive a car and they've got the steering wheel. When you get in the taxi cab and you're going to have the taxi cab driver take you somewhere, you don't get in the taxi and go, where should I go today? And then they, you know, there's a cricket match over here. Okay, let's go there. Oh, but you know, I also have to go to the airport before two o'clock. That's where we really want to go. So we get in the cab, we're going to say, take me to the airport. So when you're the driver, you just do as you're asked. Somebody has to give you information about what to do. So this is how the coding dojo works. A coding dojo is a social learning mechanism that allows us to learn together the same thing. We're all trying to learn the same thing. And in this case, it's going to be right here. Kind of going to be difficult, but we'll just look as best as you can look at the screen. Okay, that's what we need to do. I should have brought a big screen. I don't know what I was thinking. What's that? Yeah, we had a lot of bad luck doing that. Yeah, I almost got electrocuted. So we're not going to try that. We're not going to try that. They're still trying to figure that out. So the person at the keyboard is the driver and their job is to act like a smart input device. They're a peripheral of the computer. They're part of the computer while they're sitting there. But we're going to rotate. This is in the coding dojo. It's a social activity. So every four minutes is the way we would typically do it. Everybody would stand up and we would rotate. And then the navigator, the person who's guiding them, the one who got in the taxi cab and said, let's go to the airport. They now become the driver. And the next person in row, they stand up and they're going to become the navigator and they'll guide the process on. And usually we'll have a whiteboard nearby and it's really handy to have a marker. Thank you. Now see that was helpful. Thank you so much. And I didn't get electrocuted. Doubly good. So let's say that our problem was if we input a one it will output, and I'll make an output like that, a Roman numeral I. Now I don't know where Roman numerals were invented, but I'm going to guess they were invented in Rome. I'm pretty sure here in India you figured out math stuff before the Romans did. Am I right about that? Does anybody know the history of math in India? They usually, definitely the Romans didn't quite, they knew what zero meant. There are no more soldiers. Like we lost the battle. The only reason they needed numbers was to make sure they had more soldiers than the other guys, or they were collecting enough taxes. That's what they needed numbers for. So this, the navigator needs to guide how this is going to happen. And that means we have to have a development environment. We're not going to open up the development environment yet because I want us to learn the rotation mechanism. Now I don't know any of your names I see you all have the name tags, but so workshops, oh no no, okay. Sid, Sid. Rattena. Siva. Gaitri. Gaitri. I will forget all those names and I apologize for that. I did a workshop yesterday there might be somebody here from the workshop right now I worked with them all day long and at the end of the day I could kind of say some of their names. So I apologize for that I work at it. The navigator becomes the driver. The driver goes to the end of the line and the person at the beginning of the line they become the next navigator. So we're going to practice that first. And she came back the next morning to show us the result they had and it was better what the programmers had done. So it's kind of a weird world by the time a child is two years old they're about as smart as they're going to be and they're much smarter than us. It's all downhill after that. Okay, so when the timer goes off it'll sound something like this That's the time when this is getting on sound. So when that goes off we rotate. Now I didn't give you very clear instructions yet so let's see what you can do. Time to rotate. Teams usually can't get that the first time. It's just like with the keyboard. Let's say you're tapping away at the keyboard and you're working alone tapping away at the keyboard and you say I'm going to go get some lunch and you stand up and walk away and the keyboard says we're not done yet and it keeps typing without you. The keyboard cannot keep typing without you. So in this case, the person who hits you here who's the driver, they can't do anything without the rest of the team guiding them. Have we already lost money? I'll bring it up and it doesn't matter yet. We'll bring it back up in a minute. It's not good. Make sure I don't use that. I'm going to take a chance and play the ledges. This is a Dell computer. In the U.S., one of the companies you can get computers is called Dell. I bought one similar to this, a little bit smaller because it was lighter weight. I was using it one morning and I don't know what happened but I think the charger with this plug into these, you need an adapter. I don't know what happened but the electricity behaved poorly and it blew up my computer. I contacted them and it just got out of warranty and so I... Uh-oh. I may not have the correct adapter. Do you have an adapter that will work for this? Yes. This type will take this? No. No. Yeah, it will blow up immediately. Maybe you can figure out how to get them. Yeah. The technology sense is strong like sigils. It's a hardware. Okay. That's working right now. Cross your fingers. That is not blown up yet. Let's see if I can get it to come back on. Not too bad. I don't know why it's thinking I wanted to open that. We're not going to have to worry about it for a moment. But you've got that plugged in now. Yeah, so we can just... So let's switch it to mine. So we'll need to plug into this. See, maybe make sure we've got it up accordingly. If all of us get through today, still alive, I'm going to be really pleased. Don't worry, it's going to work. That thing's working. Let's try. We'll go on. So the driver acts as a peripheral of the computer. They don't do anything unless they're asked to. But that request could be at a very high level. So we had the other... Can I ask for a second? We had that other computer working. Pardon me. We had that other computer projecting, right? Maybe we can use that computer. Let's see if we can get that projecting again. And then we'll use a different development environment that I got. We probably won't have time to do much coding. But this is how work usually goes, right? In the last minute, then they go to the programmer and say, here's what you need to do. You got to have it done by tomorrow. That's the tradition amongst software development. Okay. Yeah, when you need to have it done yes. So let's go ahead and rotate a second time. So if the timer goes off, let me make the sound. Rotate. Okay, these folks got it immediately. You are better than maybe 90% of the programmers in the world. If that is working, then let's go ahead and bring that over here. And I'll just close that up. That's all right. That's it. That's okay. We're actually going to get up to a little coding problem. Can you at the keyboard, I'm going to navigate you for a minute. That means I'm the one guiding. I don't want to tell you we're going with that. I've got you're the navigator and you're the driver. Now you can call these other things. Some people say it's the thinker and the tightest. You call it everyone. I've got those terminology, driver navigator from the old-time pair programming terminology. Some people call this driver navigator. They sometimes call this strong pairing. So now what we're going to do is we're going to go ahead and get started. So if you can navigate in a browser to cyber-dojo.org we're actually going to try to do something. Can you get to a browser here? Very good. Cyber-dojo.org array. I've worked with the doctor about four years writing a program. He was trying to do electronics, medical, electronic records and talk to patient interactions. He happened to come from India. He was a teacher at a big medical Stanford college in California and he lived down in my area. He wanted this software. So he learned to program so he could have the software. But when it got too difficult, he went out and looked for somebody to help and I helped him a little bit now and then one day his head programmer quit. He called me up and said, what do I do? I said, well, I was yelling at them. He said, this is easy. He said it was too late. So from that point on I kind of took over the project and what I tried to do is tiny steps so that the people there could make progress going forward. We're going to do that right now. So I'm going to navigate in tiny steps. If you could go ahead and hit the creative new practice. Let's select Roman numerals. Did you notice he saw another thing with Roman in there but it wasn't the right one? I didn't need to tell him. You're going the wrong way. Could you imagine the taxi driver starts taking away and you go, oh, look out. There's a red light. Oh, there's a pedestrian over there. Oh, watch out for the dog. The taxi driver is going to pull over and say, I don't need your money to get out of the cab. So you give too much direction, that's not good. Just the right amount. You can tell when you've given too little because the driver could ask, I don't quite know what to do. So we selected that, we hit the next button. The next button will take us where we choose language. Now, I don't know what language kids use nowadays, but I learned to see sharp, but I'm going to use Java here. So let's choose Java. I actually learned first and basic. I don't know if they've got basic. But if you just find Java and use it, the one is Java 18 with UJU. That gives us a baseline that a lot of people are, are you off? What languages do you program in typically here? Java. Java, Python, Ruby. Python, Ruby. Any other languages typically? JavaScript. JavaScript is probably the most common one I've seen nowadays. And it's really not an easy place to work. But a lot of people use it. Okay, so now we can hit the next button again. So I'm navigating. I'm guiding the process. He doesn't do anything without me saying. When I do this demonstration, sometimes people skip ahead. You think you know where we're going. And it may not be the way. So that slows us down. So if your keyboard skipped ahead, would you use that keyboard? You would quit using that keyboard. You are the keyboard. So the person, the keyboard, you're the smart input device. But don't get me wrong. I don't compare humans and devices. I don't think humans are devices. Devices are dependent. They show up how trying to do that work. Yeah, I can't compare humans. There's no comparison. That's a joke, of course. So we can just hit Ensemble. Ensemble is another word some people brought in to describe a pair of mob programs. Because it sounds kind of nice. So we set that. And now if we hit the OK button, we're not really needing to use Ensemble here. We can use it because we're going to access the single user. And this takes us to a development environment. And it has version control. We won't worry about it unless we need this. So once we have these traffic lights, they tell us when a test passes, when a test fails, when a test goes through. So this, yes, sir? What's the code? Yeah, so if you have 10 programmers who are going to do this for fun, and they're distributed all over the place, they could actually just take the URL, take the, what do they call that? Yes, that's the URL, right? Yeah. Send it out and zoom, and everybody click on it and they'll have this environment. There's one trigger. Only the driver should hit the test button or type stuff. Because otherwise it gets out of whack. And it tells you, hey, are you mob programming? It actually says that. So that means the other person didn't hit the test button. You didn't hit the refresh button since the other person last hit the test button. We're going to hit the test button. Sorry for making you stand so long. Okay? He's young. He can take it. That's okay. You need to take a call. Hit the test button, and we will see the test fail. There's one test in there. It comes from the Hitchhiker's Guide to the Galaxies. Has anybody read that book here? Hitchhiker's Guide to the Galaxies? There's a joke in there about the answer to everything. It says it here. Life, the universe, and everything. Expected 42, but was 54. So let's see why our test failed. If we go to the code, well, let's look at the test first. Go ahead and hit the same. It says Hitchhiker's Test of Java. Yeah, that file. And that'll show us the test code. This is one little test to make sure it's working okay. And it's expecting a 42, but what we got back was 54. So let's look at the code in the hiker.java. And can anybody tell me why this isn't working properly? Yeah, so we don't know what base we're supposed to be working in. This is base 13, I think. Does anybody know? 6 times 9 in base 13 I think is 42. Oh. Or we're going to base 10. Does anybody have base 13 in their computer? I don't know. So let's make this pass. And we're going to make it pass by just returning 42. Hard code, the number 40. So I'm the navigator, and he just does what I just asked. Just return the value 42. If we went back and see is it closing off properly? Yeah. We need a semicolon and get rid of that last thing. Oh, I see. No, never mind. That's good. Hit the test button. We'll find out. In fact, you never need to try and figure out is that code going to pass? Right? Because it's going to tell you anyways. They didn't even compile for someone. They said, oh, they did pass. Okay, well, they're passed, so we're good. That's because we just got to bracket on the wrong line, but Java doesn't care about that. Faithfully, we're not working in Python. They don't even have curly braces in Python, do they? No. What were they thinking? I'm just kidding. I learned it basic. They didn't have curly braces in basic. But that was during the war. There was a shortage on curly braces back then. Okay, so now we've actually got something working, and we're going to go ahead and rotate. So we took a long time to get here, so let's go ahead and rotate. Rotate. And I'm going to use the timer and I'm going to time as we go. And the first thing we're going to need is a test for this first requirement. So you're going to guide, and this is Sivanesh. Sivanesh. I worked with a gentleman in California in that 1999 project whose name must have been 15 syllables. He was from India. But I guess you don't all have really long names, right? But some people here have really long names. But this is easy. I can kind of get that. And I apologize. I have a very short name comparatively to some of these names here, but I'm not going to say sometimes. So you've got to guide it into writing a test. Do you know how to write tests in Java? Okay. Let's go to the test file and it teaches you something that's very, very valuable. We get paid an amazing amount of money to copy and paste. All you need to learn is how to copy and paste and they'll pay you to be a program. Okay? Just a little secret. I'm recording this. Can you guide? Do you know how to do testing? Let's see what happens. You're going to have to describe a new method we'll need. So besides the test we'll need a new method. That's about where you just started was enough in less... Seven-ish. You said text drive, take me to the airport. And he doesn't know how to get to the airport. You say just go down this road for 15 miles and I'll guide you after that. So you watch. Whatever he does, you guide him as needed. So we want the test first. We're going to write the test first. Yes, you were correct. Thank you so much. That's for the power plug in or for the mouse. There's a mouse. If you'd like a mouse, there's a mouse. Now, while they're doing that I can be talking to you and that won't disturb them. What we found as soon as we start working this day was we can maintain enough focus so the rest of the navigators in this case they are not allowed to talk folks, but in that minute they can be discussing the next thing we're going to do. This is sort of how we would do mob programming. Now, he's guiding. Now, this is not mob programming. Let's be very clear. This is a coding dojo that uses a lot of the same techniques as mob programming because we borrow those techniques from the coding dojo to do the mob programming, but a coding dojo has a little bit more strict rules. Strict rules. To keep it from becoming chaos once you get to working with each other you don't need those strict rules. It's just like when you're a child and you're going to play a game and you see some kids down the street and they're playing some game you've never seen and you go to a kind play what do they usually say? Yeah, come on, join me. So you get in and you say, what are the rules? They say, don't worry. You just start playing the game and in a minute somebody hits you and you went out of the boundary line. So you've learned that rule. Pretty certain you've learned all the rules and you're playing with these kids and you're all friends and that's at least how my childhood was. I only got beat up in one. Very infrequently. Okay. We're just letting them work. I get a big kick out of this. We're watching developers in their native environment. You're thinking about what you're going to do when it's your turn. So I'll explain that. Navigator is guiding the driver but the observers, I'm calling them observers for the moment, they're waiting their turn. There's a very valuable thing we're learning when we're doing this. We're learning to keep our mouths shut. If we can't keep our mouths shut it's very difficult to work on a table. So when it becomes your turn though you've been watching this process and you're ready for the next step and that's what your job's to be. I have one rule about this. When it becomes your turn you can't say, I don't like this. Delete everything. You have to take the next logical step. So this is for the social activity of doing a coding dojo. Not necessarily how we do our program. We don't take turns navigating. This is the way I do it. Navigate. We navigate as a team. Now you're doing pretty good and no pressure but you've got 13 seconds left. Can you run the tests? Yeah, you could go ahead and run the tests. And who knows what we're going to see happen here. I like where we're at, right? And it's telling us some stuff we need to deal with. So the timer's just now going off. I'm going to turn up the volume so you can hear that. For the next time like this. And let's rotate. Now it doesn't matter where we're at. We learn this. I learned to do this in doing the coding dojo with dozens and dozens of user groups. I go to user group. We do this activity. I think they want it. Some kind of little software they want it. And we actually create it. And I learned that as soon as that timer goes off we just rotate. Otherwise everything slows down. So now if you're turned to guide and what was your name, sir? And your name is? I'm getting closer. So you can guide beyond now. Okay. I thought you were going to fix it. Fixed the issue that was coming in. And get it running. Now one thing I learned from a really great program is let's look at the output. The output tells us our first problem. We need a new method. It's telling us that that one doesn't accept a parameter. So we quite need to invent a new method. Let's create a new method. Well, write the test first. The answer doesn't even include a parameter. So we have to create a new method first. For the better, we have to create a test first. So call out the line number. You are going to change. You are going to change the line number between the method. We'll move the repeat whatever you want. We'll do that. You'll need the parameter. So you have to create a new method to test that. So I'm going to give a little guidance. Just call a new method. Give a new method name to call. It doesn't exist yet. Call into your test. For the letters. Call in. Call one. Call in. Call this. I'll tell you your next problem. And then now you go and call the go to title. We know that this is such a method. It doesn't exist yet. I'll tell you. This is like Shakespeare. The guy is always talking to me. I'm going to go back to the recipe. I'm letting them struggle for this. Because we're not trying to learn how to code. We're trying to learn how to interact with it. There's a big difference. I played music when I was a young old. I wanted to play with a band. So first you practice alone to learn enough so you can get somebody in a band to say, yeah, come play with us. But now you have to learn how to play with a band. So you've got to learn some stuff alone. And you've got to learn some stuff as a team. Did we get the picture here? This is Park. They don't even know how to code. They're trying to learn some stuff about working as a team. And maybe in a language that they're not used to. Oh, by the way, I can act as Google if you need Google. I can help you if you need Google. We're done. We can do the free line. I'll input it into one. Go ahead. Speak up. Next example. I'm actually next door. We can do three terms. What we are forced to do. We can shut them down. So how does that facilitate the knowledge sharing something with you? When we're working this way, we will mostly have the skills we already need for interacting for writing the code and for doing our own work. We're just bringing the people together. So they were struggling for other reasons. But that's just part of the fun of this. We practiced doing the coding culture for six months before we even realized we wanted to work together this way. And so now I can take a team. If I'm doing a workshop, I can take a team who's never tried this, and by the end of the day we're working on real work. Or by the next morning we're working on real work. So you get through the bits of the mechanics of this. You have 27 seconds. No, 26. It keeps changing. You have only a few seconds left. But you get the picture. So this, it just gets us used to the mechanics. We usually lighten up the rules until at the end of the day of my workshop. We don't have any rules. Because it's more like how does this team want to interact? Not what do I think they need to do to interact? But we start with what I think they need to do. There's our rotation. So we stand up and rotate. I just want to get them started so they can make their own decisions. I want to get a look at how can you go back to the communication. I've done this 2,000 times. I love it there. Take the method that you created and I just paid for it. And I'd like to put it inside the class party the problem is that you these are the various online numbers. So online numbers are really important. You learn to use online. You need to break it. 9, number 6, that means that your class when somebody says it's obvious what they mean is it's obvious to me. He's done a really good job because he saw the problem and he wanted to say the solution but now he has the chance to see the solution. This is why you use online platforms. All this indentation and stuff is forced on you. And we lost a little bit of time in the beginning. I don't know if any of you are here but it's a slight technical issue. We were nearly electrocuted and we lost a little time. But we're still making sure 9, number 19 will do the right thing too. So he's navigating a very finely great way. That's the right word. And sometimes you need to do that. So you express your idea at the highest level possible and you go down to the details as needed. So if I was guiding I wanted to take a taxi to go see a place one of my ancestors lived in 1630 in England. I didn't know what the place looked like. I had some instructions. You pass the church make a right turn go over three bridges make a left turn. Where the old barn, burnt down barn is still partly standing you're going to make another right turn. Please take me to the farm where my great-grandfather eight great-grandfathers back lived in 1630 because he doesn't know who I am and he doesn't know I'm a great-grandfather but my instructions could get us there so we give details but if I were to say take me to the airport he would just have to ask one question is he throw you want to go to or what's the other way? He doesn't need to know anything else. So they navigated the level as necessary to do the right now we haven't yet compiled for quite a while yeah but we're going to eventually and the test passed alright so we're ready for a new requirement now this is a very very simple programming problem but I use it for teaching how to see duplication. In this case the test-driven development what you try to do is you try to do the simplest thing you can and then you look for problems in the code and correct it all you have to continue on you have 28 seconds left so in my test I will make a new test all in the same language now that was very good navigation if you didn't hear you say I want to test just like the other one if you want you can copy and paste it but it doesn't need to tell much more because she probably knows what to do and it's time to rotate so you stand up stand up and rotate when we think good at that things move quickly now he has to switch his brain from I was just navigating to now I'm following directions now this was our strict Cody Dojo approach that I use you don't need to do it this way you can rotate the other direction where the driver becomes the navigator I didn't like how that worked are you ready to take it further did you hear that confidence it's like my father in the car the car broke down I don't know if I even have enough money to get this fixed but on the outside he said yeah no problem just play I'll be back in a little while he just said yeah I'm ready to go forward full confidence it's the only one allowed to speak boy everybody was ready for that so so the driver has to just release I think I've done this so many times in real life that my that my serious advice is the driver just releases thinking so we're separating the problem and solution area from the Cody can I ask that you can ask him exactly ask a clarifying question if you know how to do it you just do it so the instruction was what was the instruction so you need to have a method so I think what he's saying is we need a conditional so we can return it to so we we can infer because this is why I like to have a smart input device we can speak to them like a human they can fill in the gaps our keyboard cannot fill in the gaps our keyboard you click on it and it does something with this you click on it in a very much higher way we just say write a new method put in a condition and we do that there's probably ten different ways to do this in fact there are probably a hundred different ways to do this and my father would correct me and he would say there's a thousand right ways to do anything so we must never think ours is the one right way that's good to remember passed okay I would clap for you but I'm holding my phone so I didn't give hardly any direction on that but the point is I'm going to stop this and you don't lose your whole turn you kind of caught on how this works and now everybody's got a pretty good idea this will go a lot smoother now the problem of this little so I'm using this to teach duplication we already see that there's essentially two ifs here we only see one written out but this is the problem of duplication duplicate things don't necessarily look exactly the same so in this case we say if the input is equal to or equals one do this and I'll say if it equals anything else so that's an implied if right so we already can see there's a smell but I think it was Bob Martin or somebody who said the first duplicate code comes for free wait till you really see the pattern so I'll give you another one and you solve it the simplest way you can and then we'll look at removing the duplicate code and we have time and you know I didn't know much more than this what we're doing right here the first day I started deciding I need to write code for myself so we had the computer for a couple months I decided I need to write code I wrote a little stuff like this and then I said I need some software and I can't just do this so what is the first thing I need to do what's the next thing you need to do you need to save it to a disk that's all I need to learn to have something that I could use and then the next day you'll be able to print it out so I have to learn how to print it and it's going to be awful these little dot matrix printers so you have to learn how to format your printing each little thing you learn a little bit at a time and pretty soon you're old enough to retire and then you go working so that's what happens once you've got it on turn your timer back on do you see immediately go to a test how many of you do test-driven development if you don't it's worth learning I would be much crazier than I am if I didn't have a test-driven development we are supposed to go to go free I would say I would say I would say I would say I would say even though we lost I have power at first I don't know how much we have we made really good choices I'm quite impressed it is a part of our it's like teaching about architecture so he has a pattern that's already working and he's following the pattern and this is the way I like to do test-driven development get the thing passing as quick as you can and then let's figure out how to do that now this is a part of mob programming but I like to have a test-driven when I'm doing mob programming and I like to take baby steps Tempeck will say you learn to take the baby steps and then you can learn to run but if you can't take the baby steps you can't run confidently passing why didn't we get a family test though did we forget to run our tests before oh each time we write a test we have to run it to see it fail so we'll do that as we go forward but now that time just went so let's rotate but now what we need to do is start repackering the code there's a pattern in the code and your job as the observers right now you're going to think about what you're going to do when it's your turn if 7H doesn't come up with results to them once you've got to be thinking about how you're going to bring this further what we need to do now is work on our code that handles one two and three getting rid of the duplication so what's the pattern how can I make this more algorithmic than just brute force because right now it's brute force if you go to your kitchen you say I want something and so your kid opens the refrigerator and then they point to the first thing you say no not that they point to the second thing no if you came up and said hey I would like to code they could just get you to code that's the algorithmic way to do it we don't want brute force pointing to each one they call this don't dial every number and so we want to program our way so your tests are all passing and everything's good so now we need to go to the code and refactor to get so you might want to talk out loud you might want to use the whiteboard and here's my idea and then once we have the idea we'll try to turn it into code so do you have an idea how you would get rid of those ifs so it's his pattern it's his key, you're the keyboard you don't get to talk if your keyboard talked back to you you would throw the keyboard away and go see your doctor or a priest or a priest it is like the traditions this is what we have planned but if you want to remove the if we'd want to get rid of the ifs and keep the same results how do we do that that's our job so I'm going to put a pause on here he came up with a solution and if I was working this way I would say let's try it but I'm going to jump to the end on this one because I want us to see he has come up with a slightly different solution if I'm sweeping up in the kitchen when I'm done sweeping I should take the dustpan get the stuff in the dustpan and put it in the trash but what if I sweep up nobody is looking so I just shoot everything under the refrigerator what did I actually do I didn't clean up I just moved the mess from out here to somewhere where it's even harder to work on and I don't want to move the mess anyway we're kind of just moving the mess we're still needing to work with each of these in our code somewhere and we don't want each of those in our code does that make sense so I don't mean to throw away your idea because it actually will work and I usually wouldn't skip ahead but we have almost no time what I'd like you to think is think of something that would be even less than having an array less why I don't think we're ready for that we can have a class for each number so 1, 2, infinity well we kind of have that conceptually these are primitive so but now take your time to think about it you have three minutes almost so don't I'll just be quiet and see if you can come up with an idea and you should be thinking about what idea you want to use he doesn't know we'll go through these three minutes nobody's talking you know I put you on the spot I am on the spot but that's okay as a team we learn that we can't all have all the answers all the time there's at least one pattern here that we need to see here it doesn't stop those of you who are watching just take a break I would suggest that there might be a better way without any your array solution would remove the S as well so I know that would work and we can code it quickly I want to take the next step that's the kitchen that's the kitchen we don't need to know about these things in code is unique the first time we come upon something we need to do a little thinking then we start seeing some patterns and when we start learning those patterns we start thinking a little easier so let's go ahead and rotate let's go ahead and rotate and I want to answer one question we have a question so this is an important part one of the very strict rules I have when we're doing the coding dojo is that the person in the driver's seat does not use their brain for the solution when you're mob programming if you're in the driver's seat and you have the only idea you think you have the only idea and nobody else is coming up with one what should you do step out step out this is what keeps this from being us just watching somebody coding that was sort of what we dealt with by having it this way otherwise it was going to do just watch that doesn't work my friend so the driver would become the navigator this rotation is for the coding dojo we would not necessarily do that with our mob programmer some people do rotate but I typically would whoever feels appropriate they would just say oh I can navigate this and they stand out and navigate it and the rest of the team allows that to happen remember my original story somebody on the team said let's find another room and keep working this way that's the person with the idea and it's our job this is a secret to working with a team when somebody else expresses an intent we run with it then anyway you would ever play like a basketball or football where you keep the ball around you know what I'm talking about if the team member gets the ball they don't turn over and say what should I do with it what do they do they look around for someone else who's open and they get the ball to them I played soccer and they called soccer in the US when I was in high school my senior year there was no competition so we were the soccer team so we were the champions because we couldn't lose but the point I'm making is you can't play a game like soccer or football if you don't pass the ball you know and you can't have how many people on the soccer team 11 you can't have 11 goalies you will never lose and you will never win because they can't even get the ball in there the whole goal is filled with goalies so it's your turn to guide and each loop you can append I so he's saying go ahead and say that and get it on the board so basically if they input this one then for this two you look twice and then two are if that's how you go at least for this requirement that's your goal so we need to simplify the intention out loud we're going to use a loop where you go through it however many times the number that's passed in what do we call that number here input we need better names for that that doesn't tell us much when we get to the end of that we will have a new stream constructed so I'm saying out loud the basic idea if you know how to code that you need no more instruction but if you don't know how to code it he will help guide you enjoy it so I'm going to draw that here kind of like this input X for now and so input input times I so if our language I think Python lets you do that multiple there's ways to do this actually in Java but that's the solution you want so if you can code that loop and you know how to code it in Java you do it you need a polo these are brave people just to lead all that you don't want it go ahead and delete it he's guiding, I'm not guiding I'm just pointing out how brave he is you want to have it? maybe from the line number line number is really important line number you guide so now while they're doing that or these people you all understand the idea now wherever they're at when the timer goes off you can guide through the next bit and pretty soon we'll have this done it's not important once the big intent is on the details that's a refactor whatever you call it that's a refactor whatever I could answer your question can you can we only have when this turns over we're done for the day it works extremely well remotely so what can we remotely my favorite way to use something like any desk have your server set up with the whole development environment each person logs into that development environment we can see any of the work that's being done we just take control of the keyboard when it's our turn to take control of the keyboard we use something like zoom for our discussions that's my favorite way to do it but there are other ways you can use it zoom with screen sharing each developer has a development environment on their box and they just check the code in and check the code out and then like the next turn you can take a little longer for each turn but you can do this really quickly using any desk for me with any desk it gives you remote access to the use of a computer as if you're sitting in front of a computer now if your internet connections are not good that's not good so this may not be so good you have to have a decent internet activity but I think you did I saw a report yesterday I have like the super fastest 5G built-in the interaction this works this works so we almost have the solution we have 4 minutes left in our session now he's guiding at a very detailed level right now we're writing code out loud we try not to work that way but we have a situation here where not everybody has the skills in this language and we need to go down into the details just like my other taxi drivers once you pass a church make a right turn you know in 2 miles we'll go over 3 bridges we're going to make a left turn I don't get many more instructions than that just so they're ready for what's coming up next that test mode we're getting back to the empty stream I'll give you an easy way to do this and then we'll begin line 14 is the concat we just go plus equals that will also work so remove the word concat and the dot space plus equals run your test if that doesn't work we're done either way it worked when I started working this way with our team doing mob programming the very first day everybody said we got a lot more done the reason we get a lot more done when we work as a team is we don't have the queuing that would happen when we work alone so if I'm working alone and I go oh I don't really know how to do this then I go find the person who I think knows how to do it and then they go I'd like to help you but I gotta finish this so I'll talk to you in an hour so we're including queuing time into everything we do and the more we separate the workers the more extended we make the queuing time the slower our work goes we got a lot done that first day after 2 or 3 weeks we started recording compared to how we worked exactly a year before how much were we getting done and we were getting 5 to 10 times as much stuff done now I won't say that's a guarantee what you're going to get and there were other things we were doing we were learning test-driven development and we were learning stuff like how to break stories down into little very small pieces and so on but the amount of stuff we were deploying to our users skyrocketed because of not necessarily just mob programming but partly because the mob programming or software team that we were doing removing the extra inventory how many things are we working on we have 5 people one thing at a time we are doing naturally doing something they call limited whip there's work in progress but why is that good having one thing in progress is good because our brains aren't multitasking things our brains cannot handle multitasking I've only read some research I'm not an academic I barely understand enough to mumble out a few words but from what I understand is that until we complete something our brain is going to work on it so if we complete something deploy it we can work with a clean brain on the next thing and we kind of experience that and we believe that's what was happening we were no longer having a mind jumbled up with oh yeah I got to call this guy I got to get the permission from the database expert to do this I got to talk to the product owner about that every morning somebody says I'm blocked in your meeting then why are they blocked today in the morning meeting so yesterday when they were blocked the moment they noticed they were blocked should have been dealt with this deals with it as long as we have all the skills and knowledge are sitting here now let's give these folks a hand I think you've done it on a hot scene but your thought process was really useful for the team to hear so when you gave it out loud the rest of the team can use that info and the whole group could so this was a little tough these are the bravest people at this conference so thank you very very much and no electrocutions today that was a pretty good thing and we actually got everything working I can't believe that I can't believe that thank you everybody I think we're officially kind of done I'll answer questions I'll stay here and answer questions I think that way you probably have a half hour break until the next thing I'll answer questions I was thinking of that same being you and the team what should I be doing but I think I've got this right thing so I don't expect you can not talk to the Roman numerals yeah this wasn't about learning Roman numerals when you're done with this workshop you don't go to your resume but I can add Roman numerals because no one will ever hire you again if you put that on your resume is this a way to sort of get in with no form of programming that's one of the things we did this every Friday for three hours not knowing it was going to result in mom programming but we were learning to keep our mouths shut we were learning to express our ideas we were learning to just go ahead and fulfill someone else's idea and how to continue so when you're the navigator and you get done and your time is up the next person should be able to continue your idea that means you have to be good at giving the highest level explanation you can input times I you can construct a string in any way to do that but that high level is what gives so you learn to do that so the next person knows what to do to complete and that we saw happen we saw that happen so this is it so this is teaching us those three or four things how to share how to start learning to share ideas it took me two years after I started to prepare programming back in 1999 or 98 it took me about two years to where I could articulate my idea and that's when I really learned the value of the white board white board is it gives us a shared memory location like your computer has a shared memory location nowadays and if you put it up there it's temporary memory location when we're done with this we can throw it away you know your computer has that inside of it but we want it for humans this gives us a shared memory location so two applications in this case we need about the same thing and not have to explain it over and over so we use the white board we get our highest level idea we only go down to the details when needed and we saw that happening too this was a really compact demonstration of this but when we're not programming we would not necessarily go take a nap it's whoever is appropriate at the moment says yeah I'd like that because they just do it if they start stumbling someone else comes forward and helps we need to be good at deferring to the other person but for the other kind of person it's too pushy we have to learn how to back off there's a lot more than I could teach you in just a few minutes this is uh this takes time and uh work on easy things at first what changes in the working setting uh support is done but you need a new board it's good to have a board of some kind if you're online you just use a mirror or whatever camera's on then I like to have all these cameras on them remote there's a remote mob programming dot org if you look up remote mob programming dot org then you can see their instructions on this and this guy Siemen Harris out of Germany uh the remote programming dot org see if I can spell yours that's it how are they going to do that he's got a list of um of ways to work he can get his book for free in an electronic form and here's like what do we do and he has a little explanation down below for each one of these things I don't necessarily buy into everything he does don't try to use them on such a down that's just stupid but he's you know remote to everybody it's hard to work um hybrid it's really tough remote everybody camera always on and so on he's got that list of things and you experiment with them it's all about an experiment it's never here's the rules it's not like you're playing poker where if you don't follow the rules someone else will shoot you right you you you just the rules are there to get it started and then we can forget the list you have a question is that right no I saw your hand up like this can you give us an example of the other world now in the software systems have grown up very complex yes right business requirements are coming in a different mode can you give a real world example what's up put this in place I prefer to have the product owner as part of the team so I'm just going to show you we don't have enough time to do too much here can we get to YouTube here it looks like you can and I don't know why this isn't at the top of everybody's search not in the real world who's that? this is a video we made in 2012 oh you have to watch it ad first this is stupid so this video shows us working for a 8 hour day minutes. So there's enough instruction here to tell you quite a bit. We spend an hour every morning studying together. That keeps us learning all the time. We don't do a stand-up because you don't have to ask what did you work on yesterday because I was there. Now I'm getting more forgetful now so maybe I do. But we stopped having meetings. Now we were using projectors. Nowadays you might remotely you're going to use whatever your personal screens are. There's the driver. Now that particular person is a tester. I hired him as a tester but he just joins us in the rotation. That's another tester. She's joining us in the rotation. There's a product owner. They come and be with us. Now sometimes your documents can just work off of documents but that's a very weak form of collaboration. I want the human there if we can. Matter of fact we learned a lot from that. That's a whole other story. But having the product owner there we've found to be very powerful. Now we've reloaded. We started on the next thing probably for another product owner. I'll take your question. Go ahead. Go ahead. So what's the contribution of the product from this entire? The same thing as they normally are. But because things are moving so fast they're there to answer the questions that we need to ask a product owner. If we need to wait 10 minutes to ask a product owner a question we've taken 10 minutes out of our day. But when we're working on stuff we might have two, three, four, five questions. And that we've lost an hour of that day. But they don't usually get back in 10 minutes. They get back, oh I'll be with you on Tuesday. We've lost a week. You understand what I'm saying? The product owner is not separate from the team. Matter of fact if you can build, if you can make software the way I did the first 10 years of my career I was going to be the user. So I could work directly with the user. I was going to be writing the requirements which I never wrote requirements. They were always in my head. I was going to write the code. I was going to test the code. All the roles were in me. But we can't do that in our place of business because we have all that knowledge that's spread out all over the place. If we could pretend, if we could put the five people here that brings it back to just like it was one person with all the knowledge we can raise to all our work. But because we separate these people there's no logic that makes it clear to me that separating people is good. People ask me, is there any research that proves that having people work together is good? And I say, I will just ask this question back. Do you show me the research that shows that separating people is good? Because it would be the exact same research and that's how you're working now without research. Why are you working that way without research? You're separating the people. Does anybody here have research that proves that separating the people is the best way to work? I want someone to come forward some days and say, yeah here's the studies done. The studies on pair programming pretty much showed that yeah it pays off to do pair programming. And I could extrapolate on that a little bit out to that probably works for the team. We found it was much more effective so the product owner either has to be on the team or the team needs to become the product owner. It's going to tell us most of it. Millions of developers across the world. Whatever they're selling, I'm out of time. Does that kind of answer the question? If the product owner goes, hey I'm just wasting my time, well let me show you another video. Yeah you opened up 10 worms here. Yeah. There's a video that we made in 2016 after I left the company Aaron, who was the guy that we hired for the testing, he was my first hire after we started working this way. He liked to make videos of stuff so he did a video, that first one, and then he did this one in 2016. It was a year after I left the company. There are now six teams in this picture. One manager for six teams. The manager sits right over here. You can see him he just showed up for a second there. One manager, he doesn't need to do much managing because we can self manage. Do any of you need to be told what to do? I can guarantee you you do not need to be told what to do. We just need to make it where it's easy for you to do what you need to do without being told. Now I put the sparkles in there to keep you, help you stay awake. Did that work? If you're more awake now, it doesn't work. Six teams. Now watch this. There's a continuous deployment area. It used to be another team was in charge of that and now we're in charge of it. That removes the cues. Watch this. There's where our product owners sit and we make them wear a tie so we can tell the difference between a product owner and developer. Just kidding, that's a joke. But they're there so they can be with us whenever we need. I saw a team in London where they had six teams and in the middle was where the product owners sat. So they were always immediately available. I'd rather have them there with us all the time. I'd rather, I don't think that it's an artificial role to say there's a product owner. Everybody will give me reasons why we need that. Well there's other things they need to do. That's not other things that the team couldn't do. It was the other things that the product owner needs to do. Anybody can do those things. You know they're going to go talk to their customer. Oh okay. We can learn to talk to people. I learned how to talk eventually. So we can do these things. But as a little kid I didn't know how to talk. I eventually learned by the time I was one year old I think I was forming words. We can do that. I'm just making fun of the product owners. I'm sorry. Other question. Yes sir. So we are talking about coding dojo and mob programming. And I would want you to sum up all the differences so that the people here also understand like the actual coding dojo and mob programs. Yeah and the people who are you know watching that will be watching this video. Yes. So hopefully they will watch some of my other videos because I explained a lot of this stuff. But the coding dojo is a social activity for learning to interact with each other. But it's also a social activity where you can just have fun together. I've done with groups of 10 even 15 people sitting in an array like this with a formal location. Maybe you'll get two turns to the keyboard. So it's an artificial device. Mob programming. I typically only rotate the driver and everybody else can contribute to the navigator. That driver's term is done. But you don't need to rotate the navigator. The navigator. I mean the driver. The driver that just say I don't want to type anymore and somebody else is down. So the main difference is this is very structured so we don't have chaos with strangers. And when we're working as a team we learn what are the rules we want to follow. And the main rule is probably this. You said that I like to follow. But you're ready to start solving on the cloud or do a cloud free program? But they want to begin more as a team. What does that actually do? Okay. The main strict rule that I followed and not everything does is that when the driver starts driving without any instruction we're going to have a problem. Now they might say let me show you how you do it. That's kind of okay. But typically we would say they don't do the thinking. We're separating the solution and problem space from the code space because those are two separate things. The details of the code space will clog our brain if we're trying to think about the bigger picture. So we separate that. So the person at the keyboard just does not insist on trying their ideas. They wait until it's their turn to leave the keyboard to then share their ideas. Now that's just a little bit but I have many videos. There's two you can find from the two conferences. One is on the introduction and the other is on while programming flow. And that's a good start. Thank you so much. I'm happy to be here. Thank you so much.