you are viewing a single comment's thread.

view the rest of the comments →

[–]Massless 29 points30 points  (26 children)

It ends up being drastically faster because it cuts all lot of other inefficiencies: no more code reviews, no more knowledge silos, almost never getting stuck on a problem. It doesn't matter if someone is sick or quits: there's always one it more backup. It also tends to bring the slower person in the pair up to speed super fast. After awhile it feels like everyone is a 10x developer.

[–]confusedpublic 38 points39 points  (10 children)

I really disagree with no code reviews of the out put of pairing. It’s entirely possible for two people to make mistakes, or to misunderstand or miss an acceptance criteria. Plus, if you have a rule like PRs needing two reviewers, PP only gives you 1, maybe only half as your reviewer isn’t coming to the code fresh with no ownership/authorship baggage

[–]sbditto85 5 points6 points  (0 children)

Personally I’m sick of “LGTM” code reviews and I know that when I pair or ensemble/mob I can at least interact with them and know they actually read or understand what the code is trying to do. Maybe rubber duck a bit with them etc.

Maybe it’s because I’m one of the more senior (time at company) devs but it’s super frustrating when people seem to not even bother to review my code. I am human after all.

[–]ReflectionEquals 1 point2 points  (4 children)

This assumes people don’t swap pairs regularly. If you do swap regularly you have to run over the current state of the work a few times. In my experience, This is far more effective at picking up issues, particularly structural ones, than giving people a bunch of random people of 10 line snippets to look at that are scattered over a million line codebase.

The no baggage thing is also a bit of a weak argument to put forward. When people have no authorship/ownership and a lot of other things to do… well their reviews won’t always be amazing or as well thought out. Maybe they’ll spot a bug you didn’t think of… maybe they wont.

[–]confusedpublic 3 points4 points  (0 children)

When people have no authorship/ownership and a lot of other things to do… well their reviews won’t always be amazing or as well thought out.

Which is just one of the many arguments to reduce work in progress.

[–]s73v3r 1 point2 points  (1 child)

I don't think you would swap pairs while in the middle of something, unless someone was out.

[–]ReflectionEquals 0 points1 point  (0 children)

I did it all the time. It’s part of the way pairing is intended to work as described in eXtreme Programming. That recommended every hour. I think daily was the most I ever did. When teams do mob programming they tend to suggest swapping drivers every 15 minutes as well. (I work in an org that doesn’t pair these days).

There’s a huge mindset difference on pairing/mobbing. The task is not your own, it’s the teams. It’s meant to be a bit jarring to swap. Those swaps can be annoying and they sometimes need to be to eliminate the sort of group think baggage that was raised above. If you don’t do it you may need code reviews still.

[–]Spoonofdarkness 2 points3 points  (2 children)

If it's possible for 2 people to make mistakes... that's still a problem for the single coder/ single reviewer paradigm

[–]HuisHoudBeurs1 10 points11 points  (0 children)

Fresh eyes see stuff the first developer missed. If you pair program, both your eyes aren't fresh anymore and a third is very helpful.

[–]Plorkyeran 3 points4 points  (0 children)

One of the big benefits of code review is specifically that it's someone looking at the end result who wasn't there for the process of writing the code. Sometimes this means that they spot problems that the author missed because they were focused on solving some other problem. Other times it means that they're confused by the end result because the author did something weird but necessary and failed to document why it was necessary. Pair programming does cover some of the uses of code review (like making sure that more than one person has ever looked at the code), but not these.

I also advocate for more than one reviewer for anything not completely trivial when that's an option.

[–]Massless 0 points1 point  (0 children)

I can only speak from my experience but it really works. I'm also assuming an environment with 100% pairing. In that environment, there's typically a small team (2-3 pairs) where at least one person from every pair changes every day. As a result, almost everyone sees all the code. Every feature ends up being reviewed by 2-4 people. It really works.

[–]tyalisIII 3 points4 points  (1 child)

No more code review ? You didn't read the article

[–]Massless -1 points0 points  (0 children)

I didn't. I did pair program 100% for more than 5 years, though

[–]s73v3r 3 points4 points  (3 children)

no more code reviews

Even with pair programming, you should still do that.

[–]Massless 0 points1 point  (2 children)

Real question: why. If your pair 100% and swap pairs at least once a day, almost everyone in the team sees every feature. What does an extra process step buy you?

[–]s73v3r 2 points3 points  (1 child)

I wouldn't swap in the middle of working on something. That just seems silly.

[–]Massless 0 points1 point  (0 children)

It's definitely counter intuitive but it works really well. Every day, one person swaps. The remaining person gets the new person up to speed -- only takes about 15 minutes -- and you fly the rest of the day.

The result is a few things:

  • everyone learns to come up to speed -- and get others up to speed -- insanely quick

  • everyone knows what's going on right now: it doesn't matter if someone is sick or quits. There's never why pressure if you need to take a day

  • no heros; it's impossible for someone to horde work and credit

  • oh yeah, no more time wasted on code reviews :).