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