< Return to Video

RailsConf 2014 - I've Pair Programmed for 27,000 Hours. Ask Me Anythings! by Joe moore

  • 0:17 - 0:18
    JOE MOORE: My name is Joe Moore,
  • 0:18 - 0:23
    and I've pair programmed for almost thirteen
  • 0:23 - 0:26
    and a half, almost every single working day.
  • 0:26 - 0:31
    And for the last four years, I've pair programmed
  • 0:31 - 0:34
    remotely using remote pair programming full
    time,
  • 0:34 - 0:37
    out of those thirteen years. I work for Pivotal
    Labs.
  • 0:37 - 0:41
    We're a Agile software-development consultancy.
  • 0:41 - 0:46
    And I work remotely from Atlanta.
  • 0:46 - 0:48
    There's two of you who didn't hear this. I'd
  • 0:48 - 0:52
    love feedback at bit.ly dot com slash pairprogrammingama,
    it's
  • 0:52 - 0:57
    totally anonymous. And, also, for the other
    people who
  • 0:57 - 0:59
    walked in, there's a microphone here and a
    microphone
  • 0:59 - 1:02
    over here. If you have questions, it'd be
    great
  • 1:02 - 1:04
    if you could make your way that way and
  • 1:04 - 1:06
    start, and queue up while I kind of blab
  • 1:06 - 1:09
    on about some other stuff. If not, I'm gonna
  • 1:09 - 1:11
    grab these mics and I'm gonna run around,
    and
  • 1:11 - 1:15
    do a, I don't know, a Maury, maybe. I
  • 1:15 - 1:19
    don't know who's, is he still around?
  • 1:19 - 1:22
    Anyway. So, again, thank you for all, everybody
    for
  • 1:22 - 1:26
    coming here. Who is familiar, at least somewhat,
    with
  • 1:26 - 1:32
    pair programming? I'm gonna call that eighty
    to ninety
  • 1:32 - 1:34
    percent. That's great. So, for those of you
    who
  • 1:34 - 1:37
    don't know, pair programming is a software
    development technique,
  • 1:37 - 1:40
    by which two programmers work on the same
    code,
  • 1:40 - 1:43
    at the same time, solving the same software
    problem
  • 1:43 - 1:46
    on the same computer. That's what pair programming
    is.
  • 1:46 - 1:47
    And you can throw the word remote on there,
  • 1:47 - 1:49
    and guess what, that's all that stuff, just
    using
  • 1:49 - 1:55
    some remote collaboration softwares, such
    as video chat and
  • 1:55 - 1:57
    audio chat and screen sharing and such.
  • 1:57 - 2:00
    So what are the benefits of pair programming?
    I
  • 2:00 - 2:02
    could have slides and slides and slides, but
    I'll
  • 2:02 - 2:04
    just give you a few. It's everything from
    having
  • 2:04 - 2:10
    a continuous code review to cross-training
    junior people and
  • 2:10 - 2:14
    older people, or, or more experienced people.
    Cross-training people
  • 2:14 - 2:17
    from different disciplines. You tend to introduce
    fewer bugs
  • 2:17 - 2:21
    because you have two eyes on the same thing.
  • 2:21 - 2:24
    You have differing opinions, which is really
    great, because
  • 2:24 - 2:26
    that ends up raising what I call the whole
  • 2:26 - 2:30
    team to what I call the highest common denominator.
  • 2:30 - 2:33
    Because that kind of disagreement and such
    is really
  • 2:33 - 2:34
    great. And it goes on and on and on
  • 2:34 - 2:38
    and on from there. In general, the general
    principle,
  • 2:38 - 2:40
    I think as most of us know, in almost
  • 2:40 - 2:42
    everything, two heads are better than one
    when you're
  • 2:42 - 2:45
    trying to solve hard problems.
  • 2:45 - 2:50
    What are the challenges of pair programming?
    It's extremely,
  • 2:50 - 2:54
    it can be very exhausting. Personality conflicts
    can be
  • 2:54 - 2:58
    difficult when people don't necessarily get
    along. It's definitely
  • 2:58 - 3:01
    what I would consider to be the most difficult
  • 3:01 - 3:06
    software development practice to implement,
    both from a social
  • 3:06 - 3:09
    point of view, from selling it to people on
  • 3:09 - 3:12
    the ground people, to selling it to management
    that
  • 3:12 - 3:15
    it's, not it's not just, it's not double the
  • 3:15 - 3:18
    money and twice the time, et cetera. But it
  • 3:18 - 3:21
    also, I feel, has the greatest benefits. So,
    it's
  • 3:21 - 3:23
    the hardest, but it's got the biggest pay
    off,
  • 3:23 - 3:27
    if you're willing to dedicate yourself to
    it.
  • 3:27 - 3:30
    And this is the, one of the top three
  • 3:30 - 3:33
    questions, so I thought I'd go ahead and take
  • 3:33 - 3:34
    care of that now. When do you decide to
  • 3:34 - 3:36
    breaks? When do you decide to go to the
  • 3:36 - 3:39
    bathroom? And the answer is, whenever you
    need to
  • 3:39 - 3:43
    go to the bathroom is the optimum time when
  • 3:43 - 3:47
    you should probably do so. And it kind of
  • 3:47 - 3:51
    points to, you know, you're just people working
    together.
  • 3:51 - 3:52
    You know, you, you decide to take breaks when
  • 3:52 - 3:55
    you're ready to take breaks. If you've been
    going
  • 3:55 - 3:57
    for an hour, you've been going for more than
  • 3:57 - 3:59
    an hour. Yeah, take a break. Stretch your
    legs.
  • 3:59 - 4:02
    Play from ping pong. Use facilities. What
    you're kind
  • 4:02 - 4:04
    of into. Take breaks. It's a super intense
    discipline.
  • 4:04 - 4:07
    You, you do get tired, and taking breaks is
  • 4:07 - 4:10
    super important. And do so whenever you feel
    like
  • 4:10 - 4:13
    you need it. Need to.
  • 4:13 - 4:17
    And with that, ask me anything. Who's got
    a
  • 4:17 - 4:19
    question? Over here there's a question.
  • 4:19 - 4:22
    QUESTION: So, my team has been doing pairing,
    but
  • 4:22 - 4:25
    we find that, just subjectively, that it tends
    to
  • 4:25 - 4:27
    slow things down by maybe fifty to a hundred
  • 4:27 - 4:30
    QUESTION: In other words, things tend to go
    up
  • 4:30 - 4:33
    to twice as slow when we do it. But
  • 4:33 - 4:35
    we still use it for our hard things, like
  • 4:35 - 4:40
    ramping up a new developer on a project, or
  • 4:40 - 4:44
    laying the, the foundations for a new project.
    But
  • 4:44 - 4:45
    not for a lot of other things, because of
  • 4:45 - 4:46
    the time cost. And I was wondering if you
  • 4:46 - 4:49
    could comment on how it effects your velocity
    and
  • 4:49 - 4:51
    maybe we just need to look further down the
  • 4:51 - 4:52
    road to see pay offs and velocity? Is it
  • 4:52 - 4:54
    one of those things?
  • 4:54 - 4:58
    J.M.: Sure. So, I'm hopefully not going. Raise
    your
  • 4:58 - 5:01
    hand if you could not hear the question. Everybody
  • 5:01 - 5:03
    could hear the question. That's great. Cause
    it'd be
  • 5:03 - 5:06
    great not to spend time repeating. So it looks
  • 5:06 - 5:08
    like the mics are working.
  • 5:08 - 5:09
    So, you all heard the question. Velocity seems
    to
  • 5:09 - 5:14
    slow down. I think that the empirical evidence
    has
  • 5:14 - 5:18
    shown that, at least in a controlled environment,
    pair
  • 5:18 - 5:20
    programming has been shown to slow down accomplishment
    of
  • 5:20 - 5:24
    tasks by fifteen - one five - percent in
  • 5:24 - 5:27
    a controlled environment. And I think that
    this is
  • 5:27 - 5:30
    often with college students who are either
    paired up
  • 5:30 - 5:33
    or doing solo. So that's certainly not fifty
    -
  • 5:33 - 5:37
    well, five-zero - to a hundred percent.
  • 5:37 - 5:39
    And there, there are other pay offs. But I
  • 5:39 - 5:43
    guess my initial reaction would be, you know,
    pair
  • 5:43 - 5:46
    programming is a tool, and the, you know,
    the,
  • 5:46 - 5:49
    I would call it the lower-case agile toolbox.
    You
  • 5:49 - 5:52
    know, not the, you know, it doesn't, it's
    not
  • 5:52 - 5:55
    necessarily mandated. But there are other
    things that you
  • 5:55 - 5:57
    might be able to apply if you find that
  • 5:57 - 5:59
    things are just going really slow. And that
    is
  • 5:59 - 6:02
    identifying the issue. And maybe you've already
    done this.
  • 6:02 - 6:05
    You've already identified, this is taking
    twice as long
  • 6:05 - 6:08
    and here are the five reasons why. And they're
  • 6:08 - 6:10
    insurmountable reasons.
  • 6:10 - 6:14
    So, I would say, you might want to use,
  • 6:14 - 6:16
    you know, what's called a retrospective, or
    investigate, you
  • 6:16 - 6:18
    know, dig deep into why things are taking
    too
  • 6:18 - 6:22
    long. Are you arguing about stuff? Are, are
    the
  • 6:22 - 6:25
    pairings so unbalanced that the senior people
    are constantly
  • 6:25 - 6:28
    trying to pull up people who are, are, are
  • 6:28 - 6:31
    more junior? Are there differing opinions
    and people are
  • 6:31 - 6:34
    just constantly arguing? Those are, you know,
    there could
  • 6:34 - 6:36
    be many, many reasons, so identifying the
    problem is
  • 6:36 - 6:38
    the first step to figuring out maybe why it's
  • 6:38 - 6:41
    taking that long, because in my experience,
    it should,
  • 6:41 - 6:47
    potentially be a bit slower, on the metric
    of
  • 6:47 - 6:50
    from moments on the keyboard typing the first
    characters
  • 6:50 - 6:53
    to maybe doing a commit. And that's not what
  • 6:53 - 6:57
    encompasses done software. That's just two
    people coming up
  • 6:57 - 6:59
    with the best solution. And you can have other
  • 6:59 - 7:02
    pay offs further down the line, such as your
  • 7:02 - 7:06
    code is not as buggy. Your code is hopefully
  • 7:06 - 7:08
    better-factored because two people are coming
    up with the
  • 7:08 - 7:11
    design versus just one, et cetera, et cetera.
    So
  • 7:11 - 7:13
    I would encourage you to dig deep into why
  • 7:13 - 7:15
    you're having these problems, and see if you
    can
  • 7:15 - 7:17
    address those problems. And then try it again,
    and,
  • 7:17 - 7:19
    and measure again. Thank you.
  • 7:19 - 7:23
    QUESTION: Just as a, kind of following, my
    big
  • 7:23 - 7:26
    impression is that, in many cases, the tasks
    are
  • 7:26 - 7:30
    relatively straight-forward, and so it just,
    you know, wouldn't
  • 7:30 - 7:34
    take a single person much longer to do them.
  • 7:34 - 7:34
    J.M.: Sure.
  • 7:34 - 7:35
    QUESTION: And then, so the other person is
    kind
  • 7:35 - 7:39
    of, you know, avoiding, helping avoid typos
    and, and,
  • 7:39 - 7:41
    you know, that sort of thing. But maybe not
  • 7:41 - 7:42
    adding as much value as they might be doing.
  • 7:42 - 7:47
    J.M.: Right. So we've, we've had clients decide
    that,
  • 7:47 - 7:50
    you know, they measure, you know, we use a
  • 7:50 - 7:55
    particular project management tool that lets
    us estimate stuff.
  • 7:55 - 7:56
    And it's called Pivotal Tracker. You don't
    have to
  • 7:56 - 7:58
    use it. Cards on a wall. Whatever works for
  • 7:58 - 8:00
    you. So we tend to estimate things sort of
  • 8:00 - 8:03
    on like a one to eight scale. And we've
  • 8:03 - 8:05
    had clients who have said, after they disengage
    with
  • 8:05 - 8:08
    us, you know, anything that's a zero or a
  • 8:08 - 8:10
    one, I guess I should have said zero to
  • 8:10 - 8:12
    eight, they choose not to pair on those things,
  • 8:12 - 8:14
    cause they find they don't get much value.
    That's,
  • 8:14 - 8:16
    that's great for them. But they have made
    a
  • 8:16 - 8:19
    rule that, well anything that's more of a,
    than
  • 8:19 - 8:21
    a zero to a one on an eight point
  • 8:21 - 8:23
    scale, that that must be paired.
  • 8:23 - 8:25
    And so then maybe you re-evaluate the twos
    and
  • 8:25 - 8:27
    the threes and then ah, looks like maybe the
  • 8:27 - 8:30
    threes, they have, they're, those are getting
    pretty buggy.
  • 8:30 - 8:32
    So let's bring pairing back into that. So
    that's
  • 8:32 - 8:34
    a strategy as well.
  • 8:34 - 8:35
    Let's go over here.
  • 8:35 - 8:38
    QUESTION: If you could clarify, I have another
    question,
  • 8:38 - 8:39
    but, if you could clarify just for a moment
  • 8:39 - 8:45
    that fifteen percent increase, was that compared
    to one
  • 8:45 - 8:48
    developer doing the task? Or was that compared
    to
  • 8:48 - 8:50
    the relative work that two developers would
    do, you
  • 8:50 - 8:55
    know, each individually, right? So, one developer
    doing a
  • 8:55 - 8:58
    task takes this much time. Two developers
    doing the
  • 8:58 - 9:02
    same task takes fifteen percent more time?
    But then
  • 9:02 - 9:04
    that other developer isn't doing any work,
    right? So
  • 9:04 - 9:08
    there's actually less benefit than might,
    might be-
  • 9:08 - 9:11
    J.M.: Right. So the, I believe it was against
  • 9:11 - 9:12
    a solo programmer-
  • 9:12 - 9:13
    QUESTION: Right.
  • 9:13 - 9:14
    J.M.: -working by themselves.
  • 9:14 - 9:14
    QUESTION: OK.
  • 9:14 - 9:16
    J.M.: But there, you know, but I, there were
  • 9:16 - 9:19
    lots of other measures that showed, you know
    benefit
  • 9:19 - 9:20
    of pair programming-
  • 9:20 - 9:20
    QUESTION: Sure.
  • 9:20 - 9:22
    J.M.: -above, you know, it sort of out, in
  • 9:22 - 9:25
    the opinion of the report, outweighed this,
    this particular
  • 9:25 - 9:26
    slow-down.
  • 9:26 - 9:30
    QUESTION: So I, I think that kind of plays
  • 9:30 - 9:32
    into my, my main question, which was how do
  • 9:32 - 9:37
    you quantify to other stake-holders, particularly
    in the business,
  • 9:37 - 9:41
    even other developers, and maybe measure the
    benefits of
  • 9:41 - 9:43
    pair programming? I'm trying to incorporate
    it into our
  • 9:43 - 9:47
    process more, but getting some resistance.
    We, we've given
  • 9:47 - 9:50
    it enough to like experiment with, but how
    do
  • 9:50 - 9:53
    we actually measure the benefits and say whether
    it's,
  • 9:53 - 9:54
    you know, working for us?
  • 9:54 - 9:56
    J.M.: That's a great question. Measuring the
    benefits and
  • 9:56 - 9:58
    selling it to management, or your team. Selling
    it
  • 9:58 - 10:02
    to anybody is I, I feel one of the
  • 10:02 - 10:05
    hardest things to do. And even when I've been
  • 10:05 - 10:08
    going over the empirical evidence, even the
    empirical evidence
  • 10:08 - 10:10
    has said, like, more studies need to be done.
  • 10:10 - 10:13
    More sort of metrics for measuring this, this
    stuff
  • 10:13 - 10:16
    needs to, need to be developed.
  • 10:16 - 10:20
    It's, it is really, really hard to sell it,
  • 10:20 - 10:23
    because the math is just too easy. One plus
  • 10:23 - 10:28
    one equals two. You just can't, like, fight
    that
  • 10:28 - 10:30
    math. It's going to be, take twice as long
  • 10:30 - 10:32
    and it's gonna be twice as expensive, right?
    And
  • 10:32 - 10:35
    why would anybody ever do that? And I think,
  • 10:35 - 10:39
    yeah, and in my experience, you, you know,
    I
  • 10:39 - 10:40
    could, I could, we could try to come up
  • 10:40 - 10:41
    with some metrics and we could look at, you
  • 10:41 - 10:43
    know, I could point you towards these empirical
    studies
  • 10:43 - 10:46
    and they have particular measures of how they
    measured,
  • 10:46 - 10:48
    you know, different kind of factors. And I,
    I
  • 10:48 - 10:51
    find that stuff it, it bounces off people.
    You're
  • 10:51 - 10:54
    like, ah, yeah, that's all neat. But you've
    heard
  • 10:54 - 10:57
    of one plus one equals two, right?
  • 10:57 - 11:00
    And I think that this is an unsatisfying answer
  • 11:00 - 11:02
    that I'm about to give you. There's a leap
  • 11:02 - 11:05
    of faith that needs to happen, and I think
  • 11:05 - 11:07
    you can kind of come back to like, let's
  • 11:07 - 11:09
    pretend we're in a world where we can still
  • 11:09 - 11:14
    do TDD. In a world where we did TDD,
  • 11:14 - 11:16
    that was a leap of faith, too. Because it's
  • 11:16 - 11:18
    like, that's twice as long. Why would you,
    you
  • 11:18 - 11:21
    can't test something you haven't written yet.
    And that's
  • 11:21 - 11:22
    gonna take twice as long. And I'm willing
    to
  • 11:22 - 11:25
    bet almost everybody in this room has had
    that
  • 11:25 - 11:29
    argument with somebody who doesn't practice,
    like, not just
  • 11:29 - 11:32
    TDD but any kind of testing. It's too slow
  • 11:32 - 11:33
    and it takes twice as long.
  • 11:33 - 11:34
    And, finally, you're spouting all this stuff
    when you're
  • 11:34 - 11:37
    talking about all the things that you, make
    almost,
  • 11:37 - 11:39
    I'm willing to bet everybody in this room,
    love
  • 11:39 - 11:41
    testing, to somebody, and it's just bouncing
    off and
  • 11:41 - 11:43
    it's just bouncing off. And finally you're
    just like,
  • 11:43 - 11:45
    ah, you just gotta, you gotta try it. You're
  • 11:45 - 11:47
    going to see the benefit, I swear. And then
  • 11:47 - 11:51
    finally they do, and usually you win them
    over.
  • 11:51 - 11:52
    But actually, and I'll turn this around, because
    I
  • 11:52 - 11:54
    know that there's lots of people in the audience
  • 11:54 - 11:58
    here who have been more on the sales side
  • 11:58 - 12:01
    of pair programming than, than I have. Has
    anybody,
  • 12:01 - 12:04
    would anybody like to comment on success stories
    they
  • 12:04 - 12:08
    have had selling management or clients of
    your consultants
  • 12:08 - 12:13
    on how they've addressed this issue? Anybody?
    Maybe in
  • 12:13 - 12:17
    this row here? Could I encourage anybody?
    Does anybody
  • 12:17 - 12:19
    have anything to say? I've got a mobile mic.
  • 12:19 - 12:23
    Ah, excellent sir. Don't break your ankle.
  • 12:23 - 12:25
    AUDIENCE MEMBER: Hello, hello.
  • 12:25 - 12:27
    J.M.: Does that work?
  • 12:27 - 12:30
    AUDIENCE MEMBER: So one the, is this working?
  • 12:30 - 12:31
    J.M.: Could I get this mic, this hand-held
    mic
  • 12:31 - 12:31
    on?
  • 12:31 - 12:33
    V.O.: It's on.
  • 12:33 - 12:34
    J.M.: Oh, OK.
  • 12:34 - 12:35
    AUDIENCE MEMBER: Hello.
  • 12:35 - 12:36
    J.M.: Excellent.
  • 12:36 - 12:38
    AUDIENCE MEMBER: That's better.
  • 12:38 - 12:41
    One of the easiest ways that I've found to,
  • 12:41 - 12:43
    to get pair programming into a team is to
  • 12:43 - 12:49
    talk about the benefits of bringing, increasing
    your ability
  • 12:49 - 12:52
    to absorb junior developers into your team.
    A lot
  • 12:52 - 12:55
    of, I'm from San Francisco. A lot of companies
  • 12:55 - 12:58
    in San Francisco are hiring their first junior
    developer.
  • 12:58 - 13:03
    Like, right now. And so, one, a lot of
  • 13:03 - 13:04
    discussions I've had recently have been along
    the lines
  • 13:04 - 13:07
    of, OK, so we're bringing on our first junior
  • 13:07 - 13:10
    developer. Everything we do has to change,
    because we
  • 13:10 - 13:12
    need to vocalize a lot more things that we
  • 13:12 - 13:15
    used to. And, so, what I tell them, oftentimes,
  • 13:15 - 13:16
    is like, OK, one of the ways you can
  • 13:16 - 13:19
    practice that, before the junior developer
    shows up, is
  • 13:19 - 13:23
    by pairing amongst yourselves. Getting used
    to this idea
  • 13:23 - 13:26
    of, like, vocalizing your thought process,
    understanding how you
  • 13:26 - 13:29
    talk about writing code with each other, and
    then
  • 13:29 - 13:31
    you can bring someone in who's in a very
  • 13:31 - 13:34
    different place, and you'll be better-equipped
    to talk to
  • 13:34 - 13:35
    them about it.
  • 13:35 - 13:39
    J.M.: Thanks a lot. Thank you so much.
  • 13:39 - 13:40
    Excellent. So, go ahead.
  • 13:40 - 13:43
    AUDIENCE MEMBER: I had two things to say.
    Part
  • 13:43 - 13:45
    of like, selling pair programming, like, for
    me, as
  • 13:45 - 13:48
    a developer, it's been really awesome, just
    cause it
  • 13:48 - 13:50
    forces you to get out of your own box
  • 13:50 - 13:52
    of thinking and see how other people think
    about
  • 13:52 - 13:55
    writing code and sort of, like, maybe you
    thought
  • 13:55 - 13:57
    this one practice of how to do something was
  • 13:57 - 13:58
    bad because you got bitten by it once, but
  • 13:58 - 14:01
    maybe you can be convinced that, oh, no that's
  • 14:01 - 14:03
    actually worth doing. It's a great way to
    like
  • 14:03 - 14:05
    just share knowledge about gems that someone
    found on
  • 14:05 - 14:07
    another project if you're coming into something.
  • 14:07 - 14:10
    And then, like, to the junior developer point,
    like
  • 14:10 - 14:11
    it's great cause you're there and you know,
    you
  • 14:11 - 14:13
    ask, have you seen this part of the code
  • 14:13 - 14:15
    yet? No? Then you go through and you explain,
  • 14:15 - 14:18
    like, everything about it, cause you, you
    know, have,
  • 14:18 - 14:22
    you write it and you can, or you understand
  • 14:22 - 14:23
    it, and so that helps bring them in more
  • 14:23 - 14:25
    than just sort of looking through all this
    code
  • 14:25 - 14:26
    that may not have comments or was written
    by
  • 14:26 - 14:30
    someone who left the company later. So those
    are
  • 14:30 - 14:32
    my, like, big selling points. Like, I think
    it's
  • 14:32 - 14:36
    made me much better and much more open minded
  • 14:36 - 14:39
    developer, and like, made it much easier for
    me
  • 14:39 - 14:42
    to collaborate, which yields, I think, like
    better code,
  • 14:42 - 14:46
    and like, you know, over all makes your, your
  • 14:46 - 14:46
    group better cause you're just better at collaborating
    and
  • 14:46 - 14:49
    sharing ideas. And it sort of tears down the
  • 14:49 - 14:54
    barriers of like worrying about, about bumping
    shoulders in
  • 14:54 - 14:54
    communication.
  • 14:54 - 14:55
    We'll get kind of heated, like you said, like
  • 14:55 - 15:00
    and we'll just get through it, and in the,
  • 15:00 - 15:04
    in the end come to an agreement on what
  • 15:04 - 15:05
    will hopefully be a better idea or revisit
    it
  • 15:05 - 15:08
    My question was kind of around pair rotation.
    So,
  • 15:08 - 15:10
    like, if you're working on, on a team in
  • 15:10 - 15:12
    an office or, we work with one of, we
  • 15:12 - 15:15
    work with the clients' developers separately,
    like remote pairing,
  • 15:15 - 15:18
    like we'll spin up an EC2 instance and we're
  • 15:18 - 15:20
    trying to sort of figure out, like, proper
    pair
  • 15:20 - 15:23
    rotations, so like, on a particular feature,
    two developers
  • 15:23 - 15:26
    won't be the only ones like, who work on
  • 15:26 - 15:28
    it, know it, and make, like, to some extent
  • 15:28 - 15:31
    make all the decisions. And I'm curious, like,
    what
  • 15:31 - 15:35
    your thoughts are on that, and like sort of,
  • 15:35 - 15:37
    what you have found to be a good way
  • 15:37 - 15:37
    of pair rotation, if, if you've practiced
    that at
  • 15:37 - 15:37
    all.
  • 15:37 - 15:38
    J.M.: Sure.
  • 15:38 - 15:39
    AUDIENCE MEMBER: And things like that.
  • 15:39 - 15:43
    J.M.: Yeah. Absolutely. So pair rotation.
    Super important. I
  • 15:43 - 15:47
    think, several things can help encourage pair
    rotation. So
  • 15:47 - 15:49
    one, yes, we do rotate pairs on a regular
  • 15:49 - 15:53
    basis. There are extremes to this. There's
    something called,
  • 15:53 - 15:56
    I've never done this, but it's been dubbed
    promiscuous
  • 15:56 - 15:57
    pairing. I don't know if anybody has heard
    of
  • 15:57 - 16:01
    this. And it's where you pair many times per
  • 16:01 - 16:03
    day, like, on a timer basically. And there's
    been
  • 16:03 - 16:07
    a little bit of evidence to show that that
  • 16:07 - 16:09
    can be very productive. It's also shown to
    be
  • 16:09 - 16:13
    disruptive and exhausting. So I think that,
    give it
  • 16:13 - 16:16
    a, give it a try, perhaps.
  • 16:16 - 16:18
    But for us, for practical purposes, what we
    tend
  • 16:18 - 16:22
    to do is, it, it ties into the art
  • 16:22 - 16:25
    of breaking down work. So we call our, the
  • 16:25 - 16:28
    stuff we're working on, we call them stories.
    And
  • 16:28 - 16:30
    we've gotten quite good at being able to break
  • 16:30 - 16:35
    down deliverable stories to small enough pieces.
    This is
  • 16:35 - 16:37
    all, in almost every case. To small enough
    pieces
  • 16:37 - 16:40
    that, ideally, our pair developers will be
    able to
  • 16:40 - 16:42
    get one or two of them done per day.
  • 16:42 - 16:46
    And a long story, we'll say a big story,
  • 16:46 - 16:47
    that's gonna take a long time, quote on quote
  • 16:47 - 16:51
    long, that might be several days. Two days,
    maybe.
  • 16:51 - 16:52
    Three days.
  • 16:52 - 16:55
    So what I'm not saying is, this is going
  • 16:55 - 16:57
    to take three weeks to do. Now, maybe there
  • 16:57 - 16:59
    is a giant track of features, a huge feature
  • 16:59 - 17:01
    set - the entire profile page rewrite. That
    might
  • 17:01 - 17:05
    be weeks of work. But getting that link photo
  • 17:05 - 17:08
    upload thing, just that small thing, that
    might be
  • 17:08 - 17:10
    a day's worth of work or less. And so
  • 17:10 - 17:13
    we tend to rotate pairs every day, if we
  • 17:13 - 17:17
    can, at our morning stand up meeting. And,
    because
  • 17:17 - 17:20
    ideally people will have completed one or
    two things
  • 17:20 - 17:22
    the previous day and they're, they're ready
    to move
  • 17:22 - 17:23
    on. And if they're not, and if they didn't
  • 17:23 - 17:26
    complete it, there's, like, just a little
    bit left,
  • 17:26 - 17:27
    and you could wrap it up with a new
  • 17:27 - 17:30
    pair the next day and, and go on from
  • 17:30 - 17:32
    there.
  • 17:32 - 17:34
    What will happen, sometimes, is that pairs
    will request
  • 17:34 - 17:36
    to stick, we call it. We're working on this
  • 17:36 - 17:37
    thing, it's really long. We have a lot of
  • 17:37 - 17:40
    context. We'd like to stick on this. OK, second,
  • 17:40 - 17:42
    you know, that's the next day. Cool. Then
    the,
  • 17:42 - 17:44
    you know, the third day comes around. Like,
    we
  • 17:44 - 17:47
    still. We're almost done. We'd like to stick.
    And
  • 17:47 - 17:53
    the whole team collectively is like, hmm.
    Maybe. OK.
  • 17:53 - 17:57
    Maybe. OK. Go ahead.
  • 17:57 - 18:00
    Fourth day rolls around. We're really almost
    done, I
  • 18:00 - 18:02
    swear. And then at that point, like we, as
  • 18:02 - 18:04
    a group, agree as a team collectively, like,
    we
  • 18:04 - 18:06
    should get somebody else in. Often, at that
    point,
  • 18:06 - 18:09
    the pair will say, one of us is gonna
  • 18:09 - 18:12
    swap out. You know, Bob's gonna stay on. Let's
  • 18:12 - 18:15
    get, who's available? Sally, you're available.
    Jump in. Fresh
  • 18:15 - 18:18
    pair of eyes. They're probably stuck. You
    need a
  • 18:18 - 18:22
    new perspective. And so we will force rotation
    that
  • 18:22 - 18:24
    way, too. And just maybe taking it a step
  • 18:24 - 18:26
    further, something that will often come up
    after this
  • 18:26 - 18:29
    is, yeah, we rotate very often, but it's kind
  • 18:29 - 18:30
    of like the same people, like. We're the same
  • 18:30 - 18:31
    people on the time and kind of the same
  • 18:31 - 18:34
    four people just kind of, like, go around
    and
  • 18:34 - 18:36
    around and around, what you can do to combat
  • 18:36 - 18:39
    that kind of a situation, where there's, there's
    rotation,
  • 18:39 - 18:41
    but it's not balanced amongst the entire team,
    is
  • 18:41 - 18:43
    you can just start tracking it. Just, you
    could
  • 18:43 - 18:45
    do a white board. Like, keeping track of who's
  • 18:45 - 18:47
    paired with who how many times, all the way
  • 18:47 - 18:51
    to, there's even a website called pair tricks,
    I
  • 18:51 - 18:54
    believe. Where you can sign up your company
    and,
  • 18:54 - 18:55
    and you can put all the pairs in and
  • 18:55 - 18:58
    it'll randomly assign people and do weighting
    based on
  • 18:58 - 19:00
    how long, how long it's been since they've
    paired
  • 19:00 - 19:01
    and things like that, but.
  • 19:01 - 19:03
    So you can do something like that, like, every,
  • 19:03 - 19:05
    or just keep track of it on a white
  • 19:05 - 19:07
    board or a Google doc or something like that.
  • 19:07 - 19:08
    K. Good questions.
  • 19:08 - 19:10
    AUDIENCE MEMBER: Kind of a follow-up to that.
  • 19:10 - 19:10
    H.M.: Sure.
  • 19:10 - 19:13
    AUDIENCE MEMBER: How do you combine that with,
    like,
  • 19:13 - 19:16
    sort of junior developers, like, sort of making
    sure
  • 19:16 - 19:18
    that they're not going through so much context-switching
    that
  • 19:18 - 19:20
    they're not really getting anything out of
    it, they're
  • 19:20 - 19:22
    just sort of starting a feature and then,
    like,
  • 19:22 - 19:24
    you know. So like, in our case, we'll start
  • 19:24 - 19:25
    something and it won't, won't be done in one
  • 19:25 - 19:27
    day, and then sort of, they'll switch and
    it's
  • 19:27 - 19:31
    just kind of like, well like, I'm kind of
  • 19:31 - 19:32
    like lost. Like I-
  • 19:32 - 19:33
    J.M.: Right. Right.
  • 19:33 - 19:34
    AUDIENCE MEMBER: I was barely beginning to
    grasp, like-
  • 19:34 - 19:34
    J.M.: Sure.
  • 19:34 - 19:36
    AUDIENCE MEMBER: -that part of the code that
    I
  • 19:36 - 19:36
    was working on.
  • 19:36 - 19:39
    J.M.: So I think just being flexible, you
    know,
  • 19:39 - 19:41
    just because it's nine o'clock the next day
    doesn't
  • 19:41 - 19:43
    mean that, you know, the judge comes in and,
  • 19:43 - 19:45
    you know, breaks everybody up or something
    like that.
  • 19:45 - 19:47
    And I think that if, if the team decides,
  • 19:47 - 19:50
    you know, hey, it seems like this junior developer,
  • 19:50 - 19:52
    they're three-quarters of the way, the, the
    senior and
  • 19:52 - 19:55
    junior developer, they're three-quarters of
    the way through this
  • 19:55 - 19:58
    task. They're trying to complete, yeah. Let
    them. Let
  • 19:58 - 20:01
    them complete the task. And, because they're
    gonna get
  • 20:01 - 20:03
    a lot of benefit out of seeing it from
  • 20:03 - 20:04
    beginning to end.
  • 20:04 - 20:08
    So don't be, I'm personally an advocate of
    just
  • 20:08 - 20:09
    kind of playing it by ear. Just kind of
  • 20:09 - 20:11
    seeing how it works out. Don't be so strict
  • 20:11 - 20:15
    that you're being too disruptive, but don't
    be so,
  • 20:15 - 20:17
    don't let people stick so long that you get
  • 20:17 - 20:20
    these little sort of knowledge cylos and ownership
    and
  • 20:20 - 20:21
    such. Great.
  • 20:21 - 20:22
    AUDIENCE MEMBER: Thank you.
  • 20:22 - 20:23
    J.M.: Sure.
  • 20:23 - 20:27
    AUDIENCE MEMBER: A few questions on, I guess,
    team
  • 20:27 - 20:29
    dynamics with pairing. This one's kind of
    a follow
  • 20:29 - 20:30
    onto this one.
  • 20:30 - 20:30
    J.M.: Sure.
  • 20:30 - 20:31
    AUDIENCE MEMBER: I guess I'll spit them all
    out.
  • 20:31 - 20:32
    J.M.: Go for it.
  • 20:32 - 20:33
    AUDIENCE MEMBER: Monopolize things a little.
  • 20:33 - 20:34
    One is, do you have any thoughts on, if
  • 20:34 - 20:39
    you have a group of, a spectrum of people
  • 20:39 - 20:42
    at different experience levels, are, can you
    talk about
  • 20:42 - 20:45
    sort of the pros and cons of going with,
  • 20:45 - 20:48
    like, senior senior, junior, junior, people
    at like levels,
  • 20:48 - 20:51
    or to go junior senior to get more mentoring.
  • 20:51 - 20:54
    Have you had any barriers with tools, where
    people
  • 20:54 - 20:57
    just would be incompatible, say one guy likes
    Vim
  • 20:57 - 21:01
    and one guy likes Sublime? And then, thirdly,
    do
  • 21:01 - 21:06
    you have any, any wisdom to share on adding
  • 21:06 - 21:09
    a test or QA person to a pair to
  • 21:09 - 21:12
    get that person involved early in what role
    a,
  • 21:12 - 21:16
    a QA engineer would play throughout a, a,
    working
  • 21:16 - 21:17
    on a story with a pair.
  • 21:17 - 21:20
    J.M.: OK. I may have to refer back to
  • 21:20 - 21:21
    you to remind me what all those are. But
  • 21:21 - 21:27
    I believe they were, experience level pairings,
    tool conflicts,
  • 21:27 - 21:29
    and adding, like, a QA or a support person
  • 21:29 - 21:30
    to the team.
  • 21:30 - 21:34
    So let's do, let's do experience level pairings.
    I,
  • 21:34 - 21:37
    I like, personally, I don't, I don't consider
    it
  • 21:37 - 21:41
    being a big deal to mix up almost any
  • 21:41 - 21:48
    kind of experience level pairs. Except the
    junior-junior situation.
  • 21:48 - 21:50
    I wouldn't just randomly, personally, do that.
    So the
  • 21:50 - 21:55
    obviously one is senior and junior. Those
    can be
  • 21:55 - 21:58
    great pairings, right. Just, especially for
    the junior person.
  • 21:58 - 22:00
    And that, maybe, a lot of people talk about
  • 22:00 - 22:02
    pairing and say, oh, you know, we pair when
  • 22:02 - 22:04
    we're wrapping somebody up. And they'll kind
    of use
  • 22:04 - 22:06
    that as the only excuse for pairing. You know,
  • 22:06 - 22:08
    we're wrapping up this junior person.
  • 22:08 - 22:11
    But, that can put a lot of burden on
  • 22:11 - 22:13
    the senior person. If they're always ramping
    somebody up.
  • 22:13 - 22:14
    You know, if they're, if you get a new
  • 22:14 - 22:17
    person every so often, then they're, if they're
    a
  • 22:17 - 22:19
    senior person they might feel like they're
    always wrapping
  • 22:19 - 22:21
    somebody up. I'm gonna encourage everybody
    to have the
  • 22:21 - 22:24
    attitude of, well, one, share, share the load.
    Like,
  • 22:24 - 22:26
    the junior person shouldn't just stick with
    the same
  • 22:26 - 22:29
    person all the time. And also have the attitude,
  • 22:29 - 22:30
    if you're a senior person, or have your senior
  • 22:30 - 22:33
    people have the attitude that, they can always
    learn
  • 22:33 - 22:34
    the junior person.
  • 22:34 - 22:36
    On the last project I was on, you know,
  • 22:36 - 22:42
    I've been doing software development for sixteen
    years. And
  • 22:42 - 22:43
    I was pairing with a guy who was fresh
  • 22:43 - 22:45
    out of college. And he didn't even have a
  • 22:45 - 22:47
    CS degree or anything. He was just, well,
    you
  • 22:47 - 22:48
    know, one of those smart people who just graduated
  • 22:48 - 22:50
    from college, and he was doing something that
    was
  • 22:50 - 22:52
    clearly way below his skill level. We're like,
    you
  • 22:52 - 22:56
    should probably do some programming. Here,
    get over here.
  • 22:56 - 22:58
    And, I learned something new from him every
    single
  • 22:58 - 23:02
    day. You know, and I, the supposed expert,
    and
  • 23:02 - 23:04
    everyday he's like, oh, did you know about
    this?
  • 23:04 - 23:07
    Whoa. No. That's really cool. I would usually
    write
  • 23:07 - 23:09
    it down. I kept trying to keep track of
  • 23:09 - 23:11
    the things I learned each day. And then people
  • 23:11 - 23:15
    at the same experience level, that's, that's
    great as
  • 23:15 - 23:17
    well. You do sometimes have to watch out for
  • 23:17 - 23:21
    people, especially senior, senior people,
    who maybe, let's say
  • 23:21 - 23:26
    they once had the word architect on their
    names.
  • 23:26 - 23:29
    Sometimes people are gonna be extremely opinionated
    and not
  • 23:29 - 23:31
    want to budge from ideas. It's something to
    watch
  • 23:31 - 23:35
    out for. People kind of, we call it thrashing.
  • 23:35 - 23:37
    Junior-junior. Should you ever pair junior
    people together? And
  • 23:37 - 23:41
    I think the answer is sometimes yes. Especially
    if
  • 23:41 - 23:44
    they've both been through multiple, been through
    multiple pair
  • 23:44 - 23:46
    rotations. They're kind of, maybe one of them
    has
  • 23:46 - 23:48
    kind of been on that, let's make up the
  • 23:48 - 23:50
    user, new user profile rewrite or something
    like that.
  • 23:50 - 23:52
    And that junior person has kind of bounced
    between
  • 23:52 - 23:54
    pairs, all kind of in that area. And they're
  • 23:54 - 23:57
    kind of getting pretty good at learning some
    stuff.
  • 23:57 - 23:59
    It might be good to swap in and have
  • 23:59 - 24:02
    a junior person who doesn't have any experience
    in
  • 24:02 - 24:06
    that area pair with this newbie but newbie
    with
  • 24:06 - 24:08
    a lot of context. And then you can really
  • 24:08 - 24:11
    help them exercise what it's like to have
    them
  • 24:11 - 24:13
    own something. You know, own's a bad word.
    But
  • 24:13 - 24:15
    whatever. You know what I mean.
  • 24:15 - 24:17
    Tre- you know, bringing this other person
    up to
  • 24:17 - 24:20
    speed. Transferring that context. And it,
    I've always found
  • 24:20 - 24:24
    it amazing how, when I feel like I don't
  • 24:24 - 24:26
    really know anything and I'm really relying
    on this
  • 24:26 - 24:28
    other person, and suddenly the person I'm
    relying on
  • 24:28 - 24:30
    kind of drops off, and I have to explain
  • 24:30 - 24:33
    it to somebody else, it really forces me,
    personally,
  • 24:33 - 24:35
    to dig deep, understand the problem much better.
    And
  • 24:35 - 24:38
    I almost always surprise myself, both in how
    much
  • 24:38 - 24:41
    I actually do know, and how much I don't
  • 24:41 - 24:42
    know.
  • 24:42 - 24:44
    So, once in awhile, having those junior people
    pair
  • 24:44 - 24:49
    up and, and yes, struggle, like, have problems.
    Have
  • 24:49 - 24:50
    to figure some stuff out, the way we all
  • 24:50 - 24:53
    used to have to do when we were working
  • 24:53 - 24:54
    by ourselves. OK. So that was a lot of
  • 24:54 - 24:57
    that stuff.
  • 24:57 - 25:01
    Tools. Wow. If you could see the email threads
  • 25:01 - 25:05
    go around at our company, these guys know.
    These
  • 25:05 - 25:10
    guys know. Key bindings. Tools. Vim versus
    RubyMine versus,
  • 25:10 - 25:17
    versus Sublime versus TextMate versus frikin'
    Decorak. I mean,
  • 25:17 - 25:20
    give me a break. Come on people.
  • 25:20 - 25:23
    Yeah. That, that's, that's, it's a, it can
    be
  • 25:23 - 25:26
    a huge struggle. And you can go to an
  • 25:26 - 25:29
    extreme, that I don't really know of anybody
    else
  • 25:29 - 25:31
    doing. Maybe some of you do this. I don't
  • 25:31 - 25:34
    know. But we pretty much standardize on a
    particular
  • 25:34 - 25:38
    kind of keybinding, and often an editor. It,
    it
  • 25:38 - 25:40
    evolves. It isn't like, the manager doesn't
    come down
  • 25:40 - 25:44
    and say, today we're a Vim company. The, the
  • 25:44 - 25:48
    team ends up, you know, adopting, and the
    people
  • 25:48 - 25:52
    who are kind of holding onto those other texts,
  • 25:52 - 25:54
    they inevitably kind of like, OK, fine. Fine,
    I'll
  • 25:54 - 25:56
    do it. And I did that, because I used
  • 25:56 - 25:57
    to work out of the San Francisco office. Now
  • 25:57 - 25:59
    I'm working out of the New York office. And
  • 25:59 - 26:01
    they use different tool sets. It just evolved
    that
  • 26:01 - 26:04
    way. And rather than stomp that out, we've
    let,
  • 26:04 - 26:06
    we've let it evolve. And it's been great.
  • 26:06 - 26:08
    My advice on that front would at least be
  • 26:08 - 26:12
    this. One, be open to learning new things.
    Two,
  • 26:12 - 26:14
    if you have your super awesome custom setup
    that's
  • 26:14 - 26:17
    just for you, and your own, your precious,
    Vim
  • 26:17 - 26:21
    bindings, don't stomp the defaults. Because
    maybe that person
  • 26:21 - 26:24
    who doesn't really know Vim very well, they
    might
  • 26:24 - 26:26
    at, or, or RubyMine or whatever your editor
    or
  • 26:26 - 26:28
    tool of choice is, they may not know your
  • 26:28 - 26:30
    thing. But they may know kind of enough of
  • 26:30 - 26:33
    the default settings, that they can kind of
    get
  • 26:33 - 26:35
    around and maybe, maybe they start adopting
    yours. Or
  • 26:35 - 26:37
    maybe they say, yeah, I don't really use that
  • 26:37 - 26:40
    key binding for this, I use it for something
  • 26:40 - 26:43
    else. And, and be open for that. But people
  • 26:43 - 26:49
    can sometimes be too closed minded about,
    you know,
  • 26:49 - 26:53
    they build this little ecosystem just for
    themselves, and,
  • 26:53 - 26:55
    and not want to, to change, and I encourage
  • 26:55 - 26:57
    people be open to change, but leave the defaults.
  • 26:57 - 27:00
    And be open to trying other stuff. But there's
  • 27:00 - 27:03
    no silver bullet unless you mandate, our office
    is
  • 27:03 - 27:08
    an X office and everybody just learn it.
  • 27:08 - 27:12
    OK. Integrating other people into the team.
    Like, QA
  • 27:12 - 27:14
    folks. And if you don't mind, I'll sort of
  • 27:14 - 27:19
    mutate that question into pairing across different
    disciplines, or
  • 27:19 - 27:21
    integrating anybody of any other discipline
    into the pairing
  • 27:21 - 27:24
    structure. I'm a big fan of that. Be it
  • 27:24 - 27:28
    a QA person, design people, design, you know,
    front
  • 27:28 - 27:31
    end design or visual design, designers. Even
    your product
  • 27:31 - 27:35
    owners, product managers, whatever you want
    to call them.
  • 27:35 - 27:37
    I think that that's great. One, it builds
    up
  • 27:37 - 27:39
    a lot of empathy. Just from a person to
  • 27:39 - 27:41
    person point of view. Two, it can be super
  • 27:41 - 27:45
    practical, especially with, say, visual design.
    And, and actually
  • 27:45 - 27:49
    QA as well. Like, that last mile, I've always
  • 27:49 - 27:51
    found, of say a visual design, where, you
    know,
  • 27:51 - 27:53
    you've pretty much got all the assets in.
    Let's
  • 27:53 - 27:54
    say you're building a web page. Got all the
  • 27:54 - 27:58
    assets in and you're, you're tweaking the
    css, and
  • 27:58 - 28:00
    all the stuff that came from visual design,
    it's
  • 28:00 - 28:03
    pretty good right now, but you know that field,
  • 28:03 - 28:05
    or that area of the page that looked great
  • 28:05 - 28:08
    with lorem ipsum, that only had like twenty-five
    characters.
  • 28:08 - 28:10
    If somebody puts in a thousand characters,
    and they
  • 28:10 - 28:14
    can, the whole thing goes blah. Right? Crazy.
  • 28:14 - 28:17
    Getting visual design in to say, hey, like,
    the,
  • 28:17 - 28:20
    the last bit, let's just sit here and work
  • 28:20 - 28:22
    on this. And then you can just, especially
    if
  • 28:22 - 28:23
    you're using, like, web, if you're doing web
    development,
  • 28:23 - 28:25
    and you can literally tweak it right there
    on
  • 28:25 - 28:28
    the screen together. That could be super powerful.
    And
  • 28:28 - 28:31
    I've even been in situations where you'll,
    they were
  • 28:31 - 28:33
    so good that they were working on this thing
  • 28:33 - 28:35
    and were like, moving stuff around. They're
    like, ah,
  • 28:35 - 28:37
    now that we've moved this from here to here,
  • 28:37 - 28:40
    those icons look terrible. Hold on, and they're
    like,
  • 28:40 - 28:42
    somehow spew out an icon out of their fingertips.
  • 28:42 - 28:44
    And they're like, OK, now pull in this icon.
  • 28:44 - 28:47
    And wow, it's just. It's like the most rapid
  • 28:47 - 28:51
    changing finalization wrapping up of, of something
    I've ever
  • 28:51 - 28:53
    worked in, and that was one of the best
  • 28:53 - 28:54
    experiences I've ever had pairing was with
    this person
  • 28:54 - 29:00
    who was not technically a software developer.
  • 29:00 - 29:02
    QA, as well. I think, like, a really good
  • 29:02 - 29:05
    QA person is worth their weight in, in gold.
  • 29:05 - 29:07
    I think if anybody here is kind of tied
  • 29:07 - 29:11
    into the capital A Agile community, or at
    least
  • 29:11 - 29:15
    extreme programming, you know, somehow this
    strange notion came
  • 29:15 - 29:18
    up that, like, you don't need QA. We've got
  • 29:18 - 29:21
    tests for that. And it's like, nah. Those
    are
  • 29:21 - 29:23
    two different things. So, integrating QA people
    can be
  • 29:23 - 29:26
    really good, especially if you're, if they're
    in a
  • 29:26 - 29:29
    mode of, maybe you've got a big release coming
  • 29:29 - 29:32
    up, and they're hammering the site and finding
    all
  • 29:32 - 29:37
    these bugs, and you know, pairing with them
    as
  • 29:37 - 29:40
    you're fixing the bugs, as they're like pressing,
    you
  • 29:40 - 29:43
    know, trying all their different attacks on
    the system.
  • 29:43 - 29:44
    They're saying, OK, well you fixed that one,
    but
  • 29:44 - 29:46
    that makes me think of this other thing. Oh,
  • 29:46 - 29:48
    look. It's broken. OK. Try this. Try this.
    And
  • 29:48 - 29:53
    just, like, just kind of, you know, purpose,
    purposeful
  • 29:53 - 29:56
    pairing when it's needed can be super valuable
    as
  • 29:56 - 29:57
    well.
  • 29:57 - 30:01
    Now I haven't, say, just, you know, like,
    where,
  • 30:01 - 30:03
    hey, we're making an android application and
    today I'm
  • 30:03 - 30:06
    doing some, you know, a big feature, and it
  • 30:06 - 30:09
    just pair with a QA person instead of another
  • 30:09 - 30:12
    software developer, in the middle or at the
    beginning
  • 30:12 - 30:15
    of the development process. I haven't done
    that. But
  • 30:15 - 30:16
    give it a shot.
  • 30:16 - 30:19
    All right. That was three. I hope they were
  • 30:19 - 30:20
    good. Cool.
  • 30:20 - 30:23
    AUDIENCE MEMBER: Quick comment about the cross-tooling,
  • 30:23 - 30:24
    or cross-editor,
  • 30:24 - 30:30
    there's a tool called Floobits - F-L-O-O bits,
    which
  • 30:30 - 30:32
    lets your Vim people work with your Emacs
    people,
  • 30:32 - 30:35
    and the idea is, like, one of them's got
  • 30:35 - 30:36
    their computer and the other one's got their
    computer,
  • 30:36 - 30:38
    and they're each running the same damn thing,
    but
  • 30:38 - 30:41
    it's all synced and good and there's a fall
  • 30:41 - 30:44
    back, which is like a diff shipper for other
  • 30:44 - 30:44
    apps. So it's-
  • 30:44 - 30:45
    J.M.: OK. Cool. Floobits.
  • 30:45 - 30:46
    AUDIENCE MEMBER: Yeah.
  • 30:46 - 30:47
    J.M.: I've heard of it. I haven't, well, I
  • 30:47 - 30:49
    did, I technically did try it when it was
  • 30:49 - 30:51
    early. And it didn't really work very well,
    but
  • 30:51 - 30:52
    I'm gonna try it again, cause people-
  • 30:52 - 30:53
    AUDIENCE MEMBER: Yeah. It's, it's still-
  • 30:53 - 30:55
    AUDIENCE MEMBER: -fairly early, I think. But
    the promise
  • 30:55 - 30:58
    is there and more plugins would probably help
    it.
  • 30:58 - 30:58
    But.
  • 30:58 - 30:59
    J.M.: Excellent.
  • 30:59 - 31:02
    AUDIENCE MEMBER: So, a couple questions. One,
    when you're
  • 31:02 - 31:05
    driving, how much vocalization do you do to
    the
  • 31:05 - 31:07
    other person explaining your thoughts? And
    the other one
  • 31:07 - 31:11
    is, when you've got a senior developer paired
    with
  • 31:11 - 31:15
    a junior developer, there's, you know, I frequently
    find,
  • 31:15 - 31:17
    I'm the senior one on this side. And there's,
  • 31:17 - 31:21
    I know I need to let them work through
  • 31:21 - 31:22
    it, but at the same time I want to
  • 31:22 - 31:23
    rip it out of their hands and type it,
  • 31:23 - 31:24
    you know, it's like, how-
  • 31:24 - 31:24
    J.M.: It's hard.
  • 31:24 - 31:26
    AUDIENCE MEMBER: -what tools do you, techniques
    do you
  • 31:26 - 31:28
    use to combat that and work with that and
  • 31:28 - 31:30
    help them to learn?
  • 31:30 - 31:33
    J.M.: Sure. So, the first question was. Wow,
    this
  • 31:33 - 31:36
    is really terrible. What was the first question
    again?
  • 31:36 - 31:37
    AUDIENCE MEMBER: Vocalization.
  • 31:37 - 31:42
    J.M.: Vocalization. Yes. Ironically. So vocalization
    and then being
  • 31:42 - 31:43
    a keyboard hog, right? I'm that, like, I'll,
    I'll,
  • 31:43 - 31:45
    I'll take on a trip with that one. Cause
  • 31:45 - 31:46
    I'm, I can be that way.
  • 31:46 - 31:50
    Or, at least, letting new people struggle
    through something
  • 31:50 - 31:52
    when you already know the answer, for example.
  • 31:52 - 31:55
    Vocalization. I vocalize a lot. Especially
    because I do
  • 31:55 - 31:58
    remote pair programming. And I lose a lot
    of
  • 31:58 - 32:01
    the, a lot of the visual cues and physical
  • 32:01 - 32:04
    cues that you might pick up sitting side-by-side.
    I
  • 32:04 - 32:07
    lose a lot of those. So, when my whole
  • 32:07 - 32:10
    view into somebody is from, say, the neck
    up,
  • 32:10 - 32:12
    you know, or like the midsection up, it's
    harder
  • 32:12 - 32:15
    for me to say, see anybody's hands. I almost
  • 32:15 - 32:17
    never see anybody's hands. So are they reaching
    for
  • 32:17 - 32:19
    the keyboard right now? Are they reaching
    for the
  • 32:19 - 32:21
    mouse? Are their hands on their laps? You
    know,
  • 32:21 - 32:22
    what are they about - are they about to
  • 32:22 - 32:23
    do something? I don't really know. Well like,
    when
  • 32:23 - 32:26
    you pair side by side, and out of, you
  • 32:26 - 32:27
    know, right now I can still kind of see
  • 32:27 - 32:29
    you over there. And if I see this hand
  • 32:29 - 32:31
    going out then that's a cue for me to
  • 32:31 - 32:33
    be like, oh, it looks like they want to
  • 32:33 - 32:35
    do something. I wasn't in the middle of doing
  • 32:35 - 32:37
    something, so I'll kind of back off.
  • 32:37 - 32:42
    So, maybe a little bit less verbalization,
    consciously verbalizing,
  • 32:42 - 32:46
    anyway. But, when I'm remote, I'm constantly
    saying things
  • 32:46 - 32:47
    like, I'm gonna grab the mouse. Can I look
  • 32:47 - 32:49
    at this? Would you like to drive? Do you
  • 32:49 - 32:51
    mind if I drive? All that kind of stuff.
  • 32:51 - 32:54
    And, you know, to the point where, I've pair
  • 32:54 - 32:57
    programmed with, remote paired with people,
    and they've told
  • 32:57 - 33:00
    me later that they, they found themselves
    doing that
  • 33:00 - 33:04
    much more when they were pairing side by side,
  • 33:04 - 33:07
    and they felt it made them a better programmer,
  • 33:07 - 33:09
    or a better pair anyway, because they found
    themselves
  • 33:09 - 33:12
    being more vocal even when they were in person.
  • 33:12 - 33:14
    Which was, which I thought was great.
  • 33:14 - 33:16
    AUDIENCE MEMBER: What about vocalizing, like,
    OK, now I'm
  • 33:16 - 33:19
    making this case statement because of such
    and such,
  • 33:19 - 33:20
    do you go to that level, or?
  • 33:20 - 33:22
    J.M.: Yeah. We, I will sometimes go to that
  • 33:22 - 33:25
    level if, if I feel like that it's needed.
  • 33:25 - 33:29
    Often, yeah, I'm kind of like, constantly
    talking. And
  • 33:29 - 33:31
    I've recorded myself doing it, so I could
    show,
  • 33:31 - 33:33
    like, for a presentation or something like
    that. I
  • 33:33 - 33:35
    actually kind of hate listening to myself
    do all
  • 33:35 - 33:38
    that. But I, I think it's valuable. And I
  • 33:38 - 33:42
    find that often, my pair will in, sort of
  • 33:42 - 33:43
    call me out when I'm not doing that. You
  • 33:43 - 33:45
    know, I'll be kind of, like, in a zone
  • 33:45 - 33:47
    and kind of going and like the thoughts are
  • 33:47 - 33:49
    coming out and they'll say, like, well, what,
    what,
  • 33:49 - 33:50
    what do you, what are you, what are you
  • 33:50 - 33:53
    doing? And I'll realize, ooh, I haven't, I'll
    realize
  • 33:53 - 33:56
    I haven't been, I haven't been saying anything.
    I
  • 33:56 - 34:00
    haven't been vocalizing it. And so, you know,
    that,
  • 34:00 - 34:02
    I think, is also kind of a tick mark
  • 34:02 - 34:06
    in the be more vocal column.
  • 34:06 - 34:09
    Were those the two questions?
  • 34:09 - 34:10
    AUDIENCE MEMBER: Junior developers.
  • 34:10 - 34:10
    J.M.: Junior developers. My god.
  • 34:10 - 34:10
    AUDIENCE MEMBER: Letting them-
  • 34:10 - 34:11
    J.M.: What's happening to me?
  • 34:11 - 34:14
    AUDIENCE MEMBER: -work through the problem
    when you know
  • 34:14 - 34:14
    it.
  • 34:14 - 34:18
    J.M.: Yes. So, techniques for trying to let
    the
  • 34:18 - 34:22
    junior people drive more when you're more
    senior. It's
  • 34:22 - 34:26
    certainly hard. Some people never get it.
    Some people,
  • 34:26 - 34:27
    it can be especially bad if you have a
  • 34:27 - 34:29
    person who is, let's say, naturally, or professionally
    more
  • 34:29 - 34:32
    passive, and somebody who is naturally or
    professionally more
  • 34:32 - 34:39
    assertive. Tricks for that are just both sides
    trying
  • 34:39 - 34:41
    to be more honest and vocal about things.
  • 34:41 - 34:43
    Like, oh, in saying, like, hey, do you mind
  • 34:43 - 34:45
    if I drive now? Would you like to drive?
  • 34:45 - 34:49
    I have physically sat on my hands. Like, underneath
  • 34:49 - 34:53
    my thighs. And when I feel myself, like, pull
  • 34:53 - 34:54
    my hand out, I'm like, ah, get it back
  • 34:54 - 35:00
    in there. Sit down. And ping pong pairing,
    if
  • 35:00 - 35:02
    people haven't heard of that, is a great sort
  • 35:02 - 35:07
    of structure to, to implement, to kind of
    enforce
  • 35:07 - 35:10
    a rigidity in the bounce back and forth. So,
  • 35:10 - 35:12
    again, this is testing, test-driven development.
    So if you're
  • 35:12 - 35:14
    doing test-driven development, you can have
    one person write
  • 35:14 - 35:17
    a failing test, and the other person implement
    the
  • 35:17 - 35:21
    code to make it pass. And then they, the
  • 35:21 - 35:23
    second person, writes a failing test, and
    the other
  • 35:23 - 35:25
    person writes the code to make it pass. And
  • 35:25 - 35:27
    you can sort of enforce that rigidity while
    you
  • 35:27 - 35:28
    need it.
  • 35:28 - 35:31
    And it was, it can actually be a not-so-subtle
  • 35:31 - 35:34
    cue, that somebody is being a keyboard hog.
    And
  • 35:34 - 35:37
    I encourage people to do this if they maybe
  • 35:37 - 35:40
    don't want to be confrontational about, like,
    gimme the
  • 35:40 - 35:42
    damn keyboard. But if somebody's kind of going,
    or
  • 35:42 - 35:44
    let's say, if you're going along, and your
    coding
  • 35:44 - 35:46
    and everything is great, and then your pair
    says,
  • 35:46 - 35:49
    hey, how about if we do some ping pong?
  • 35:49 - 35:54
    Like, oh. Hmm. Maybe I'm driving too much.
    Or
  • 35:54 - 35:56
    you can, you can say, like, oh, let's ping
  • 35:56 - 35:58
    pong this one. What do you say? Like, that
  • 35:58 - 36:01
    can be a, maybe a less assertive way of
  • 36:01 - 36:03
    saying let's balance it out.
  • 36:03 - 36:05
    Trace, you have something to say?
  • 36:05 - 36:07
    AUDIENCE MEMBER: Oh, just, I'm really glad
    you mentioned.
  • 36:07 - 36:10
    Thanks. I'm really glad you mentioned ping
    pong as
  • 36:10 - 36:13
    a, a technique to help manage that. When I
  • 36:13 - 36:14
    first started pairing, it was definitely something
    that was
  • 36:14 - 36:16
    very hard for me to do, and I had
  • 36:16 - 36:17
    to do the same thing. I sat on my
  • 36:17 - 36:20
    hands for three weeks. I, I saw people like,
  • 36:20 - 36:22
    you know, when I sat side by side with
  • 36:22 - 36:23
    someone, I'll see their hands come near the
    keyboard,
  • 36:23 - 36:24
    and my will always leave. Or if their hands
  • 36:24 - 36:27
    leave the keyboard, I'm, OK. It's my time
    to
  • 36:27 - 36:29
    speak. And I'll raise them up.
  • 36:29 - 36:32
    So I've heard of some of the other paradigms,
  • 36:32 - 36:34
    like driver-navigator, for example. What are
    some of the
  • 36:34 - 36:38
    other pairing patterns in addition to ping
    pong and
  • 36:38 - 36:40
    when might they be good to use, and what
  • 36:40 - 36:41
    are their names?
  • 36:41 - 36:44
    J.M.: Oh, let's see. Yeah, driver-navigator
    is sort of
  • 36:44 - 36:48
    the, the canonical pairing structure people
    think about, where
  • 36:48 - 36:50
    one person is literally driving and one person
    is
  • 36:50 - 36:54
    literally saying, oh, OK, well you missed
    this and,
  • 36:54 - 36:57
    hey, maybe, you know, let's use an if and
  • 36:57 - 36:59
    not an unless there, and that kind of a
  • 36:59 - 37:00
    thing. And they're kind of also kind of looking
  • 37:00 - 37:01
    over the rest of the code and say, like,
  • 37:01 - 37:03
    hey, how about we extract, you know, finish
    that
  • 37:03 - 37:05
    up, but let's extract that as a method next.
  • 37:05 - 37:06
    And kind of a thing.
  • 37:06 - 37:08
    As far as, those, that's the one I'm most
  • 37:08 - 37:11
    familiar with. The, and, and that can be great.
  • 37:11 - 37:13
    I think that's kind of the natural mode of
  • 37:13 - 37:16
    most pairings. Is like, one person is like
    actively
  • 37:16 - 37:19
    engaged and, and driving, the other one, or,
    actively
  • 37:19 - 37:21
    engaged in typing, the other person is, is
    doing
  • 37:21 - 37:24
    more navigating. I think that the challenge
    can be
  • 37:24 - 37:28
    figuring out when, when to switch. Testing
    really helps
  • 37:28 - 37:30
    for that. And if you don't do testing, let's
  • 37:30 - 37:33
    say you don't, then maybe you can use some
  • 37:33 - 37:35
    other kind of bounds. Like, you know, you
    just
  • 37:35 - 37:37
    wrote this method. OK, now the next guy writes
  • 37:37 - 37:40
    the next method. Or, you know, you're doing
    a
  • 37:40 - 37:44
    bunch of refactoring and extracting classes
    and, and methods
  • 37:44 - 37:45
    or something like that, then, you know, you
    bounce
  • 37:45 - 37:49
    back and forth between the thing you're extracting,
    for
  • 37:49 - 37:50
    example.
  • 37:50 - 37:54
    OK. We gotta couple minutes. One minute actually.
  • 37:54 - 37:57
    AUDIENCE MEMBER: The most useful thing that
    I ever
  • 37:57 - 38:00
    did for stopping myself from over driving
    was getting
  • 38:00 - 38:03
    a chess clock. So that we could actually see
  • 38:03 - 38:05
    how much time I spent driving. And so when
  • 38:05 - 38:08
    I'm looking at the clock and I'm forty-five
    minutes
  • 38:08 - 38:10
    ahead, it, it's very helpful.
  • 38:10 - 38:12
    J.M.: That is excellent.
  • 38:12 - 38:15
    AUDIENCE MEMBER: And another technique is
    to just turn
  • 38:15 - 38:17
    your keyboard over if you have two keyboards.
    Just
  • 38:17 - 38:19
    make it so you can't type.
  • 38:19 - 38:21
    J.M.: That's a really good one, too.
  • 38:21 - 38:22
    OK. Forty seconds, go.
  • 38:22 - 38:25
    AUDIENCE MEMBER: Based on your experience,
    can you share
  • 38:25 - 38:27
    what you consider to be good habits and effective
  • 38:27 - 38:30
    habits in pair programming? And then can you,
    are
  • 38:30 - 38:33
    there, are there pitfalls that people tend
    to fall
  • 38:33 - 38:37
    into that, are there commonalities that you
    see in,
  • 38:37 - 38:37
    in?
  • 38:37 - 38:40
    J.M.: Sure. In twenty-five seconds I will,
    I'll put
  • 38:40 - 38:42
    it this way. I think it's, the main thing
  • 38:42 - 38:45
    is to remember that we're all human, and that
  • 38:45 - 38:48
    it's not really about technology or, really,
    about programming,
  • 38:48 - 38:51
    per se. It's about being patient and having
    a
  • 38:51 - 38:54
    good attitude and building trust. So as long
    as
  • 38:54 - 38:56
    we all have a good attitude with each other,
  • 38:56 - 38:59
    trust each other, are patient with each other
    as
  • 38:59 - 39:02
    we're all learning, I think that's really
    the key
  • 39:02 - 39:04
    to pair programming. You can apply that to
    almost
  • 39:04 - 39:08
    any situation, but especially this very strange
    and extreme
  • 39:08 - 39:11
    version of software development. I hope that
    helps.
  • 39:11 - 39:16
    That's it. We're out of time. Like I said,
  • 39:16 - 39:17
    thank you.
Title:
RailsConf 2014 - I've Pair Programmed for 27,000 Hours. Ask Me Anythings! by Joe moore
Description:

more » « less
Duration:
39:40

English subtitles

Revisions