Skip to content

Commit ad26d83

Browse files
committed
A few rewordings
1 parent 95ddb83 commit ad26d83

File tree

2 files changed

+25
-26
lines changed

2 files changed

+25
-26
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ of the paper.
99

1010
We have long discussed how pair programming, among several benefits, accelerates knowledge sharing, ensures
1111
collective code ownership, and increases overall developer productivity.
12-
These benefits outweigh the previously assumed decrease in velocity and high cost due to having two people do
12+
These benefits outweigh the previously assumed decrease in velocity and high cost of to having two people do
1313
the work of one.
14-
Recently, we have learned that pairing does not negatively impact velocity, and can even improve velocity
15-
significantly, even in the short term.
16-
We complete more features faster by pairing because the code reviews happen in parallel, rather than asynchronously.
14+
We have shown that pairing does not negatively impact velocity, and in fact improves velocity significantly even in the
15+
short term.
16+
We complete more features faster by pairing because the code reviews happen in real time, rather than asynchronously.
1717

1818
## Summary
1919

pairing.tex

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
\begin{abstract}
2626
We have long discussed how pair programming, among several benefits, accelerates knowledge sharing, ensures
2727
collective code ownership, and increases overall developer productivity~\cite{fowler:pairing}.
28-
These benefits outweigh the previously assumed decrease in velocity and high cost due to having two people do
28+
These benefits outweigh the previously assumed decrease in velocity and high cost of having two people do
2929
the work of one.
3030
Recently, we have been able to show that pairing does not negatively impact velocity.
31-
On the contrary, pairing can improve velocity significantly, even in the short term.
31+
On the contrary, pairing can improve velocity significantly even in the short term.
3232
We complete more features faster by pairing because the code reviews happen in real time rather than
3333
asynchronously.
3434
\end{abstract}
@@ -42,20 +42,20 @@
4242
Pair programming, or having the two developers work side-by-side on a common problem or set of features, is one form
4343
of this collaboration.
4444

45-
However, once developers have a solid understanding of product domain and technology stack, the question quickly
46-
becomes: What happens when individuals understand both product domain and technology?
45+
However, once developers have a solid understanding of product domain and technology stack, the question changes.
46+
What happens when individuals understand both product domain and technology?
4747
Should they still pair?
4848

4949
The simple answer might be yes, because both domain and technology are constantly changing and there is always more
5050
to learn.
5151
In addition, the benefits of collective ownership alone might lead individuals to continue to pair.
5252

5353
\begin{displayquote}[\cite{fowler:pairing}][\textit{Birgitta Böckeler and Nina Siessegger}]
54-
``{[Pairing]} increases the chances that anyone on the team feels comfortable changing the code almost anywhere."
54+
``{[Pairing]} increases the chances that anyone on the team feels comfortable changing the code almost anywhere.''
5555
\end{displayquote}
5656

5757
Many organizations attempt to layer on processes to ensure code quality and security, however in practice this
58-
creates an increase in feedback cycles that have the opposite effect.
58+
creates an increase in the length of feedback cycles that has the opposite effect.
5959
In fact, research has found that lightweight change approval processes are the best way to ensure stability in a
6060
software product.
6161

@@ -65,12 +65,12 @@
6565
In short, approval by an external body (such as a manager or CAB) simply doesn't work to increase the stability of
6666
production systems, measured by the time to restore service and change fail rate.
6767
However, it certainly slows things down.
68-
It is, in fact, worse than having no change approval process at all."
68+
It is, in fact, worse than having no change approval process at all.''
6969
\end{displayquote}
7070

7171
In effect, pair programming promotes this concept of lightweight change approval process with fast feedback cycles.
72-
This alone would be an argument to continue to pair, however we have recently discovered that the impact is most
73-
effected by how easy the work is to parallelize.
72+
This alone would be an argument to continue to pair, however we have recently discovered that the largest impact
73+
comes from the ability to work fast with fewer parallel workstreams.
7474

7575

7676
\section{Discussion}\label{sec:discussion}
@@ -79,8 +79,8 @@
7979

8080
Consider a typical 8-hour day, and assume that we have two features: $F1$, which takes four hours to complete, and
8181
$F2$, which takes three hours to complete.
82-
As is common, these features must be completed sequentially (starting feature two is dependent on completing feature
83-
one successfully).
82+
As is common, these features must be completed sequentially ($F1$ must be successfully completed before starting
83+
work on $F2$).
8484

8585
\subsubsection{Pairing}\label{subsubsec:serial-pairing}
8686

@@ -182,7 +182,7 @@
182182
\hline
183183
Phil & \cellcolor{blue!10}$F1$ & \cellcolor{blue!10}$F1$ & \cellcolor{blue!10}$F1$ & \cellcolor{blue!10}$F1$ & & \cellcolor{red!10}Review $F2$ & \cellcolor{blue!10}Rework $F1$ & \cellcolor{red!10}Review $F2$ & \\
184184
\hline
185-
Gerry & \cellcolor{red!10}$F2$ & \cellcolor{red!10}$F2$ & \cellcolor{red!10}$F2$ & \cellcolor{red!10}$F2$ & & \cellcolor{blue!10}Review $F1$ & \cellcolor{red!10}Rework $F2$ & \cellcolor{blue!10}Review $F1$ & \\
185+
Gerry & \cellcolor{red!10}$F2$ & \cellcolor{red!10}$F2$ & \cellcolor{red!10}$F2$ & & & \cellcolor{blue!10}Review $F1$ & \cellcolor{red!10}Rework $F2$ & \cellcolor{blue!10}Review $F1$ & \\
186186
\hline
187187
\end{tabular}
188188
\caption{A typical day soloing}
@@ -206,7 +206,7 @@
206206
This includes both the risks associated with non-parallelizable features and the risks of imperfect communication
207207
and coordination.
208208

209-
To go fast with soloing with pull-requests you constantly need one stream of work for every developer.
209+
To go fast soloing with pull-requests you constantly need one stream of work for every developer.
210210
Based on the past few decades of building software for startups and enterprise companies, we are unable to name a
211211
single product that has had absolutely no dependencies between features.
212212

@@ -251,7 +251,7 @@
251251
This occurs when the code is merged into the mainline branch.
252252

253253
\begin{definition}
254-
A user story is \textit{finished} once the code is merged into the mainline branch.
254+
A user story is \textit{finished} once the code is integrated into the mainline branch.
255255
\end{definition}
256256

257257
\subsubsection{Pair Programming}\label{subsubsec:pairing}
@@ -266,8 +266,8 @@
266266
committing to the mainline branch once the code is complete.
267267
\end{definition}
268268

269-
As code review happens in real time, the code written for a story is ready to merge into the mainline as soon as it
270-
is complete.
269+
As code review happens in real time, the code written for a story is ready to integrate into the mainline as soon as
270+
it is complete.
271271

272272
\begin{lemma}
273273
\label{lemma:pair}
@@ -288,7 +288,7 @@
288288
\begin{definition}
289289
In the \textit{pull request workflow} each developer works individually and submits the code for each user story
290290
asynchronous review by others through pull requests.
291-
Another developer reviews thoroughly reviews the pull request and suggests changes.
291+
Another developer thoroughly reviews the pull request and suggests changes.
292292
The author reviews these changes, updates the pull request, and merges the code into the mainline branch.
293293
\end{definition}
294294

@@ -313,7 +313,6 @@
313313
A \textit{backlog} is an ordered collection of user stories.
314314
\end{definition}
315315

316-
A backlog is an ordered collection of stories.
317316
In any non-trivial project there are dependencies between stories that prevent one story from being started until
318317
another story has been completed.
319318

@@ -348,7 +347,7 @@
348347

349348
\begin{lemma}
350349
\label{lemma:parallel}
351-
A team of $2n$ developers with a backlog with more than $2n$ workstreams has an average daily velocity of $4n$,
350+
A team of $2n$ developers with a backlog parallelizable into at least $2n$ workstreams has an average daily velocity of $4n$,
352351
regardless of working model (assuming an 8-hour day).
353352
\end{lemma}
354353
\begin{proof}
@@ -360,11 +359,11 @@
360359
The power of pairing is the ability for a team to work quickly on a backlog, even when parallelization is limited.
361360

362361
\begin{theorem}
363-
A well-functioning team of developers working as pairs is as fast or faster than a team of developers using pull
364-
requests.
362+
A well-functioning team of developers working as pairs is as fast or faster than a team of solo developers using
363+
pull requests.
365364
\end{theorem}
366365
\begin{proof}
367-
Suppose a team of $2n$ developers has a backlog that is parallelizable into $m > 0$ workstreams.
366+
Suppose a team of $2n$ developers has a backlog that is parallelizable into $m$ workstreams.
368367
We will examine three different cases for the size $m$, and show that the team's velocity working in pairs is at
369368
least as fast as the team's velocity using pull requests.
370369

0 commit comments

Comments
 (0)