To Pair or Not to Pair: Pair Programming

Thoughtworks
2 Aug 201817:43

Summary

TLDRThe speaker from ThoughtWorks in Berlin discusses pair programming, an agile practice where two developers collaborate at one computer. Despite its benefits like knowledge sharing, reduced errors, and increased code quality, pair programming faces challenges due to its intensity and personal nature. The talk aims to inspire both skeptics and advocates, offering insights on overcoming obstacles and leveraging pair programming for better team performance and collaboration.

Takeaways

  • 🌟 Pair programming is an agile development practice where two developers work together at one computer to create code, which can increase productivity and code quality.
  • 📚 The concept dates back to the 1940s with the first programmers, Jean Bartik and Betty Snyder, who believed in the effectiveness of pair work for programming.
  • 🔧 Pair programming is considered a core practice at ThoughtWorks, a global software consultancy, for its contribution to successful software development.
  • 💡 Despite its benefits, pair programming has patchy adoption across the industry, partly due to misconceptions about reduced productivity and the difficulty of implementation.
  • 🤝 The practice enhances knowledge sharing, allows for different thinking modes, and encourages reflection on the code and its value, potentially reducing the amount of future maintenance required.
  • 🧘‍♂️ Pairing helps developers maintain focus, avoid 'rabbit holes' in problem-solving, and integrate code more frequently, leading to better team flow and quality delivery.
  • 🔄 True continuous integration is facilitated by pair programming, with on-the-go code reviews and collective code ownership, which are essential for trunk-based development.
  • 🚫 Pair programming can be challenging due to its intensity and the need for effective collaboration, including giving and receiving feedback, and managing personal work styles.
  • 🔄 The practice requires vulnerability and openness to criticism, which can be difficult but is essential for personal and team growth in a safe and positive team environment.
  • 🛠️ Pair programming can be made more effective by improving various skills such as concentration, task organization, time management, communication, and empathy.
  • 🌈 Embracing diversity and the friction it can initially cause is crucial for high-performing teams, and pair programming can help in developing the necessary tools to handle this friction.
  • 🎉 The talk concludes with the idea that pair programming is not just a development technique but a skill that contributes to better collaboration and team performance, despite the initial challenges.

Q & A

  • What is pair programming and why is it significant in software development?

    -Pair programming is an agile development practice where two developers work together on the same task, sitting in front of a single computer. It is significant because it encourages knowledge sharing, reduces errors, and enhances code quality, leading to more effective and maintainable software development.

  • Why was pair programming not widely adopted initially, according to the speaker?

    -The speaker suggests that pair programming was not widely adopted initially because it is a long-term game with medium to long-term benefits such as consistent quality and maintainability, which are hard to measure. Additionally, it requires a shift in mindset from short-term gratification to long-term productivity and effectiveness.

  • What are some of the core values and practices that ThoughtWorks considers crucial for successful software delivery?

    -ThoughtWorks considers several core values and practices crucial for successful software delivery, including pair programming, which they see as a core practice that enhances the effectiveness of software development.

  • What are some of the benefits of pair programming mentioned in the script?

    -Some benefits of pair programming mentioned include knowledge sharing, combining two modes of thinking, increased focus, practicing true continuous integration, and reducing the number of lines of code that need to be maintained in the future.

  • How does pair programming contribute to the concept of 'one plus one is greater than two'?

    -Pair programming contributes to the concept of 'one plus one is greater than two' by allowing for the sharing of knowledge, the combination of different modes of thinking, and the reflection on the code and its value. This collaborative approach can lead to better outcomes than what one person could achieve alone.

  • What are some challenges that the speaker identifies with pair programming?

    -The speaker identifies challenges such as the intensity of collaboration, the potential for exhaustion, the need for effective communication and feedback, and the personal nature of sharing a workspace and ideas.

  • Why is it important to avoid pairing for eight hours a day according to the script?

    -It is important to avoid pairing for eight hours a day because it can be energy draining and overwhelming. It's recommended to find a balance, take breaks, and incorporate other tasks and activities that are part of the development process.

  • How can pair programming help with the practice of continuous integration?

    -Pair programming helps with continuous integration by providing on-the-go code reviews and fostering collective code ownership. This leads to more frequent integration and reduces the risk of merge conflicts and technical debt.

  • What is the role of vulnerability in pair programming, as discussed in the script?

    -Vulnerability plays a significant role in pair programming as it involves sharing what one knows and does not know, exposing one's strengths and weaknesses. This openness to criticism and learning from each other is crucial for the success of pair programming.

  • How does the speaker suggest dealing with the friction and conflict that can arise from pair programming?

    -The speaker suggests dealing with friction and conflict by practicing feedback, improving communication, fostering a sense of psychological safety, and promoting humility and empathy within the team.

  • What is the significance of the ENIAC women in the context of pair programming?

    -The ENIAC women, Jean Bartik and Betty Snyder, are significant because they were among the first programmers and naturally adopted pair programming as their method of work. Their experience highlights the historical roots and effectiveness of pair programming in software development.

Outlines

00:00

👥 Introduction to Pair Programming

The speaker introduces the concept of pair programming, a collaborative software development practice where two programmers work together at one workstation. The speaker, based in Berlin and working for ThoughtWorks, aims to inspire those unfamiliar or skeptical about pair programming and to provide insights for those who are already practicing it. The speaker traces the roots of pair programming back to the first programmers in the 1940s, highlighting the ENIAC women and their approach to problem-solving. Despite being a well-known agile development practice, pair programming still faces challenges in adoption across the industry.

05:01

🤝 Benefits and Challenges of Pair Programming

This paragraph delves into the benefits of pair programming, such as knowledge sharing, combining different thinking modes, and fostering reflection on code and project value. It also addresses the challenges, including the misconception that pair programming halves developer productivity. The speaker emphasizes that pair programming is about increasing effectiveness and maintainability in the medium to long term, rather than just the quantity of code produced. The speaker also discusses the difficulty of implementing pair programming due to its intensive collaborative nature and the need for a supportive team environment.

10:03

🔄 Overcoming Pair Programming Hurdles

The speaker discusses strategies to overcome the difficulties associated with pair programming, such as avoiding exhaustion by not pairing for the entire workday and ensuring regular breaks. Time management techniques like Pomodoro can be beneficial. The speaker also emphasizes the importance of feedback, understanding each other's work preferences, and being aware of personal differences that can affect the pairing experience. The paragraph also touches on the personal nature of pair programming, which can expose vulnerabilities and require a high level of trust and safety within the team.

15:04

🌟 Embracing Friction for High Performance

In the final paragraph, the speaker argues that the friction and discomfort experienced during the initial stages of implementing pair programming can ultimately lead to higher team performance. The speaker references the fluency heuristic, which suggests that we prefer things that are easy to process, but this bias can hinder the adoption of beneficial practices like pair programming. The speaker concludes by encouraging the audience to view pair programming as a skill that can be developed and to embrace the challenges as part of becoming a high-performing, diverse team.

Mindmap

Keywords

💡Pair Programming

Pair programming is an agile development practice where two programmers work together at one workstation. One, the driver, writes code while the other, the observer or navigator, reviews each line of code as it's written in real-time. The concept is central to the video's theme, emphasizing collaboration, knowledge sharing, and increased productivity. The script mentions pair programming as a core practice at ThoughtWorks and discusses its benefits and challenges.

💡Agile Development

Agile development is a project management and product development approach that emphasizes flexibility, collaboration, and customer feedback. It is the overarching methodology within which pair programming operates, as highlighted by the speaker's mention of pair programming as an 'agile development practice.' The video discusses how pair programming fits into the agile framework and its impact on software development.

💡Knowledge Sharing

Knowledge sharing refers to the process of exchanging information, skills, and insights among team members. In the context of pair programming, it is a key benefit, allowing for the combination of different perspectives and expertise to enhance the quality of the code. The script illustrates this with the idea that pair programming can lead to better programs and designs through mutual criticism and idea sharing.

💡ENIAC Women

The ENIAC Women were the first programmers of the ENIAC computer, which is considered one of the first general-purpose electronic computers. They are mentioned in the script as pioneers of pair programming, with Jean Bartik and Betty Snyder working together as a pair, emphasizing the historical roots of collaborative programming practices.

💡Continuous Integration

Continuous integration is a software development practice where developers frequently merge their code changes into a central repository, leading to more reliable and stable software builds. The script discusses how pair programming facilitates true continuous integration by providing on-the-go code review and collective code ownership, which are essential for maintaining code quality.

💡Productivity

Productivity in the context of pair programming is not just about the number of lines of code written but also the effectiveness and efficiency of the work. The speaker challenges the misconception that pair programming halves developer productivity, arguing instead that it enhances productivity and effectiveness through shared knowledge and immediate feedback.

💡Code Review

Code review is the process of examining code to detect errors, vulnerabilities, or suboptimal code segments. In pair programming, code review happens on the go, as one developer writes the code and the other reviews it in real-time. The script contrasts this with post-hoc code reviews, highlighting the benefits of immediate feedback and reduced integration issues.

💡Feedback

Feedback in pair programming is a crucial aspect of the practice, where developers provide immediate and constructive criticism to each other. The script discusses the importance of giving and receiving feedback as a way to improve collaboration and the quality of the code, as well as a skill that can be developed and applied in other areas of teamwork.

💡Vulnerability

Vulnerability in pair programming refers to the openness to share one's knowledge and lack thereof with a partner. The script touches on the emotional aspect of pair programming, where developers must be willing to expose their weaknesses and learn from each other, which can be challenging but ultimately leads to stronger team dynamics.

💡Diversity

Diversity in the context of the video refers to the variety of backgrounds, perspectives, and experiences within a team. The script suggests that while diversity can initially increase friction, it ultimately leads to better team performance. It also notes that diversity can pose additional challenges in pair programming, particularly for those from under-represented groups.

💡Psychological Safety

Psychological safety is the feeling of being able to take risks without fear of negative consequences within a team. The script mentions the importance of creating a positive and safe team environment for pair programming to thrive, where developers feel comfortable being vulnerable and providing constructive feedback.

Highlights

Pair programming is an agile development practice involving two developers working together at one computer.

Despite being well-known, pair programming has patchy adoption across the industry.

Jean Bartik, one of the first programmers, advocated for pair programming in the 1940s for better programs and designs.

Pair programming became more widely recognized in the late 90s through Kent Beck's Extreme Programming practices.

ThoughtWorks considers pair programming a core practice for successful software development.

Pair programming faces resistance due to misconceptions about reduced developer productivity.

The effectiveness of pair programming extends beyond the number of lines of code written.

Pair programming facilitates knowledge sharing and code ownership across the team.

It enables combining different modes of thinking, with one person focusing on details and the other on the bigger picture.

Pairing encourages reflection on code and its value, potentially reducing unnecessary lines of code.

Pair programming helps developers maintain focus and avoid 'rabbit holes' in problem-solving.

Implementing pair programming can improve team flow and the ability to deliver high-quality work.

True continuous integration is practiced through pair programming, with on-the-go code reviews and collective code ownership.

Pair programming can be challenging due to its intensity and the need for effective collaboration.

It requires vulnerability and openness to criticism, which can be difficult for some developers.

Pair programming is most successful in a positive and safe team environment that values everyone's contributions.

Diversity, like pair programming, can initially increase friction but ultimately improves team performance.

Pair programming is not just about coding together but also about improving collaboration and communication skills.

Despite initial challenges, pair programming is often found to be fun and rewarding by developers.

Transcripts

play00:07

I'm actually based out of Berlin.

play00:09

I work for ThoughtWorks in Berlin.

play00:10

And I want to talk to you today about pair programming,

play00:13

so the practice of two people creating code together sitting

play00:16

in front of a computer.

play00:17

And it's an agile development practice

play00:19

that I think is generally quite well-known,

play00:21

but actually still has patchy adoption across the industry,

play00:24

I would say.

play00:26

And for those of you who are not convinced

play00:28

that it's really useful, or maybe only use it irregularly,

play00:31

I hope to give you some new inspiration

play00:33

to maybe try it or try it again.

play00:35

And those of you who are regular pairers or maybe even

play00:38

passionate advocates, maybe I can give you some new ideas

play00:41

and help you convince other people to try it.

play00:45

And I'll actually start at the very beginning, in the 1940s,

play00:47

with the first programmers.

play00:49

So on this picture, you can see Jean Bartik and Betty Snyder

play00:54

in front of the ENIAC computer, which

play00:56

is by many considered to be one of the very

play00:59

first electronic computers.

play01:01

And the ENIAC women are the first programmers.

play01:04

So they had to figure out what to do

play01:06

and how to do it effectively before the word

play01:08

"programming" even existed.

play01:11

And this is a quote from a 2011 interview with Jean Bartik.

play01:15

And she says here that, "Betty Snyder and I,

play01:17

from the beginning, were a pair.

play01:19

And I believe that the best programs and designs

play01:21

are done by pairs because you can criticize each other,

play01:25

find each other's errors, and use the best ideas."

play01:28

And when I saw this interview, first, it

play01:30

blew my mind a little bit.

play01:32

Because here were these very first programmers

play01:34

who didn't have any role models to tell them how to do this.

play01:37

And they came to the conclusion that it would be useful if they

play01:40

worked on this as a pair.

play01:43

So fast forward 50 years later, so it

play01:47

took us 50 years for pair programming

play01:49

to become a more widely-spread term.

play01:52

When Kent Beck described it in the late 90s

play01:55

as one of the practices under the label Extreme Programming.

play01:59

And at ThoughtWorks, we're a consultancy.

play02:01

So each situation we get into, we

play02:04

tune the practices, approaches, technologies

play02:07

that we need to use.

play02:08

However, there are a few core values and practices

play02:11

that we see as crucial to successful and sustainable

play02:14

software delivery.

play02:15

And our colleague Evan Bottcher wrote

play02:19

about this set of core values and practices

play02:20

last year on our company blog, ThoughtWorks Insights.

play02:23

And pair programming is one of those core practices

play02:27

that we as a group generally agree on

play02:29

that it's really at the core of successful software

play02:31

development.

play02:32

But there's still lots of discussion on the details,

play02:35

as you can see from some of the subject

play02:38

lines I pulled out from our most vibrant internal mailing list.

play02:41

And a vast majority of the clients that we work with

play02:45

have often not had pair programming

play02:47

as a common practice when we get there.

play02:50

And also, on average, they often resist to it much more than

play02:54

to some of the other practices like test-driven development.

play02:57

As you can see, some of us are struggling

play03:00

with this from these other subjects

play03:02

here, like client wants to stop pair programming.

play03:04

What should we do?

play03:06

Also, most of the applicants for a developer

play03:08

job with ThoughtWorks in Germany, at least, I see,

play03:11

have not had much prior experience

play03:12

with pair programming.

play03:14

Same for me when I started five years ago.

play03:16

I hadn't actually done it that much.

play03:18

So why is it not more widely adopted?

play03:23

I think there are two main reasons.

play03:26

The first one is that it's a long game.

play03:29

So you can see short-term benefits,

play03:31

like less errors, less rework.

play03:33

But ultimately, for me, it's about

play03:34

medium to long-term consistent quality and maintainability.

play03:39

And as developers, we like the short-term gratification

play03:42

of seeing something work today, immediately, right?

play03:45

And that's actually something, maybe one of the things

play03:47

we share with project managers.

play03:50

And for them, pair programming also feels counter-intuitive.

play03:53

Doesn't it halve the productivity of developers?

play03:56

And Martin actually said in 2006-- actually 12 years ago,

play03:59

in this blog post--

play04:00

that his flippant answer to that one is,

play04:03

"That would be true if the hardest part of programming

play04:05

was typing."

play04:06

So it's actually not about the number of lines of code, right?

play04:09

It's about productivity and effectiveness,

play04:11

and those two things are very hard to measure.

play04:14

The second reason why I think it's not

play04:16

as widely adopted as maybe it should be

play04:18

is simply that it's hard.

play04:20

One does not simply pair programming.

play04:22

You don't just sit two people together

play04:25

in front of a computer, and it just clicks, and it just works.

play04:30

So what I want to do is I want to talk a little bit about some

play04:35

of the reasons how pair programming increases

play04:37

effectiveness, the effectiveness you can't measure.

play04:41

Then also talk a bit about what's hard about it,

play04:44

and some ways to tackle that.

play04:45

And then finally, after talking about those challenges,

play04:48

a little bit about, is it really worth the hassle?

play04:53

So I'll start with effectiveness.

play04:55

And the first category there is really about

play04:58

that one plus one in pair programming

play05:00

is greater than two.

play05:02

So the probably most commonly mentioned and well-understood

play05:05

benefit of programming is knowledge sharing,

play05:07

or complementing your knowledge to come to a better outcome.

play05:11

Just the practice of pair programming

play05:13

does not guarantee that, though.

play05:15

People need to move around, break up knowledge silos.

play05:18

Maybe not everybody needs to see everything.

play05:21

But still, pair programming makes it easier

play05:23

to share the ownership of the code across the team,

play05:27

and it also makes it less scary to move around.

play05:30

The second thing is that it enables you to combine

play05:33

two modes of thinking.

play05:35

So the typer can actually be in a more technical mindset,

play05:37

really focus on the lines of code

play05:39

at hand, maybe the local optimization

play05:41

of what's going on, whereas the person sitting next

play05:44

to the typer can take a step back

play05:46

and look at the big picture, maybe already think

play05:48

about the next problem you're going to run into,

play05:50

write that down, and really take advantage of that.

play05:55

It's actually a common thing sometimes

play05:57

that that other person also is in technical mode,

play06:00

and then you might not get as much out of pair programming

play06:02

as you could.

play06:05

And thirdly, it really helps you reflect, not just on the code,

play06:08

but also on the story, what value it brings

play06:11

or what value it might not bring.

play06:13

And this really goes into what I mentioned before

play06:17

about effectiveness versus number of lines of code,

play06:19

because that reflection with each other

play06:21

might actually maximize the number of lines of code

play06:24

that you're not writing and that you will not

play06:26

have to maintain in the future.

play06:30

So secondly, it really helps you focus.

play06:34

For example, pairing has also when

play06:38

I'm working solo, given me a lot more discipline

play06:42

around the structure, how I approach, how I plan my tasks.

play06:45

And when I pair with someone, I'm

play06:47

also forced to explain and justify

play06:49

why I want to take a certain direction

play06:51

and discuss it with the other person.

play06:53

So it helps me avoid the famous rabbit holes.

play06:57

Or as one of our colleagues said it recently on Twitter,

play07:01

"I get more programming productivity

play07:03

out of reducing the time that I'm

play07:04

stuck than from increasing my speed when I'm not stuck."

play07:09

So it helps with focus for the pairers,

play07:10

but also focus for the team.

play07:13

So introducing a work in progress limit for a team

play07:16

can have a huge impact on the team's flow and ability

play07:20

to deliver a good quality.

play07:22

So let's say you introduce a work in progress limit of three

play07:24

or four stories, and you have like a two-pizza team,

play07:27

then pairing is almost a natural consequence.

play07:29

And it helps you really reduce the number

play07:31

of balls your team needs to have in the air at the same time.

play07:38

And lastly, pairing helps you practice

play07:42

true continuous integration.

play07:44

So what do I mean by true continuous integration?

play07:46

So you get code review on the go, you get

play07:50

more collective code ownership.

play07:52

And both of those things help you

play07:54

practice trunk-based development,

play07:57

so really frequent integration.

play07:58

So the code review after the fact

play08:04

has a few disadvantages over code review on the go, I think.

play08:09

So one of them is that sometimes as a reviewer,

play08:14

you're kind of in the [INAUDIBLE] cost fallacy mode.

play08:17

So you think, yeah, this is maybe not the greatest,

play08:20

but it already works, so it's maybe too much hassle

play08:23

to build it again.

play08:24

So this immediacy of the code review on the go

play08:27

really helps catch more things.

play08:29

And also, a code review process can quickly

play08:32

become a bottleneck to that frequent integration

play08:35

that you have.

play08:37

And the collective code ownership I mentioned before,

play08:39

so the moving around, can actually

play08:40

increase the developers' trust for each other,

play08:42

so you feel better pushing things into trunk more often.

play08:48

And the State of DevOps Report on the Accelerate book

play08:51

were also mentioned before.

play08:52

So the State of DevOps Report actually

play08:55

found a correlation between high-performing teams

play08:57

and short integration cycles.

play09:02

So at this point, I've given a few of the benefits,

play09:09

and maybe convinced some of you that pairing can

play09:11

lead to more effective teams.

play09:12

But unfortunately, it doesn't always.

play09:14

So it can also be more harmful than helpful,

play09:18

because as I mentioned before, it's not that easy.

play09:22

So one thing that people often say about it

play09:23

is that it's exhausting, so it's energy draining.

play09:27

And something that maybe sounds like obvious advice

play09:30

but that we see often with teams that really

play09:33

want to embrace pair programming, they actually

play09:35

pair eight hours a day.

play09:37

And don't do that.

play09:38

It's just too much.

play09:39

And also when you work solo, you don't code all day, right?

play09:41

You have other things to do.

play09:43

And there's more things to do to complete

play09:45

a story than just code.

play09:47

So really take that into account.

play09:48

Plan your day together and try to find a good balance there.

play09:54

Also, taking breaks also seems obvious,

play09:57

but is often forgotten.

play09:58

Or maybe you don't want to bring it up

play10:00

if your pairing partner seems more energized,

play10:02

and you don't want to admit that you need a break.

play10:06

And one way that can help here is time management techniques

play10:09

like Pomodoro, where you have slots

play10:14

of 25 minute times with an alarm clock and breaks in between.

play10:20

Yeah, just think about switching roles and modes,

play10:22

how you do this.

play10:23

So it doesn't have to be 100% pair coding.

play10:27

You don't have to be joined at the hip all day.

play10:30

It's actually about pair development as well.

play10:33

And then some of those energy problems

play10:35

can actually be solved, and it's not that hard.

play10:38

But I think at the core of why it's

play10:40

challenging is really that it's a really

play10:42

intense mode of collaboration.

play10:44

So it's really important that you give each other feedback.

play10:49

And pairing is also a great way to practice this,

play10:52

because you can do it in small chunks every day

play10:54

after you've paired with somebody,

play10:56

and you have a very clear goal of the feedback, which is

play10:59

to improve your collaboration.

play11:03

Also, when you first pair with someone,

play11:05

take some time to talk about how each of you like to work.

play11:08

So on my team, we've recently played around

play11:11

with the idea of writing READMEs for ourselves

play11:13

and then sharing them with each other.

play11:15

So try out a few things that maybe you haven't tried before.

play11:19

Tell each other your pet peeves, like I

play11:21

don't like it when somebody's eating next to me,

play11:24

stuff like that.

play11:26

So the awareness of these differences

play11:27

and how that relates to pairing is really important.

play11:30

For example, if you are pairing up a really experienced person

play11:33

with an absolute novice, that can sometimes just not

play11:36

go very well, and that's OK.

play11:38

Maybe you don't pair those people up

play11:40

if it's not working out.

play11:44

And finally, pairing is hard because it's very personal.

play11:47

So you're sharing a close physical space.

play11:50

You're sharing your computers, maybe your messy desktop.

play11:53

You're exposing which IDE shortcuts you don't know.

play11:57

And how big of a deal this actually is dawned on me

play12:01

first when I read a blog post by Tom Howlett titled

play12:03

The Shame of Pair Programming.

play12:06

And in there, he says, "To pair requires vulnerability.

play12:09

It means sharing all that you know

play12:11

and all that you don't know, and this is hard for us."

play12:14

And he goes on to say, "Programmers

play12:16

are supposed to be smart.

play12:18

Most people look at what we do and say, I could never do that.

play12:21

And it makes us feel a bit special,

play12:23

gives us a sense of pride, and pride creates invulnerability."

play12:27

And I think this also goes back to what Jean Bartik found

play12:30

so great about pairing.

play12:31

She said, "You can criticize each other

play12:32

and find each other's errors."

play12:34

But if you're not open to that, exposing what you don't know,

play12:37

then that actually creates more problems than it's beneficial.

play12:42

So this works best in a very positive and safe team

play12:47

environment where everybody really

play12:49

believes in the prime directive that everybody

play12:51

is doing the best job that they can

play12:53

with the information at hand, and in the context.

play12:56

So after I talk about these tough challenges

play13:00

to get those benefits, I want to finish on talking about,

play13:05

is it really worth the hassle then?

play13:08

So you will be more successful at pair programming

play13:11

if you work on all the skills helpful to overcome

play13:14

those challenges.

play13:15

Concentration, for example, is actually

play13:16

something you can practice.

play13:18

Task organization, time management, communication,

play13:21

giving and receiving feedback, empathy, vulnerability.

play13:26

And the list might seem daunting for just this one

play13:29

extra practice you do.

play13:30

But actually, those are all things that you need on a team

play13:33

anyway.

play13:34

So if you want a good gelled team, you need those anyway.

play13:38

And pair programming gives you a chance to work on them,

play13:40

even if that might feel uncomfortable at first.

play13:44

So I went to the Lead Developer Conference

play13:46

in London a few weeks ago, and I saw Pia Nilsson from Spotify

play13:50

speak there.

play13:51

And she talked about how when they introduced all these

play13:54

practices to improve flow, so a work in progress limit,

play13:58

test-driven development, pair programming, mob programming--

play14:02

so that was great in theory, but it actually

play14:05

reduced the fun on the team and increased the friction--

play14:07

so anxiety, and conflict, and stuff like that.

play14:11

And I think another factor you could add here

play14:14

to this graph of increasing friction is diversity.

play14:17

So it's also something that's generally

play14:20

talked about as something that improves team performance.

play14:23

But often, at first, it increases

play14:25

friction between people.

play14:28

And diversity on a team can also actually increase

play14:30

the challenges with pair programming,

play14:32

I talked about before.

play14:34

And things like being vulnerable are often harder or even more

play14:39

risky for people on the team from under-represented groups,

play14:43

because you're more exposed.

play14:47

So I read this article on Harvard Business Review.

play14:50

Diverse Teams Feel Less Comfortable-- and That's

play14:52

Why They Perform Better.

play14:54

And they're saying in there that homogeneous teams

play14:56

feel easier, but easy is bad for performance.

play15:00

And that seems a bit weird, right?

play15:01

So the authors are also saying, this idea

play15:04

goes against many people's intuition.

play15:06

And often, if there's something counter-intuitive,

play15:08

there's a cognitive bias hidden away somewhere, right?

play15:11

And the one that they're mentioning here

play15:13

is the fluency heuristic, which says that we prefer information

play15:18

that is more easily processed.

play15:19

And if it's easily processed, we think

play15:21

that it's more true, more right, more beautiful.

play15:24

And that serves us very well in a lot of situations

play15:28

in software development.

play15:29

I think we want readable code, easily processable things.

play15:32

But I don't think it serves us well

play15:34

if we think that's why we're not doing pair programming.

play15:36

So pairing feels hard, but that doesn't mean it's

play15:39

not good for performance.

play15:41

And also, it doesn't have to stay hard.

play15:43

And I've talked so much about how it's really hard.

play15:45

I just want to mention once that this is actually

play15:48

a benefit that a lot of my colleagues

play15:51

mention almost immediately in their top three about pairing,

play15:54

that it's actually fun.

play15:54

So for those of you who have had bad experiences,

play15:57

it can actually be fun.

play15:58

Promise.

play15:59

And if you aren't there yet, then there

play16:01

are ways to make it easier.

play16:03

So Pia went on to talk about what

play16:05

they did to reduce that friction, that conflict,

play16:07

the anxiety, as she talked about feedback,

play16:10

nonviolent communication, psychological safety, humility,

play16:15

positive retros, a sense of purpose for the team.

play16:18

So I really recommend if you're interested in this

play16:20

that you watch her talk.

play16:21

And maybe what Kat just talked about also

play16:24

fits in here as possible solutions.

play16:28

So pair programming, extreme programming,

play16:31

agile as a whole is all about embracing change,

play16:33

because we realize that change is inevitable,

play16:35

so we want to prepare for it.

play16:38

And I think another thing we should embrace and prepare

play16:40

for is this friction that I just talked about,

play16:43

because it's also inevitable on the way to becoming

play16:46

a high-performing team.

play16:47

And I don't mean by that, let's just

play16:49

have conflicts all the time and feel uncomfortable.

play16:52

But let's prepare the tools to deal with this as a default,

play16:56

not just when a team is doing badly.

play16:59

So practice feedback, practice better communication,

play17:02

all those things.

play17:04

And I'm ending a talk on pairing with this

play17:05

because I believe pair programming is often avoided

play17:08

because of those potential conflicts

play17:11

and because it's so personal.

play17:12

But if you consciously see it as a skill that you can develop

play17:15

and that it actually helps you get better at other things

play17:18

as well, then you prepare yourself and the team

play17:21

for the inevitable friction that you

play17:23

will get on a diverse and high-performing team,

play17:25

and you will collaborate better as a whole.

play17:28

And maybe almost like an unconscious

play17:32

continuing the heritage, I have a lot

play17:34

of amazing women developers around me right now

play17:37

who are pushing the conversations about pair

play17:39

programming and trying to make everybody better at it,

play17:41

so I want to end on that.

play17:44

[APPLAUSE]

Rate This

5.0 / 5 (0 votes)

Ähnliche Tags
Pair ProgrammingAgile DevelopmentKnowledge SharingCode OwnershipContinuous IntegrationSoftware ProductivityTeam CollaborationTechnical MindsetFeedback LoopDiversity in Tech
Benötigen Sie eine Zusammenfassung auf Englisch?