WEBVTT 00:00:16.820 --> 00:00:18.220 JOE MOORE: My name is Joe Moore, 00:00:18.220 --> 00:00:22.590 and I've pair programmed for almost thirteen 00:00:22.590 --> 00:00:25.710 and a half, almost every single working day. 00:00:25.710 --> 00:00:30.730 And for the last four years, I've pair programmed 00:00:30.730 --> 00:00:33.860 remotely using remote pair programming full time, 00:00:33.860 --> 00:00:37.340 out of those thirteen years. I work for Pivotal Labs. 00:00:37.340 --> 00:00:41.250 We're a Agile software-development consultancy. 00:00:41.250 --> 00:00:45.920 And I work remotely from Atlanta. 00:00:45.920 --> 00:00:48.080 There's two of you who didn't hear this. I'd 00:00:48.080 --> 00:00:52.260 love feedback at bit.ly dot com slash pairprogrammingama, it's 00:00:52.260 --> 00:00:56.920 totally anonymous. And, also, for the other people who 00:00:56.920 --> 00:00:59.050 walked in, there's a microphone here and a microphone 00:00:59.050 --> 00:01:01.680 over here. If you have questions, it'd be great 00:01:01.680 --> 00:01:03.649 if you could make your way that way and 00:01:03.649 --> 00:01:05.590 start, and queue up while I kind of blab 00:01:05.590 --> 00:01:08.840 on about some other stuff. If not, I'm gonna 00:01:08.840 --> 00:01:11.450 grab these mics and I'm gonna run around, and 00:01:11.450 --> 00:01:15.050 do a, I don't know, a Maury, maybe. I 00:01:15.050 --> 00:01:18.640 don't know who's, is he still around? 00:01:18.640 --> 00:01:22.270 Anyway. So, again, thank you for all, everybody for 00:01:22.270 --> 00:01:25.710 coming here. Who is familiar, at least somewhat, with 00:01:25.710 --> 00:01:31.729 pair programming? I'm gonna call that eighty to ninety 00:01:31.729 --> 00:01:33.939 percent. That's great. So, for those of you who 00:01:33.939 --> 00:01:37.110 don't know, pair programming is a software development technique, 00:01:37.110 --> 00:01:40.090 by which two programmers work on the same code, 00:01:40.090 --> 00:01:42.689 at the same time, solving the same software problem 00:01:42.689 --> 00:01:45.820 on the same computer. That's what pair programming is. 00:01:45.820 --> 00:01:47.490 And you can throw the word remote on there, 00:01:47.490 --> 00:01:49.460 and guess what, that's all that stuff, just using 00:01:49.460 --> 00:01:54.509 some remote collaboration softwares, such as video chat and 00:01:54.509 --> 00:01:56.720 audio chat and screen sharing and such. 00:01:56.720 --> 00:01:59.719 So what are the benefits of pair programming? I 00:01:59.719 --> 00:02:01.810 could have slides and slides and slides, but I'll 00:02:01.810 --> 00:02:03.909 just give you a few. It's everything from having 00:02:03.909 --> 00:02:09.829 a continuous code review to cross-training junior people and 00:02:09.829 --> 00:02:13.560 older people, or, or more experienced people. Cross-training people 00:02:13.560 --> 00:02:16.750 from different disciplines. You tend to introduce fewer bugs 00:02:16.750 --> 00:02:21.010 because you have two eyes on the same thing. 00:02:21.010 --> 00:02:23.730 You have differing opinions, which is really great, because 00:02:23.730 --> 00:02:26.260 that ends up raising what I call the whole 00:02:26.260 --> 00:02:30.169 team to what I call the highest common denominator. 00:02:30.169 --> 00:02:32.880 Because that kind of disagreement and such is really 00:02:32.880 --> 00:02:34.389 great. And it goes on and on and on 00:02:34.389 --> 00:02:37.730 and on from there. In general, the general principle, 00:02:37.730 --> 00:02:40.100 I think as most of us know, in almost 00:02:40.100 --> 00:02:42.109 everything, two heads are better than one when you're 00:02:42.109 --> 00:02:44.880 trying to solve hard problems. 00:02:44.880 --> 00:02:49.750 What are the challenges of pair programming? It's extremely, 00:02:49.750 --> 00:02:53.910 it can be very exhausting. Personality conflicts can be 00:02:53.910 --> 00:02:57.600 difficult when people don't necessarily get along. It's definitely 00:02:57.600 --> 00:03:01.100 what I would consider to be the most difficult 00:03:01.100 --> 00:03:06.169 software development practice to implement, both from a social 00:03:06.169 --> 00:03:08.639 point of view, from selling it to people on 00:03:08.639 --> 00:03:11.959 the ground people, to selling it to management that 00:03:11.959 --> 00:03:14.889 it's, not it's not just, it's not double the 00:03:14.889 --> 00:03:18.109 money and twice the time, et cetera. But it 00:03:18.109 --> 00:03:20.979 also, I feel, has the greatest benefits. So, it's 00:03:20.979 --> 00:03:22.820 the hardest, but it's got the biggest pay off, 00:03:22.820 --> 00:03:26.790 if you're willing to dedicate yourself to it. 00:03:26.790 --> 00:03:30.229 And this is the, one of the top three 00:03:30.229 --> 00:03:32.600 questions, so I thought I'd go ahead and take 00:03:32.600 --> 00:03:34.229 care of that now. When do you decide to 00:03:34.229 --> 00:03:35.880 breaks? When do you decide to go to the 00:03:35.880 --> 00:03:39.290 bathroom? And the answer is, whenever you need to 00:03:39.290 --> 00:03:42.699 go to the bathroom is the optimum time when 00:03:42.699 --> 00:03:46.540 you should probably do so. And it kind of 00:03:46.540 --> 00:03:51.010 points to, you know, you're just people working together. 00:03:51.010 --> 00:03:52.470 You know, you, you decide to take breaks when 00:03:52.470 --> 00:03:54.729 you're ready to take breaks. If you've been going 00:03:54.729 --> 00:03:56.639 for an hour, you've been going for more than 00:03:56.639 --> 00:03:58.949 an hour. Yeah, take a break. Stretch your legs. 00:03:58.949 --> 00:04:01.570 Play from ping pong. Use facilities. What you're kind 00:04:01.570 --> 00:04:04.350 of into. Take breaks. It's a super intense discipline. 00:04:04.350 --> 00:04:07.470 You, you do get tired, and taking breaks is 00:04:07.470 --> 00:04:09.720 super important. And do so whenever you feel like 00:04:09.720 --> 00:04:12.680 you need it. Need to. 00:04:12.680 --> 00:04:16.850 And with that, ask me anything. Who's got a 00:04:16.850 --> 00:04:18.769 question? Over here there's a question. 00:04:18.769 --> 00:04:21.978 QUESTION: So, my team has been doing pairing, but 00:04:21.978 --> 00:04:25.090 we find that, just subjectively, that it tends to 00:04:25.090 --> 00:04:26.790 slow things down by maybe fifty to a hundred 00:04:26.790 --> 00:04:30.410 QUESTION: In other words, things tend to go up 00:04:30.410 --> 00:04:33.260 to twice as slow when we do it. But 00:04:33.260 --> 00:04:35.070 we still use it for our hard things, like 00:04:35.070 --> 00:04:39.800 ramping up a new developer on a project, or 00:04:39.800 --> 00:04:43.590 laying the, the foundations for a new project. But 00:04:43.590 --> 00:04:45.150 not for a lot of other things, because of 00:04:45.150 --> 00:04:46.250 the time cost. And I was wondering if you 00:04:46.250 --> 00:04:49.100 could comment on how it effects your velocity and 00:04:49.100 --> 00:04:50.680 maybe we just need to look further down the 00:04:50.680 --> 00:04:52.400 road to see pay offs and velocity? Is it 00:04:52.400 --> 00:04:54.460 one of those things? 00:04:54.460 --> 00:04:57.500 J.M.: Sure. So, I'm hopefully not going. Raise your 00:04:57.500 --> 00:05:01.180 hand if you could not hear the question. Everybody 00:05:01.180 --> 00:05:03.220 could hear the question. That's great. Cause it'd be 00:05:03.220 --> 00:05:05.750 great not to spend time repeating. So it looks 00:05:05.750 --> 00:05:08.030 like the mics are working. 00:05:08.030 --> 00:05:09.100 So, you all heard the question. Velocity seems to 00:05:09.100 --> 00:05:13.920 slow down. I think that the empirical evidence has 00:05:13.920 --> 00:05:17.590 shown that, at least in a controlled environment, pair 00:05:17.590 --> 00:05:20.400 programming has been shown to slow down accomplishment of 00:05:20.400 --> 00:05:24.000 tasks by fifteen - one five - percent in 00:05:24.000 --> 00:05:27.370 a controlled environment. And I think that this is 00:05:27.370 --> 00:05:30.400 often with college students who are either paired up 00:05:30.400 --> 00:05:33.330 or doing solo. So that's certainly not fifty - 00:05:33.330 --> 00:05:37.210 well, five-zero - to a hundred percent. 00:05:37.210 --> 00:05:38.730 And there, there are other pay offs. But I 00:05:38.730 --> 00:05:42.780 guess my initial reaction would be, you know, pair 00:05:42.780 --> 00:05:46.080 programming is a tool, and the, you know, the, 00:05:46.080 --> 00:05:49.210 I would call it the lower-case agile toolbox. You 00:05:49.210 --> 00:05:51.910 know, not the, you know, it doesn't, it's not 00:05:51.910 --> 00:05:55.050 necessarily mandated. But there are other things that you 00:05:55.050 --> 00:05:57.300 might be able to apply if you find that 00:05:57.300 --> 00:05:58.790 things are just going really slow. And that is 00:05:58.790 --> 00:06:01.640 identifying the issue. And maybe you've already done this. 00:06:01.640 --> 00:06:05.260 You've already identified, this is taking twice as long 00:06:05.260 --> 00:06:08.300 and here are the five reasons why. And they're 00:06:08.300 --> 00:06:10.210 insurmountable reasons. 00:06:10.210 --> 00:06:13.590 So, I would say, you might want to use, 00:06:13.590 --> 00:06:16.170 you know, what's called a retrospective, or investigate, you 00:06:16.170 --> 00:06:18.180 know, dig deep into why things are taking too 00:06:18.180 --> 00:06:21.560 long. Are you arguing about stuff? Are, are the 00:06:21.560 --> 00:06:24.510 pairings so unbalanced that the senior people are constantly 00:06:24.510 --> 00:06:28.400 trying to pull up people who are, are, are 00:06:28.400 --> 00:06:31.250 more junior? Are there differing opinions and people are 00:06:31.250 --> 00:06:33.530 just constantly arguing? Those are, you know, there could 00:06:33.530 --> 00:06:35.760 be many, many reasons, so identifying the problem is 00:06:35.760 --> 00:06:37.850 the first step to figuring out maybe why it's 00:06:37.850 --> 00:06:41.410 taking that long, because in my experience, it should, 00:06:41.410 --> 00:06:46.889 potentially be a bit slower, on the metric of 00:06:46.889 --> 00:06:49.530 from moments on the keyboard typing the first characters 00:06:49.530 --> 00:06:52.880 to maybe doing a commit. And that's not what 00:06:52.880 --> 00:06:56.970 encompasses done software. That's just two people coming up 00:06:56.970 --> 00:06:58.570 with the best solution. And you can have other 00:06:58.570 --> 00:07:02.230 pay offs further down the line, such as your 00:07:02.230 --> 00:07:05.940 code is not as buggy. Your code is hopefully 00:07:05.940 --> 00:07:07.930 better-factored because two people are coming up with the 00:07:07.930 --> 00:07:10.639 design versus just one, et cetera, et cetera. So 00:07:10.639 --> 00:07:12.830 I would encourage you to dig deep into why 00:07:12.830 --> 00:07:14.820 you're having these problems, and see if you can 00:07:14.820 --> 00:07:16.880 address those problems. And then try it again, and, 00:07:16.880 --> 00:07:19.440 and measure again. Thank you. 00:07:19.440 --> 00:07:23.139 QUESTION: Just as a, kind of following, my big 00:07:23.139 --> 00:07:26.210 impression is that, in many cases, the tasks are 00:07:26.210 --> 00:07:30.450 relatively straight-forward, and so it just, you know, wouldn't 00:07:30.450 --> 00:07:33.669 take a single person much longer to do them. 00:07:33.669 --> 00:07:33.970 J.M.: Sure. 00:07:33.970 --> 00:07:35.480 QUESTION: And then, so the other person is kind 00:07:35.480 --> 00:07:39.360 of, you know, avoiding, helping avoid typos and, and, 00:07:39.360 --> 00:07:40.919 you know, that sort of thing. But maybe not 00:07:40.919 --> 00:07:42.320 adding as much value as they might be doing. 00:07:42.320 --> 00:07:46.570 J.M.: Right. So we've, we've had clients decide that, 00:07:46.570 --> 00:07:50.350 you know, they measure, you know, we use a 00:07:50.350 --> 00:07:54.930 particular project management tool that lets us estimate stuff. 00:07:54.930 --> 00:07:56.360 And it's called Pivotal Tracker. You don't have to 00:07:56.360 --> 00:07:58.060 use it. Cards on a wall. Whatever works for 00:07:58.060 --> 00:07:59.650 you. So we tend to estimate things sort of 00:07:59.650 --> 00:08:02.770 on like a one to eight scale. And we've 00:08:02.770 --> 00:08:05.300 had clients who have said, after they disengage with 00:08:05.300 --> 00:08:08.010 us, you know, anything that's a zero or a 00:08:08.010 --> 00:08:09.980 one, I guess I should have said zero to 00:08:09.980 --> 00:08:12.030 eight, they choose not to pair on those things, 00:08:12.030 --> 00:08:14.040 cause they find they don't get much value. That's, 00:08:14.040 --> 00:08:15.760 that's great for them. But they have made a 00:08:15.760 --> 00:08:18.630 rule that, well anything that's more of a, than 00:08:18.630 --> 00:08:20.840 a zero to a one on an eight point 00:08:20.840 --> 00:08:23.210 scale, that that must be paired. 00:08:23.210 --> 00:08:25.139 And so then maybe you re-evaluate the twos and 00:08:25.139 --> 00:08:26.900 the threes and then ah, looks like maybe the 00:08:26.900 --> 00:08:29.930 threes, they have, they're, those are getting pretty buggy. 00:08:29.930 --> 00:08:31.960 So let's bring pairing back into that. So that's 00:08:31.960 --> 00:08:33.990 a strategy as well. 00:08:33.990 --> 00:08:35.229 Let's go over here. 00:08:35.229 --> 00:08:37.828 QUESTION: If you could clarify, I have another question, 00:08:37.828 --> 00:08:39.440 but, if you could clarify just for a moment 00:08:39.440 --> 00:08:45.260 that fifteen percent increase, was that compared to one 00:08:45.260 --> 00:08:48.149 developer doing the task? Or was that compared to 00:08:48.149 --> 00:08:50.350 the relative work that two developers would do, you 00:08:50.350 --> 00:08:55.080 know, each individually, right? So, one developer doing a 00:08:55.080 --> 00:08:58.190 task takes this much time. Two developers doing the 00:08:58.190 --> 00:09:01.640 same task takes fifteen percent more time? But then 00:09:01.640 --> 00:09:03.750 that other developer isn't doing any work, right? So 00:09:03.750 --> 00:09:07.670 there's actually less benefit than might, might be- 00:09:07.670 --> 00:09:11.490 J.M.: Right. So the, I believe it was against 00:09:11.490 --> 00:09:12.370 a solo programmer- 00:09:12.370 --> 00:09:12.839 QUESTION: Right. 00:09:12.839 --> 00:09:13.790 J.M.: -working by themselves. 00:09:13.790 --> 00:09:14.270 QUESTION: OK. 00:09:14.270 --> 00:09:16.490 J.M.: But there, you know, but I, there were 00:09:16.490 --> 00:09:19.240 lots of other measures that showed, you know benefit 00:09:19.240 --> 00:09:20.070 of pair programming- 00:09:20.070 --> 00:09:20.480 QUESTION: Sure. 00:09:20.480 --> 00:09:22.460 J.M.: -above, you know, it sort of out, in 00:09:22.460 --> 00:09:25.150 the opinion of the report, outweighed this, this particular 00:09:25.150 --> 00:09:25.990 slow-down. 00:09:25.990 --> 00:09:29.690 QUESTION: So I, I think that kind of plays 00:09:29.690 --> 00:09:32.440 into my, my main question, which was how do 00:09:32.440 --> 00:09:36.560 you quantify to other stake-holders, particularly in the business, 00:09:36.560 --> 00:09:40.540 even other developers, and maybe measure the benefits of 00:09:40.540 --> 00:09:42.960 pair programming? I'm trying to incorporate it into our 00:09:42.960 --> 00:09:47.450 process more, but getting some resistance. We, we've given 00:09:47.450 --> 00:09:50.290 it enough to like experiment with, but how do 00:09:50.290 --> 00:09:52.710 we actually measure the benefits and say whether it's, 00:09:52.710 --> 00:09:53.850 you know, working for us? 00:09:53.850 --> 00:09:56.260 J.M.: That's a great question. Measuring the benefits and 00:09:56.260 --> 00:09:58.330 selling it to management, or your team. Selling it 00:09:58.330 --> 00:10:01.700 to anybody is I, I feel one of the 00:10:01.700 --> 00:10:04.760 hardest things to do. And even when I've been 00:10:04.760 --> 00:10:07.520 going over the empirical evidence, even the empirical evidence 00:10:07.520 --> 00:10:10.080 has said, like, more studies need to be done. 00:10:10.080 --> 00:10:12.750 More sort of metrics for measuring this, this stuff 00:10:12.750 --> 00:10:15.970 needs to, need to be developed. 00:10:15.970 --> 00:10:19.930 It's, it is really, really hard to sell it, 00:10:19.930 --> 00:10:22.990 because the math is just too easy. One plus 00:10:22.990 --> 00:10:27.770 one equals two. You just can't, like, fight that 00:10:27.770 --> 00:10:30.180 math. It's going to be, take twice as long 00:10:30.180 --> 00:10:32.240 and it's gonna be twice as expensive, right? And 00:10:32.240 --> 00:10:34.600 why would anybody ever do that? And I think, 00:10:34.600 --> 00:10:38.620 yeah, and in my experience, you, you know, I 00:10:38.620 --> 00:10:39.830 could, I could, we could try to come up 00:10:39.830 --> 00:10:41.170 with some metrics and we could look at, you 00:10:41.170 --> 00:10:43.020 know, I could point you towards these empirical studies 00:10:43.020 --> 00:10:45.750 and they have particular measures of how they measured, 00:10:45.750 --> 00:10:48.270 you know, different kind of factors. And I, I 00:10:48.270 --> 00:10:51.460 find that stuff it, it bounces off people. You're 00:10:51.460 --> 00:10:53.990 like, ah, yeah, that's all neat. But you've heard 00:10:53.990 --> 00:10:56.890 of one plus one equals two, right? 00:10:56.890 --> 00:10:59.990 And I think that this is an unsatisfying answer 00:10:59.990 --> 00:11:02.410 that I'm about to give you. There's a leap 00:11:02.410 --> 00:11:04.800 of faith that needs to happen, and I think 00:11:04.800 --> 00:11:07.300 you can kind of come back to like, let's 00:11:07.300 --> 00:11:08.510 pretend we're in a world where we can still 00:11:08.510 --> 00:11:13.800 do TDD. In a world where we did TDD, 00:11:13.800 --> 00:11:15.700 that was a leap of faith, too. Because it's 00:11:15.700 --> 00:11:18.279 like, that's twice as long. Why would you, you 00:11:18.279 --> 00:11:20.560 can't test something you haven't written yet. And that's 00:11:20.560 --> 00:11:22.440 gonna take twice as long. And I'm willing to 00:11:22.440 --> 00:11:24.970 bet almost everybody in this room has had that 00:11:24.970 --> 00:11:28.529 argument with somebody who doesn't practice, like, not just 00:11:28.529 --> 00:11:31.839 TDD but any kind of testing. It's too slow 00:11:31.839 --> 00:11:32.600 and it takes twice as long. 00:11:32.600 --> 00:11:34.160 And, finally, you're spouting all this stuff when you're 00:11:34.160 --> 00:11:36.690 talking about all the things that you, make almost, 00:11:36.690 --> 00:11:38.610 I'm willing to bet everybody in this room, love 00:11:38.610 --> 00:11:40.880 testing, to somebody, and it's just bouncing off and 00:11:40.880 --> 00:11:42.950 it's just bouncing off. And finally you're just like, 00:11:42.950 --> 00:11:44.940 ah, you just gotta, you gotta try it. You're 00:11:44.940 --> 00:11:47.160 going to see the benefit, I swear. And then 00:11:47.160 --> 00:11:50.810 finally they do, and usually you win them over. 00:11:50.810 --> 00:11:52.279 But actually, and I'll turn this around, because I 00:11:52.279 --> 00:11:53.540 know that there's lots of people in the audience 00:11:53.540 --> 00:11:57.640 here who have been more on the sales side 00:11:57.640 --> 00:12:01.460 of pair programming than, than I have. Has anybody, 00:12:01.460 --> 00:12:03.770 would anybody like to comment on success stories they 00:12:03.770 --> 00:12:07.800 have had selling management or clients of your consultants 00:12:07.800 --> 00:12:12.610 on how they've addressed this issue? Anybody? Maybe in 00:12:12.610 --> 00:12:17.310 this row here? Could I encourage anybody? Does anybody 00:12:17.310 --> 00:12:19.380 have anything to say? I've got a mobile mic. 00:12:19.380 --> 00:12:23.260 Ah, excellent sir. Don't break your ankle. 00:12:23.260 --> 00:12:24.899 AUDIENCE MEMBER: Hello, hello. 00:12:24.899 --> 00:12:26.540 J.M.: Does that work? 00:12:26.540 --> 00:12:29.820 AUDIENCE MEMBER: So one the, is this working? 00:12:29.820 --> 00:12:30.910 J.M.: Could I get this mic, this hand-held mic 00:12:30.910 --> 00:12:31.320 on? 00:12:31.320 --> 00:12:32.550 V.O.: It's on. 00:12:32.550 --> 00:12:33.790 J.M.: Oh, OK. 00:12:33.790 --> 00:12:35.029 AUDIENCE MEMBER: Hello. 00:12:35.029 --> 00:12:35.850 J.M.: Excellent. 00:12:35.850 --> 00:12:37.500 AUDIENCE MEMBER: That's better. 00:12:37.500 --> 00:12:41.370 One of the easiest ways that I've found to, 00:12:41.370 --> 00:12:43.390 to get pair programming into a team is to 00:12:43.390 --> 00:12:48.980 talk about the benefits of bringing, increasing your ability 00:12:48.980 --> 00:12:52.350 to absorb junior developers into your team. A lot 00:12:52.350 --> 00:12:54.779 of, I'm from San Francisco. A lot of companies 00:12:54.779 --> 00:12:58.350 in San Francisco are hiring their first junior developer. 00:12:58.350 --> 00:13:02.600 Like, right now. And so, one, a lot of 00:13:02.600 --> 00:13:04.360 discussions I've had recently have been along the lines 00:13:04.360 --> 00:13:07.100 of, OK, so we're bringing on our first junior 00:13:07.100 --> 00:13:09.540 developer. Everything we do has to change, because we 00:13:09.540 --> 00:13:12.000 need to vocalize a lot more things that we 00:13:12.000 --> 00:13:14.700 used to. And, so, what I tell them, oftentimes, 00:13:14.700 --> 00:13:16.339 is like, OK, one of the ways you can 00:13:16.339 --> 00:13:19.490 practice that, before the junior developer shows up, is 00:13:19.490 --> 00:13:22.560 by pairing amongst yourselves. Getting used to this idea 00:13:22.560 --> 00:13:25.930 of, like, vocalizing your thought process, understanding how you 00:13:25.930 --> 00:13:28.910 talk about writing code with each other, and then 00:13:28.910 --> 00:13:31.100 you can bring someone in who's in a very 00:13:31.100 --> 00:13:33.770 different place, and you'll be better-equipped to talk to 00:13:33.770 --> 00:13:34.750 them about it. 00:13:34.750 --> 00:13:38.589 J.M.: Thanks a lot. Thank you so much. 00:13:38.589 --> 00:13:39.870 Excellent. So, go ahead. 00:13:39.870 --> 00:13:42.750 AUDIENCE MEMBER: I had two things to say. Part 00:13:42.750 --> 00:13:44.950 of like, selling pair programming, like, for me, as 00:13:44.950 --> 00:13:48.470 a developer, it's been really awesome, just cause it 00:13:48.470 --> 00:13:50.160 forces you to get out of your own box 00:13:50.160 --> 00:13:51.950 of thinking and see how other people think about 00:13:51.950 --> 00:13:54.700 writing code and sort of, like, maybe you thought 00:13:54.700 --> 00:13:56.529 this one practice of how to do something was 00:13:56.529 --> 00:13:57.899 bad because you got bitten by it once, but 00:13:57.899 --> 00:14:00.540 maybe you can be convinced that, oh, no that's 00:14:00.540 --> 00:14:03.220 actually worth doing. It's a great way to like 00:14:03.220 --> 00:14:05.480 just share knowledge about gems that someone found on 00:14:05.480 --> 00:14:07.310 another project if you're coming into something. 00:14:07.310 --> 00:14:09.560 And then, like, to the junior developer point, like 00:14:09.560 --> 00:14:11.450 it's great cause you're there and you know, you 00:14:11.450 --> 00:14:13.120 ask, have you seen this part of the code 00:14:13.120 --> 00:14:15.420 yet? No? Then you go through and you explain, 00:14:15.420 --> 00:14:17.560 like, everything about it, cause you, you know, have, 00:14:17.560 --> 00:14:21.550 you write it and you can, or you understand 00:14:21.550 --> 00:14:23.160 it, and so that helps bring them in more 00:14:23.160 --> 00:14:24.769 than just sort of looking through all this code 00:14:24.769 --> 00:14:26.370 that may not have comments or was written by 00:14:26.370 --> 00:14:29.649 someone who left the company later. So those are 00:14:29.649 --> 00:14:32.279 my, like, big selling points. Like, I think it's 00:14:32.279 --> 00:14:35.940 made me much better and much more open minded 00:14:35.940 --> 00:14:38.740 developer, and like, made it much easier for me 00:14:38.740 --> 00:14:41.990 to collaborate, which yields, I think, like better code, 00:14:41.990 --> 00:14:46.029 and like, you know, over all makes your, your 00:14:46.029 --> 00:14:46.339 group better cause you're just better at collaborating and 00:14:46.339 --> 00:14:49.200 sharing ideas. And it sort of tears down the 00:14:49.200 --> 00:14:54.019 barriers of like worrying about, about bumping shoulders in 00:14:54.019 --> 00:14:54.050 communication. 00:14:54.050 --> 00:14:55.250 We'll get kind of heated, like you said, like 00:14:55.250 --> 00:14:59.940 and we'll just get through it, and in the, 00:14:59.940 --> 00:15:03.820 in the end come to an agreement on what 00:15:03.820 --> 00:15:04.920 will hopefully be a better idea or revisit it 00:15:04.920 --> 00:15:08.209 My question was kind of around pair rotation. So, 00:15:08.209 --> 00:15:10.209 like, if you're working on, on a team in 00:15:10.209 --> 00:15:12.350 an office or, we work with one of, we 00:15:12.350 --> 00:15:15.130 work with the clients' developers separately, like remote pairing, 00:15:15.130 --> 00:15:17.519 like we'll spin up an EC2 instance and we're 00:15:17.519 --> 00:15:19.510 trying to sort of figure out, like, proper pair 00:15:19.510 --> 00:15:23.000 rotations, so like, on a particular feature, two developers 00:15:23.000 --> 00:15:25.540 won't be the only ones like, who work on 00:15:25.540 --> 00:15:28.160 it, know it, and make, like, to some extent 00:15:28.160 --> 00:15:31.290 make all the decisions. And I'm curious, like, what 00:15:31.290 --> 00:15:34.769 your thoughts are on that, and like sort of, 00:15:34.769 --> 00:15:36.779 what you have found to be a good way 00:15:36.779 --> 00:15:37.260 of pair rotation, if, if you've practiced that at 00:15:37.260 --> 00:15:37.470 all. 00:15:37.470 --> 00:15:37.899 J.M.: Sure. 00:15:37.899 --> 00:15:39.200 AUDIENCE MEMBER: And things like that. 00:15:39.200 --> 00:15:43.149 J.M.: Yeah. Absolutely. So pair rotation. Super important. I 00:15:43.149 --> 00:15:46.600 think, several things can help encourage pair rotation. So 00:15:46.600 --> 00:15:49.260 one, yes, we do rotate pairs on a regular 00:15:49.260 --> 00:15:53.470 basis. There are extremes to this. There's something called, 00:15:53.470 --> 00:15:56.070 I've never done this, but it's been dubbed promiscuous 00:15:56.070 --> 00:15:57.269 pairing. I don't know if anybody has heard of 00:15:57.269 --> 00:16:00.610 this. And it's where you pair many times per 00:16:00.610 --> 00:16:03.279 day, like, on a timer basically. And there's been 00:16:03.279 --> 00:16:06.600 a little bit of evidence to show that that 00:16:06.600 --> 00:16:09.300 can be very productive. It's also shown to be 00:16:09.300 --> 00:16:13.050 disruptive and exhausting. So I think that, give it 00:16:13.050 --> 00:16:15.920 a, give it a try, perhaps. 00:16:15.920 --> 00:16:17.790 But for us, for practical purposes, what we tend 00:16:17.790 --> 00:16:21.950 to do is, it, it ties into the art 00:16:21.950 --> 00:16:25.050 of breaking down work. So we call our, the 00:16:25.050 --> 00:16:28.459 stuff we're working on, we call them stories. And 00:16:28.459 --> 00:16:30.370 we've gotten quite good at being able to break 00:16:30.370 --> 00:16:34.930 down deliverable stories to small enough pieces. This is 00:16:34.930 --> 00:16:37.470 all, in almost every case. To small enough pieces 00:16:37.470 --> 00:16:40.329 that, ideally, our pair developers will be able to 00:16:40.329 --> 00:16:42.160 get one or two of them done per day. 00:16:42.160 --> 00:16:45.610 And a long story, we'll say a big story, 00:16:45.610 --> 00:16:47.209 that's gonna take a long time, quote on quote 00:16:47.209 --> 00:16:50.950 long, that might be several days. Two days, maybe. 00:16:50.950 --> 00:16:51.920 Three days. 00:16:51.920 --> 00:16:54.779 So what I'm not saying is, this is going 00:16:54.779 --> 00:16:56.880 to take three weeks to do. Now, maybe there 00:16:56.880 --> 00:16:58.950 is a giant track of features, a huge feature 00:16:58.950 --> 00:17:01.490 set - the entire profile page rewrite. That might 00:17:01.490 --> 00:17:04.750 be weeks of work. But getting that link photo 00:17:04.750 --> 00:17:08.148 upload thing, just that small thing, that might be 00:17:08.148 --> 00:17:10.339 a day's worth of work or less. And so 00:17:10.339 --> 00:17:13.019 we tend to rotate pairs every day, if we 00:17:13.019 --> 00:17:17.140 can, at our morning stand up meeting. And, because 00:17:17.140 --> 00:17:19.779 ideally people will have completed one or two things 00:17:19.779 --> 00:17:21.749 the previous day and they're, they're ready to move 00:17:21.749 --> 00:17:23.189 on. And if they're not, and if they didn't 00:17:23.189 --> 00:17:26.259 complete it, there's, like, just a little bit left, 00:17:26.259 --> 00:17:27.249 and you could wrap it up with a new 00:17:27.249 --> 00:17:30.359 pair the next day and, and go on from 00:17:30.359 --> 00:17:31.509 there. 00:17:31.509 --> 00:17:33.980 What will happen, sometimes, is that pairs will request 00:17:33.980 --> 00:17:36.039 to stick, we call it. We're working on this 00:17:36.039 --> 00:17:37.269 thing, it's really long. We have a lot of 00:17:37.269 --> 00:17:39.700 context. We'd like to stick on this. OK, second, 00:17:39.700 --> 00:17:42.350 you know, that's the next day. Cool. Then the, 00:17:42.350 --> 00:17:44.200 you know, the third day comes around. Like, we 00:17:44.200 --> 00:17:47.419 still. We're almost done. We'd like to stick. And 00:17:47.419 --> 00:17:52.629 the whole team collectively is like, hmm. Maybe. OK. 00:17:52.629 --> 00:17:56.600 Maybe. OK. Go ahead. 00:17:56.600 --> 00:17:59.950 Fourth day rolls around. We're really almost done, I 00:17:59.950 --> 00:18:01.799 swear. And then at that point, like we, as 00:18:01.799 --> 00:18:04.090 a group, agree as a team collectively, like, we 00:18:04.090 --> 00:18:06.399 should get somebody else in. Often, at that point, 00:18:06.399 --> 00:18:09.019 the pair will say, one of us is gonna 00:18:09.019 --> 00:18:12.039 swap out. You know, Bob's gonna stay on. Let's 00:18:12.039 --> 00:18:15.299 get, who's available? Sally, you're available. Jump in. Fresh 00:18:15.299 --> 00:18:18.080 pair of eyes. They're probably stuck. You need a 00:18:18.080 --> 00:18:21.529 new perspective. And so we will force rotation that 00:18:21.529 --> 00:18:23.559 way, too. And just maybe taking it a step 00:18:23.559 --> 00:18:26.149 further, something that will often come up after this 00:18:26.149 --> 00:18:28.629 is, yeah, we rotate very often, but it's kind 00:18:28.629 --> 00:18:30.440 of like the same people, like. We're the same 00:18:30.440 --> 00:18:31.450 people on the time and kind of the same 00:18:31.450 --> 00:18:34.029 four people just kind of, like, go around and 00:18:34.029 --> 00:18:36.049 around and around, what you can do to combat 00:18:36.049 --> 00:18:38.690 that kind of a situation, where there's, there's rotation, 00:18:38.690 --> 00:18:41.080 but it's not balanced amongst the entire team, is 00:18:41.080 --> 00:18:43.129 you can just start tracking it. Just, you could 00:18:43.129 --> 00:18:45.019 do a white board. Like, keeping track of who's 00:18:45.019 --> 00:18:47.379 paired with who how many times, all the way 00:18:47.379 --> 00:18:50.950 to, there's even a website called pair tricks, I 00:18:50.950 --> 00:18:53.960 believe. Where you can sign up your company and, 00:18:53.960 --> 00:18:55.049 and you can put all the pairs in and 00:18:55.049 --> 00:18:57.720 it'll randomly assign people and do weighting based on 00:18:57.720 --> 00:18:59.679 how long, how long it's been since they've paired 00:18:59.679 --> 00:19:00.669 and things like that, but. 00:19:00.669 --> 00:19:02.889 So you can do something like that, like, every, 00:19:02.889 --> 00:19:04.629 or just keep track of it on a white 00:19:04.629 --> 00:19:06.600 board or a Google doc or something like that. 00:19:06.600 --> 00:19:07.549 K. Good questions. 00:19:07.549 --> 00:19:09.799 AUDIENCE MEMBER: Kind of a follow-up to that. 00:19:09.799 --> 00:19:10.419 H.M.: Sure. 00:19:10.419 --> 00:19:13.289 AUDIENCE MEMBER: How do you combine that with, like, 00:19:13.289 --> 00:19:16.320 sort of junior developers, like, sort of making sure 00:19:16.320 --> 00:19:18.489 that they're not going through so much context-switching that 00:19:18.489 --> 00:19:20.109 they're not really getting anything out of it, they're 00:19:20.109 --> 00:19:21.679 just sort of starting a feature and then, like, 00:19:21.679 --> 00:19:23.590 you know. So like, in our case, we'll start 00:19:23.590 --> 00:19:24.749 something and it won't, won't be done in one 00:19:24.749 --> 00:19:27.289 day, and then sort of, they'll switch and it's 00:19:27.289 --> 00:19:30.700 just kind of like, well like, I'm kind of 00:19:30.700 --> 00:19:32.019 like lost. Like I- 00:19:32.019 --> 00:19:33.100 J.M.: Right. Right. 00:19:33.100 --> 00:19:34.330 AUDIENCE MEMBER: I was barely beginning to grasp, like- 00:19:34.330 --> 00:19:34.340 J.M.: Sure. 00:19:34.340 --> 00:19:35.639 AUDIENCE MEMBER: -that part of the code that I 00:19:35.639 --> 00:19:36.419 was working on. 00:19:36.419 --> 00:19:38.710 J.M.: So I think just being flexible, you know, 00:19:38.710 --> 00:19:40.830 just because it's nine o'clock the next day doesn't 00:19:40.830 --> 00:19:43.200 mean that, you know, the judge comes in and, 00:19:43.200 --> 00:19:44.799 you know, breaks everybody up or something like that. 00:19:44.799 --> 00:19:46.720 And I think that if, if the team decides, 00:19:46.720 --> 00:19:49.859 you know, hey, it seems like this junior developer, 00:19:49.859 --> 00:19:51.879 they're three-quarters of the way, the, the senior and 00:19:51.879 --> 00:19:54.919 junior developer, they're three-quarters of the way through this 00:19:54.919 --> 00:19:58.330 task. They're trying to complete, yeah. Let them. Let 00:19:58.330 --> 00:20:01.359 them complete the task. And, because they're gonna get 00:20:01.359 --> 00:20:02.840 a lot of benefit out of seeing it from 00:20:02.840 --> 00:20:03.779 beginning to end. 00:20:03.779 --> 00:20:07.580 So don't be, I'm personally an advocate of just 00:20:07.580 --> 00:20:08.859 kind of playing it by ear. Just kind of 00:20:08.859 --> 00:20:11.200 seeing how it works out. Don't be so strict 00:20:11.200 --> 00:20:14.850 that you're being too disruptive, but don't be so, 00:20:14.850 --> 00:20:16.919 don't let people stick so long that you get 00:20:16.919 --> 00:20:19.859 these little sort of knowledge cylos and ownership and 00:20:19.859 --> 00:20:20.700 such. Great. 00:20:20.700 --> 00:20:22.369 AUDIENCE MEMBER: Thank you. 00:20:22.369 --> 00:20:23.200 J.M.: Sure. 00:20:23.200 --> 00:20:26.519 AUDIENCE MEMBER: A few questions on, I guess, team 00:20:26.519 --> 00:20:29.149 dynamics with pairing. This one's kind of a follow 00:20:29.149 --> 00:20:29.749 onto this one. 00:20:29.749 --> 00:20:30.009 J.M.: Sure. 00:20:30.009 --> 00:20:31.210 AUDIENCE MEMBER: I guess I'll spit them all out. 00:20:31.210 --> 00:20:31.749 J.M.: Go for it. 00:20:31.749 --> 00:20:32.549 AUDIENCE MEMBER: Monopolize things a little. 00:20:32.549 --> 00:20:34.259 One is, do you have any thoughts on, if 00:20:34.259 --> 00:20:38.999 you have a group of, a spectrum of people 00:20:38.999 --> 00:20:41.600 at different experience levels, are, can you talk about 00:20:41.600 --> 00:20:44.899 sort of the pros and cons of going with, 00:20:44.899 --> 00:20:47.549 like, senior senior, junior, junior, people at like levels, 00:20:47.549 --> 00:20:51.289 or to go junior senior to get more mentoring. 00:20:51.289 --> 00:20:54.429 Have you had any barriers with tools, where people 00:20:54.429 --> 00:20:56.889 just would be incompatible, say one guy likes Vim 00:20:56.889 --> 00:21:01.139 and one guy likes Sublime? And then, thirdly, do 00:21:01.139 --> 00:21:05.970 you have any, any wisdom to share on adding 00:21:05.970 --> 00:21:09.139 a test or QA person to a pair to 00:21:09.139 --> 00:21:11.799 get that person involved early in what role a, 00:21:11.799 --> 00:21:15.639 a QA engineer would play throughout a, a, working 00:21:15.639 --> 00:21:17.179 on a story with a pair. 00:21:17.179 --> 00:21:19.600 J.M.: OK. I may have to refer back to 00:21:19.600 --> 00:21:21.009 you to remind me what all those are. But 00:21:21.009 --> 00:21:27.340 I believe they were, experience level pairings, tool conflicts, 00:21:27.340 --> 00:21:29.009 and adding, like, a QA or a support person 00:21:29.009 --> 00:21:29.649 to the team. 00:21:29.649 --> 00:21:34.239 So let's do, let's do experience level pairings. I, 00:21:34.239 --> 00:21:37.019 I like, personally, I don't, I don't consider it 00:21:37.019 --> 00:21:40.850 being a big deal to mix up almost any 00:21:40.850 --> 00:21:47.529 kind of experience level pairs. Except the junior-junior situation. 00:21:47.529 --> 00:21:50.109 I wouldn't just randomly, personally, do that. So the 00:21:50.109 --> 00:21:55.239 obviously one is senior and junior. Those can be 00:21:55.239 --> 00:21:57.570 great pairings, right. Just, especially for the junior person. 00:21:57.570 --> 00:21:59.739 And that, maybe, a lot of people talk about 00:21:59.739 --> 00:22:02.200 pairing and say, oh, you know, we pair when 00:22:02.200 --> 00:22:04.220 we're wrapping somebody up. And they'll kind of use 00:22:04.220 --> 00:22:06.340 that as the only excuse for pairing. You know, 00:22:06.340 --> 00:22:08.470 we're wrapping up this junior person. 00:22:08.470 --> 00:22:10.840 But, that can put a lot of burden on 00:22:10.840 --> 00:22:13.419 the senior person. If they're always ramping somebody up. 00:22:13.419 --> 00:22:14.330 You know, if they're, if you get a new 00:22:14.330 --> 00:22:17.200 person every so often, then they're, if they're a 00:22:17.200 --> 00:22:18.850 senior person they might feel like they're always wrapping 00:22:18.850 --> 00:22:21.229 somebody up. I'm gonna encourage everybody to have the 00:22:21.229 --> 00:22:24.220 attitude of, well, one, share, share the load. Like, 00:22:24.220 --> 00:22:26.100 the junior person shouldn't just stick with the same 00:22:26.100 --> 00:22:28.720 person all the time. And also have the attitude, 00:22:28.720 --> 00:22:30.470 if you're a senior person, or have your senior 00:22:30.470 --> 00:22:32.970 people have the attitude that, they can always learn 00:22:32.970 --> 00:22:33.619 the junior person. 00:22:33.619 --> 00:22:36.080 On the last project I was on, you know, 00:22:36.080 --> 00:22:41.669 I've been doing software development for sixteen years. And 00:22:41.669 --> 00:22:43.109 I was pairing with a guy who was fresh 00:22:43.109 --> 00:22:44.850 out of college. And he didn't even have a 00:22:44.850 --> 00:22:46.539 CS degree or anything. He was just, well, you 00:22:46.539 --> 00:22:48.210 know, one of those smart people who just graduated 00:22:48.210 --> 00:22:49.929 from college, and he was doing something that was 00:22:49.929 --> 00:22:51.970 clearly way below his skill level. We're like, you 00:22:51.970 --> 00:22:56.259 should probably do some programming. Here, get over here. 00:22:56.259 --> 00:22:58.279 And, I learned something new from him every single 00:22:58.279 --> 00:23:02.460 day. You know, and I, the supposed expert, and 00:23:02.460 --> 00:23:04.279 everyday he's like, oh, did you know about this? 00:23:04.279 --> 00:23:07.070 Whoa. No. That's really cool. I would usually write 00:23:07.070 --> 00:23:09.269 it down. I kept trying to keep track of 00:23:09.269 --> 00:23:11.320 the things I learned each day. And then people 00:23:11.320 --> 00:23:15.269 at the same experience level, that's, that's great as 00:23:15.269 --> 00:23:17.269 well. You do sometimes have to watch out for 00:23:17.269 --> 00:23:21.109 people, especially senior, senior people, who maybe, let's say 00:23:21.109 --> 00:23:26.049 they once had the word architect on their names. 00:23:26.049 --> 00:23:28.970 Sometimes people are gonna be extremely opinionated and not 00:23:28.970 --> 00:23:31.289 want to budge from ideas. It's something to watch 00:23:31.289 --> 00:23:35.139 out for. People kind of, we call it thrashing. 00:23:35.139 --> 00:23:37.429 Junior-junior. Should you ever pair junior people together? And 00:23:37.429 --> 00:23:41.019 I think the answer is sometimes yes. Especially if 00:23:41.019 --> 00:23:44.129 they've both been through multiple, been through multiple pair 00:23:44.129 --> 00:23:46.429 rotations. They're kind of, maybe one of them has 00:23:46.429 --> 00:23:48.029 kind of been on that, let's make up the 00:23:48.029 --> 00:23:50.409 user, new user profile rewrite or something like that. 00:23:50.409 --> 00:23:52.259 And that junior person has kind of bounced between 00:23:52.259 --> 00:23:54.479 pairs, all kind of in that area. And they're 00:23:54.479 --> 00:23:56.590 kind of getting pretty good at learning some stuff. 00:23:56.590 --> 00:23:58.619 It might be good to swap in and have 00:23:58.619 --> 00:24:01.690 a junior person who doesn't have any experience in 00:24:01.690 --> 00:24:05.570 that area pair with this newbie but newbie with 00:24:05.570 --> 00:24:08.419 a lot of context. And then you can really 00:24:08.419 --> 00:24:10.950 help them exercise what it's like to have them 00:24:10.950 --> 00:24:13.169 own something. You know, own's a bad word. But 00:24:13.169 --> 00:24:15.379 whatever. You know what I mean. 00:24:15.379 --> 00:24:17.119 Tre- you know, bringing this other person up to 00:24:17.119 --> 00:24:20.369 speed. Transferring that context. And it, I've always found 00:24:20.369 --> 00:24:23.769 it amazing how, when I feel like I don't 00:24:23.769 --> 00:24:25.529 really know anything and I'm really relying on this 00:24:25.529 --> 00:24:27.820 other person, and suddenly the person I'm relying on 00:24:27.820 --> 00:24:29.690 kind of drops off, and I have to explain 00:24:29.690 --> 00:24:32.700 it to somebody else, it really forces me, personally, 00:24:32.700 --> 00:24:35.349 to dig deep, understand the problem much better. And 00:24:35.349 --> 00:24:37.690 I almost always surprise myself, both in how much 00:24:37.690 --> 00:24:40.700 I actually do know, and how much I don't 00:24:40.700 --> 00:24:41.720 know. 00:24:41.720 --> 00:24:44.320 So, once in awhile, having those junior people pair 00:24:44.320 --> 00:24:48.820 up and, and yes, struggle, like, have problems. Have 00:24:48.820 --> 00:24:50.450 to figure some stuff out, the way we all 00:24:50.450 --> 00:24:52.909 used to have to do when we were working 00:24:52.909 --> 00:24:54.479 by ourselves. OK. So that was a lot of 00:24:54.479 --> 00:24:56.679 that stuff. 00:24:56.679 --> 00:25:01.399 Tools. Wow. If you could see the email threads 00:25:01.399 --> 00:25:04.729 go around at our company, these guys know. These 00:25:04.729 --> 00:25:09.739 guys know. Key bindings. Tools. Vim versus RubyMine versus, 00:25:09.739 --> 00:25:16.679 versus Sublime versus TextMate versus frikin' Decorak. I mean, 00:25:16.679 --> 00:25:20.210 give me a break. Come on people. 00:25:20.210 --> 00:25:22.749 Yeah. That, that's, that's, it's a, it can be 00:25:22.749 --> 00:25:26.139 a huge struggle. And you can go to an 00:25:26.139 --> 00:25:28.700 extreme, that I don't really know of anybody else 00:25:28.700 --> 00:25:31.070 doing. Maybe some of you do this. I don't 00:25:31.070 --> 00:25:34.460 know. But we pretty much standardize on a particular 00:25:34.460 --> 00:25:37.519 kind of keybinding, and often an editor. It, it 00:25:37.519 --> 00:25:40.379 evolves. It isn't like, the manager doesn't come down 00:25:40.379 --> 00:25:43.970 and say, today we're a Vim company. The, the 00:25:43.970 --> 00:25:48.169 team ends up, you know, adopting, and the people 00:25:48.169 --> 00:25:51.529 who are kind of holding onto those other texts, 00:25:51.529 --> 00:25:53.979 they inevitably kind of like, OK, fine. Fine, I'll 00:25:53.979 --> 00:25:55.649 do it. And I did that, because I used 00:25:55.649 --> 00:25:57.389 to work out of the San Francisco office. Now 00:25:57.389 --> 00:25:58.700 I'm working out of the New York office. And 00:25:58.700 --> 00:26:01.200 they use different tool sets. It just evolved that 00:26:01.200 --> 00:26:03.889 way. And rather than stomp that out, we've let, 00:26:03.889 --> 00:26:06.129 we've let it evolve. And it's been great. 00:26:06.129 --> 00:26:07.889 My advice on that front would at least be 00:26:07.889 --> 00:26:11.869 this. One, be open to learning new things. Two, 00:26:11.869 --> 00:26:14.200 if you have your super awesome custom setup that's 00:26:14.200 --> 00:26:17.359 just for you, and your own, your precious, Vim 00:26:17.359 --> 00:26:21.009 bindings, don't stomp the defaults. Because maybe that person 00:26:21.009 --> 00:26:23.669 who doesn't really know Vim very well, they might 00:26:23.669 --> 00:26:25.840 at, or, or RubyMine or whatever your editor or 00:26:25.840 --> 00:26:28.039 tool of choice is, they may not know your 00:26:28.039 --> 00:26:29.999 thing. But they may know kind of enough of 00:26:29.999 --> 00:26:32.619 the default settings, that they can kind of get 00:26:32.619 --> 00:26:35.389 around and maybe, maybe they start adopting yours. Or 00:26:35.389 --> 00:26:37.229 maybe they say, yeah, I don't really use that 00:26:37.229 --> 00:26:39.679 key binding for this, I use it for something 00:26:39.679 --> 00:26:42.789 else. And, and be open for that. But people 00:26:42.789 --> 00:26:48.609 can sometimes be too closed minded about, you know, 00:26:48.609 --> 00:26:52.580 they build this little ecosystem just for themselves, and, 00:26:52.580 --> 00:26:54.869 and not want to, to change, and I encourage 00:26:54.869 --> 00:26:57.409 people be open to change, but leave the defaults. 00:26:57.409 --> 00:26:59.970 And be open to trying other stuff. But there's 00:26:59.970 --> 00:27:03.359 no silver bullet unless you mandate, our office is 00:27:03.359 --> 00:27:07.679 an X office and everybody just learn it. 00:27:07.679 --> 00:27:11.639 OK. Integrating other people into the team. Like, QA 00:27:11.639 --> 00:27:14.039 folks. And if you don't mind, I'll sort of 00:27:14.039 --> 00:27:19.159 mutate that question into pairing across different disciplines, or 00:27:19.159 --> 00:27:21.220 integrating anybody of any other discipline into the pairing 00:27:21.220 --> 00:27:24.239 structure. I'm a big fan of that. Be it 00:27:24.239 --> 00:27:27.809 a QA person, design people, design, you know, front 00:27:27.809 --> 00:27:31.389 end design or visual design, designers. Even your product 00:27:31.389 --> 00:27:34.749 owners, product managers, whatever you want to call them. 00:27:34.749 --> 00:27:36.509 I think that that's great. One, it builds up 00:27:36.509 --> 00:27:39.009 a lot of empathy. Just from a person to 00:27:39.009 --> 00:27:41.409 person point of view. Two, it can be super 00:27:41.409 --> 00:27:45.179 practical, especially with, say, visual design. And, and actually 00:27:45.179 --> 00:27:48.519 QA as well. Like, that last mile, I've always 00:27:48.519 --> 00:27:51.409 found, of say a visual design, where, you know, 00:27:51.409 --> 00:27:52.729 you've pretty much got all the assets in. Let's 00:27:52.729 --> 00:27:53.960 say you're building a web page. Got all the 00:27:53.960 --> 00:27:58.229 assets in and you're, you're tweaking the css, and 00:27:58.229 --> 00:27:59.999 all the stuff that came from visual design, it's 00:27:59.999 --> 00:28:02.830 pretty good right now, but you know that field, 00:28:02.830 --> 00:28:04.619 or that area of the page that looked great 00:28:04.619 --> 00:28:07.519 with lorem ipsum, that only had like twenty-five characters. 00:28:07.519 --> 00:28:09.629 If somebody puts in a thousand characters, and they 00:28:09.629 --> 00:28:13.840 can, the whole thing goes blah. Right? Crazy. 00:28:13.840 --> 00:28:17.109 Getting visual design in to say, hey, like, the, 00:28:17.109 --> 00:28:19.979 the last bit, let's just sit here and work 00:28:19.979 --> 00:28:22.080 on this. And then you can just, especially if 00:28:22.080 --> 00:28:23.440 you're using, like, web, if you're doing web development, 00:28:23.440 --> 00:28:25.349 and you can literally tweak it right there on 00:28:25.349 --> 00:28:27.840 the screen together. That could be super powerful. And 00:28:27.840 --> 00:28:30.879 I've even been in situations where you'll, they were 00:28:30.879 --> 00:28:33.149 so good that they were working on this thing 00:28:33.149 --> 00:28:34.889 and were like, moving stuff around. They're like, ah, 00:28:34.889 --> 00:28:36.929 now that we've moved this from here to here, 00:28:36.929 --> 00:28:40.219 those icons look terrible. Hold on, and they're like, 00:28:40.219 --> 00:28:42.200 somehow spew out an icon out of their fingertips. 00:28:42.200 --> 00:28:44.299 And they're like, OK, now pull in this icon. 00:28:44.299 --> 00:28:46.999 And wow, it's just. It's like the most rapid 00:28:46.999 --> 00:28:50.669 changing finalization wrapping up of, of something I've ever 00:28:50.669 --> 00:28:52.529 worked in, and that was one of the best 00:28:52.529 --> 00:28:53.909 experiences I've ever had pairing was with this person 00:28:53.909 --> 00:28:59.710 who was not technically a software developer. 00:28:59.710 --> 00:29:02.039 QA, as well. I think, like, a really good 00:29:02.039 --> 00:29:04.999 QA person is worth their weight in, in gold. 00:29:04.999 --> 00:29:07.309 I think if anybody here is kind of tied 00:29:07.309 --> 00:29:11.149 into the capital A Agile community, or at least 00:29:11.149 --> 00:29:14.840 extreme programming, you know, somehow this strange notion came 00:29:14.840 --> 00:29:17.799 up that, like, you don't need QA. We've got 00:29:17.799 --> 00:29:20.649 tests for that. And it's like, nah. Those are 00:29:20.649 --> 00:29:23.239 two different things. So, integrating QA people can be 00:29:23.239 --> 00:29:26.249 really good, especially if you're, if they're in a 00:29:26.249 --> 00:29:28.690 mode of, maybe you've got a big release coming 00:29:28.690 --> 00:29:32.460 up, and they're hammering the site and finding all 00:29:32.460 --> 00:29:36.580 these bugs, and you know, pairing with them as 00:29:36.580 --> 00:29:40.279 you're fixing the bugs, as they're like pressing, you 00:29:40.279 --> 00:29:42.580 know, trying all their different attacks on the system. 00:29:42.580 --> 00:29:44.320 They're saying, OK, well you fixed that one, but 00:29:44.320 --> 00:29:46.099 that makes me think of this other thing. Oh, 00:29:46.099 --> 00:29:48.149 look. It's broken. OK. Try this. Try this. And 00:29:48.149 --> 00:29:53.419 just, like, just kind of, you know, purpose, purposeful 00:29:53.419 --> 00:29:56.460 pairing when it's needed can be super valuable as 00:29:56.460 --> 00:29:56.960 well. 00:29:56.960 --> 00:30:01.239 Now I haven't, say, just, you know, like, where, 00:30:01.239 --> 00:30:03.440 hey, we're making an android application and today I'm 00:30:03.440 --> 00:30:06.219 doing some, you know, a big feature, and it 00:30:06.219 --> 00:30:09.460 just pair with a QA person instead of another 00:30:09.460 --> 00:30:11.609 software developer, in the middle or at the beginning 00:30:11.609 --> 00:30:15.009 of the development process. I haven't done that. But 00:30:15.009 --> 00:30:15.759 give it a shot. 00:30:15.759 --> 00:30:19.489 All right. That was three. I hope they were 00:30:19.489 --> 00:30:20.119 good. Cool. 00:30:20.119 --> 00:30:23.129 AUDIENCE MEMBER: Quick comment about the cross-tooling, 00:30:23.129 --> 00:30:23.559 or cross-editor, 00:30:23.559 --> 00:30:29.989 there's a tool called Floobits - F-L-O-O bits, which 00:30:29.989 --> 00:30:32.349 lets your Vim people work with your Emacs people, 00:30:32.349 --> 00:30:34.629 and the idea is, like, one of them's got 00:30:34.629 --> 00:30:36.179 their computer and the other one's got their computer, 00:30:36.179 --> 00:30:37.840 and they're each running the same damn thing, but 00:30:37.840 --> 00:30:40.899 it's all synced and good and there's a fall 00:30:40.899 --> 00:30:43.580 back, which is like a diff shipper for other 00:30:43.580 --> 00:30:44.210 apps. So it's- 00:30:44.210 --> 00:30:45.049 J.M.: OK. Cool. Floobits. 00:30:45.049 --> 00:30:45.669 AUDIENCE MEMBER: Yeah. 00:30:45.669 --> 00:30:47.200 J.M.: I've heard of it. I haven't, well, I 00:30:47.200 --> 00:30:48.649 did, I technically did try it when it was 00:30:48.649 --> 00:30:50.749 early. And it didn't really work very well, but 00:30:50.749 --> 00:30:51.679 I'm gonna try it again, cause people- 00:30:51.679 --> 00:30:52.989 AUDIENCE MEMBER: Yeah. It's, it's still- 00:30:52.989 --> 00:30:54.979 AUDIENCE MEMBER: -fairly early, I think. But the promise 00:30:54.979 --> 00:30:57.509 is there and more plugins would probably help it. 00:30:57.509 --> 00:30:58.049 But. 00:30:58.049 --> 00:30:59.129 J.M.: Excellent. 00:30:59.129 --> 00:31:01.899 AUDIENCE MEMBER: So, a couple questions. One, when you're 00:31:01.899 --> 00:31:04.739 driving, how much vocalization do you do to the 00:31:04.739 --> 00:31:07.469 other person explaining your thoughts? And the other one 00:31:07.469 --> 00:31:11.399 is, when you've got a senior developer paired with 00:31:11.399 --> 00:31:14.999 a junior developer, there's, you know, I frequently find, 00:31:14.999 --> 00:31:17.309 I'm the senior one on this side. And there's, 00:31:17.309 --> 00:31:20.669 I know I need to let them work through 00:31:20.669 --> 00:31:22.169 it, but at the same time I want to 00:31:22.169 --> 00:31:23.379 rip it out of their hands and type it, 00:31:23.379 --> 00:31:24.029 you know, it's like, how- 00:31:24.029 --> 00:31:24.419 J.M.: It's hard. 00:31:24.419 --> 00:31:26.029 AUDIENCE MEMBER: -what tools do you, techniques do you 00:31:26.029 --> 00:31:28.349 use to combat that and work with that and 00:31:28.349 --> 00:31:29.989 help them to learn? 00:31:29.989 --> 00:31:32.549 J.M.: Sure. So, the first question was. Wow, this 00:31:32.549 --> 00:31:35.589 is really terrible. What was the first question again? 00:31:35.589 --> 00:31:36.929 AUDIENCE MEMBER: Vocalization. 00:31:36.929 --> 00:31:41.549 J.M.: Vocalization. Yes. Ironically. So vocalization and then being 00:31:41.549 --> 00:31:43.219 a keyboard hog, right? I'm that, like, I'll, I'll, 00:31:43.219 --> 00:31:44.769 I'll take on a trip with that one. Cause 00:31:44.769 --> 00:31:46.169 I'm, I can be that way. 00:31:46.169 --> 00:31:49.820 Or, at least, letting new people struggle through something 00:31:49.820 --> 00:31:52.419 when you already know the answer, for example. 00:31:52.419 --> 00:31:55.460 Vocalization. I vocalize a lot. Especially because I do 00:31:55.460 --> 00:31:58.009 remote pair programming. And I lose a lot of 00:31:58.009 --> 00:32:01.489 the, a lot of the visual cues and physical 00:32:01.489 --> 00:32:04.149 cues that you might pick up sitting side-by-side. I 00:32:04.149 --> 00:32:06.619 lose a lot of those. So, when my whole 00:32:06.619 --> 00:32:09.749 view into somebody is from, say, the neck up, 00:32:09.749 --> 00:32:12.279 you know, or like the midsection up, it's harder 00:32:12.279 --> 00:32:14.739 for me to say, see anybody's hands. I almost 00:32:14.739 --> 00:32:16.820 never see anybody's hands. So are they reaching for 00:32:16.820 --> 00:32:18.609 the keyboard right now? Are they reaching for the 00:32:18.609 --> 00:32:20.979 mouse? Are their hands on their laps? You know, 00:32:20.979 --> 00:32:21.999 what are they about - are they about to 00:32:21.999 --> 00:32:23.450 do something? I don't really know. Well like, when 00:32:23.450 --> 00:32:26.019 you pair side by side, and out of, you 00:32:26.019 --> 00:32:27.320 know, right now I can still kind of see 00:32:27.320 --> 00:32:29.489 you over there. And if I see this hand 00:32:29.489 --> 00:32:31.309 going out then that's a cue for me to 00:32:31.309 --> 00:32:32.629 be like, oh, it looks like they want to 00:32:32.629 --> 00:32:34.639 do something. I wasn't in the middle of doing 00:32:34.639 --> 00:32:37.109 something, so I'll kind of back off. 00:32:37.109 --> 00:32:41.619 So, maybe a little bit less verbalization, consciously verbalizing, 00:32:41.619 --> 00:32:45.570 anyway. But, when I'm remote, I'm constantly saying things 00:32:45.570 --> 00:32:47.229 like, I'm gonna grab the mouse. Can I look 00:32:47.229 --> 00:32:49.119 at this? Would you like to drive? Do you 00:32:49.119 --> 00:32:51.249 mind if I drive? All that kind of stuff. 00:32:51.249 --> 00:32:54.109 And, you know, to the point where, I've pair 00:32:54.109 --> 00:32:56.759 programmed with, remote paired with people, and they've told 00:32:56.759 --> 00:32:59.809 me later that they, they found themselves doing that 00:32:59.809 --> 00:33:03.779 much more when they were pairing side by side, 00:33:03.779 --> 00:33:06.669 and they felt it made them a better programmer, 00:33:06.669 --> 00:33:09.210 or a better pair anyway, because they found themselves 00:33:09.210 --> 00:33:11.820 being more vocal even when they were in person. 00:33:11.820 --> 00:33:14.019 Which was, which I thought was great. 00:33:14.019 --> 00:33:16.299 AUDIENCE MEMBER: What about vocalizing, like, OK, now I'm 00:33:16.299 --> 00:33:18.779 making this case statement because of such and such, 00:33:18.779 --> 00:33:19.879 do you go to that level, or? 00:33:19.879 --> 00:33:21.979 J.M.: Yeah. We, I will sometimes go to that 00:33:21.979 --> 00:33:25.239 level if, if I feel like that it's needed. 00:33:25.239 --> 00:33:28.879 Often, yeah, I'm kind of like, constantly talking. And 00:33:28.879 --> 00:33:31.089 I've recorded myself doing it, so I could show, 00:33:31.089 --> 00:33:32.690 like, for a presentation or something like that. I 00:33:32.690 --> 00:33:34.940 actually kind of hate listening to myself do all 00:33:34.940 --> 00:33:38.409 that. But I, I think it's valuable. And I 00:33:38.409 --> 00:33:41.909 find that often, my pair will in, sort of 00:33:41.909 --> 00:33:43.440 call me out when I'm not doing that. You 00:33:43.440 --> 00:33:45.149 know, I'll be kind of, like, in a zone 00:33:45.149 --> 00:33:46.539 and kind of going and like the thoughts are 00:33:46.539 --> 00:33:48.609 coming out and they'll say, like, well, what, what, 00:33:48.609 --> 00:33:50.289 what do you, what are you, what are you 00:33:50.289 --> 00:33:53.339 doing? And I'll realize, ooh, I haven't, I'll realize 00:33:53.339 --> 00:33:55.549 I haven't been, I haven't been saying anything. I 00:33:55.549 --> 00:33:59.580 haven't been vocalizing it. And so, you know, that, 00:33:59.580 --> 00:34:01.639 I think, is also kind of a tick mark 00:34:01.639 --> 00:34:06.249 in the be more vocal column. 00:34:06.249 --> 00:34:09.409 Were those the two questions? 00:34:09.409 --> 00:34:09.629 AUDIENCE MEMBER: Junior developers. 00:34:09.629 --> 00:34:09.889 J.M.: Junior developers. My god. 00:34:09.889 --> 00:34:10.109 AUDIENCE MEMBER: Letting them- 00:34:10.109 --> 00:34:10.810 J.M.: What's happening to me? 00:34:10.810 --> 00:34:13.969 AUDIENCE MEMBER: -work through the problem when you know 00:34:13.969 --> 00:34:14.320 it. 00:34:14.320 --> 00:34:17.849 J.M.: Yes. So, techniques for trying to let the 00:34:17.849 --> 00:34:22.139 junior people drive more when you're more senior. It's 00:34:22.139 --> 00:34:25.649 certainly hard. Some people never get it. Some people, 00:34:25.649 --> 00:34:26.960 it can be especially bad if you have a 00:34:26.960 --> 00:34:29.489 person who is, let's say, naturally, or professionally more 00:34:29.489 --> 00:34:32.340 passive, and somebody who is naturally or professionally more 00:34:32.340 --> 00:34:39.060 assertive. Tricks for that are just both sides trying 00:34:39.060 --> 00:34:40.989 to be more honest and vocal about things. 00:34:40.989 --> 00:34:42.989 Like, oh, in saying, like, hey, do you mind 00:34:42.989 --> 00:34:45.199 if I drive now? Would you like to drive? 00:34:45.199 --> 00:34:49.030 I have physically sat on my hands. Like, underneath 00:34:49.030 --> 00:34:52.820 my thighs. And when I feel myself, like, pull 00:34:52.820 --> 00:34:54.260 my hand out, I'm like, ah, get it back 00:34:54.260 --> 00:34:59.780 in there. Sit down. And ping pong pairing, if 00:34:59.780 --> 00:35:01.890 people haven't heard of that, is a great sort 00:35:01.890 --> 00:35:07.120 of structure to, to implement, to kind of enforce 00:35:07.120 --> 00:35:09.690 a rigidity in the bounce back and forth. So, 00:35:09.690 --> 00:35:12.500 again, this is testing, test-driven development. So if you're 00:35:12.500 --> 00:35:14.320 doing test-driven development, you can have one person write 00:35:14.320 --> 00:35:17.430 a failing test, and the other person implement the 00:35:17.430 --> 00:35:20.600 code to make it pass. And then they, the 00:35:20.600 --> 00:35:22.840 second person, writes a failing test, and the other 00:35:22.840 --> 00:35:24.730 person writes the code to make it pass. And 00:35:24.730 --> 00:35:27.400 you can sort of enforce that rigidity while you 00:35:27.400 --> 00:35:28.280 need it. 00:35:28.280 --> 00:35:31.330 And it was, it can actually be a not-so-subtle 00:35:31.330 --> 00:35:34.230 cue, that somebody is being a keyboard hog. And 00:35:34.230 --> 00:35:36.670 I encourage people to do this if they maybe 00:35:36.670 --> 00:35:39.950 don't want to be confrontational about, like, gimme the 00:35:39.950 --> 00:35:42.140 damn keyboard. But if somebody's kind of going, or 00:35:42.140 --> 00:35:44.390 let's say, if you're going along, and your coding 00:35:44.390 --> 00:35:46.040 and everything is great, and then your pair says, 00:35:46.040 --> 00:35:48.800 hey, how about if we do some ping pong? 00:35:48.800 --> 00:35:54.280 Like, oh. Hmm. Maybe I'm driving too much. Or 00:35:54.280 --> 00:35:56.100 you can, you can say, like, oh, let's ping 00:35:56.100 --> 00:35:58.120 pong this one. What do you say? Like, that 00:35:58.120 --> 00:36:00.650 can be a, maybe a less assertive way of 00:36:00.650 --> 00:36:02.880 saying let's balance it out. 00:36:02.880 --> 00:36:04.700 Trace, you have something to say? 00:36:04.700 --> 00:36:07.430 AUDIENCE MEMBER: Oh, just, I'm really glad you mentioned. 00:36:07.430 --> 00:36:09.770 Thanks. I'm really glad you mentioned ping pong as 00:36:09.770 --> 00:36:12.650 a, a technique to help manage that. When I 00:36:12.650 --> 00:36:13.900 first started pairing, it was definitely something that was 00:36:13.900 --> 00:36:16.040 very hard for me to do, and I had 00:36:16.040 --> 00:36:17.000 to do the same thing. I sat on my 00:36:17.000 --> 00:36:19.910 hands for three weeks. I, I saw people like, 00:36:19.910 --> 00:36:21.730 you know, when I sat side by side with 00:36:21.730 --> 00:36:22.990 someone, I'll see their hands come near the keyboard, 00:36:22.990 --> 00:36:24.470 and my will always leave. Or if their hands 00:36:24.470 --> 00:36:26.610 leave the keyboard, I'm, OK. It's my time to 00:36:26.610 --> 00:36:29.050 speak. And I'll raise them up. 00:36:29.050 --> 00:36:31.620 So I've heard of some of the other paradigms, 00:36:31.620 --> 00:36:34.470 like driver-navigator, for example. What are some of the 00:36:34.470 --> 00:36:37.810 other pairing patterns in addition to ping pong and 00:36:37.810 --> 00:36:40.020 when might they be good to use, and what 00:36:40.020 --> 00:36:40.680 are their names? 00:36:40.680 --> 00:36:44.400 J.M.: Oh, let's see. Yeah, driver-navigator is sort of 00:36:44.400 --> 00:36:48.190 the, the canonical pairing structure people think about, where 00:36:48.190 --> 00:36:50.400 one person is literally driving and one person is 00:36:50.400 --> 00:36:54.140 literally saying, oh, OK, well you missed this and, 00:36:54.140 --> 00:36:56.510 hey, maybe, you know, let's use an if and 00:36:56.510 --> 00:36:58.580 not an unless there, and that kind of a 00:36:58.580 --> 00:36:59.800 thing. And they're kind of also kind of looking 00:36:59.800 --> 00:37:01.060 over the rest of the code and say, like, 00:37:01.060 --> 00:37:03.290 hey, how about we extract, you know, finish that 00:37:03.290 --> 00:37:05.240 up, but let's extract that as a method next. 00:37:05.240 --> 00:37:06.330 And kind of a thing. 00:37:06.330 --> 00:37:07.960 As far as, those, that's the one I'm most 00:37:07.960 --> 00:37:11.400 familiar with. The, and, and that can be great. 00:37:11.400 --> 00:37:13.220 I think that's kind of the natural mode of 00:37:13.220 --> 00:37:15.730 most pairings. Is like, one person is like actively 00:37:15.730 --> 00:37:19.100 engaged and, and driving, the other one, or, actively 00:37:19.100 --> 00:37:21.310 engaged in typing, the other person is, is doing 00:37:21.310 --> 00:37:23.600 more navigating. I think that the challenge can be 00:37:23.600 --> 00:37:27.700 figuring out when, when to switch. Testing really helps 00:37:27.700 --> 00:37:29.760 for that. And if you don't do testing, let's 00:37:29.760 --> 00:37:32.630 say you don't, then maybe you can use some 00:37:32.630 --> 00:37:35.050 other kind of bounds. Like, you know, you just 00:37:35.050 --> 00:37:36.910 wrote this method. OK, now the next guy writes 00:37:36.910 --> 00:37:40.020 the next method. Or, you know, you're doing a 00:37:40.020 --> 00:37:43.820 bunch of refactoring and extracting classes and, and methods 00:37:43.820 --> 00:37:45.450 or something like that, then, you know, you bounce 00:37:45.450 --> 00:37:49.190 back and forth between the thing you're extracting, for 00:37:49.190 --> 00:37:49.930 example. 00:37:49.930 --> 00:37:54.100 OK. We gotta couple minutes. One minute actually. 00:37:54.100 --> 00:37:57.440 AUDIENCE MEMBER: The most useful thing that I ever 00:37:57.440 --> 00:38:00.360 did for stopping myself from over driving was getting 00:38:00.360 --> 00:38:02.730 a chess clock. So that we could actually see 00:38:02.730 --> 00:38:05.350 how much time I spent driving. And so when 00:38:05.350 --> 00:38:07.550 I'm looking at the clock and I'm forty-five minutes 00:38:07.550 --> 00:38:10.250 ahead, it, it's very helpful. 00:38:10.250 --> 00:38:12.250 J.M.: That is excellent. 00:38:12.250 --> 00:38:14.860 AUDIENCE MEMBER: And another technique is to just turn 00:38:14.860 --> 00:38:17.010 your keyboard over if you have two keyboards. Just 00:38:17.010 --> 00:38:19.060 make it so you can't type. 00:38:19.060 --> 00:38:20.860 J.M.: That's a really good one, too. 00:38:20.860 --> 00:38:22.100 OK. Forty seconds, go. 00:38:22.100 --> 00:38:25.020 AUDIENCE MEMBER: Based on your experience, can you share 00:38:25.020 --> 00:38:27.340 what you consider to be good habits and effective 00:38:27.340 --> 00:38:30.310 habits in pair programming? And then can you, are 00:38:30.310 --> 00:38:33.000 there, are there pitfalls that people tend to fall 00:38:33.000 --> 00:38:36.580 into that, are there commonalities that you see in, 00:38:36.580 --> 00:38:37.110 in? 00:38:37.110 --> 00:38:39.910 J.M.: Sure. In twenty-five seconds I will, I'll put 00:38:39.910 --> 00:38:42.170 it this way. I think it's, the main thing 00:38:42.170 --> 00:38:44.570 is to remember that we're all human, and that 00:38:44.570 --> 00:38:47.520 it's not really about technology or, really, about programming, 00:38:47.520 --> 00:38:50.590 per se. It's about being patient and having a 00:38:50.590 --> 00:38:54.040 good attitude and building trust. So as long as 00:38:54.040 --> 00:38:56.390 we all have a good attitude with each other, 00:38:56.390 --> 00:38:59.150 trust each other, are patient with each other as 00:38:59.150 --> 00:39:01.970 we're all learning, I think that's really the key 00:39:01.970 --> 00:39:03.980 to pair programming. You can apply that to almost 00:39:03.980 --> 00:39:07.920 any situation, but especially this very strange and extreme 00:39:07.920 --> 00:39:11.160 version of software development. I hope that helps. 00:39:11.160 --> 00:39:15.600 That's it. We're out of time. Like I said, 00:39:15.600 --> 00:39:16.680 thank you.