はじめに
本稿はGoodpatch Advent Calendar 2020の25日目の記事です。
Goodpatchでエンジニアリングマネージャーをしていますが、今年はエンジニアリング観点ではXPのプラクティスとして有名なペアプログラミングを一般化してペアワークとし、そのメリットやデメリットについて考察してみたいと思います。
不確実な世の中に
去年の記事のセクションと同じタイトルをつけてしまいました。ので詳しくはそちらへ。ざっくりとまとめると、VUCAな世の中への流れは必然で、流れは止められないことを説明しています。同記事の中でもクネビンフレームワークについて触れていますが、Simple、Complicatedな問題は付加価値が出せなくなってきており、必然的に私たちはComplexな問題に向き合う必要が出てきています。Complexな問題というのは答えがあるかどうかが分かっていない種類の問題なので、早く効率的に解く(Efficiency)よりも、最終的にちゃんと解けるかどうか(Effective)が重要です。そんな暗闇の中を答えを求めて彷徨う中でペアワークは働き方の一つとして有効なのではないかと個人的に思っています。
ペアワークとは何か
ペアワークの起源はおそらくXPのプラクティスであるペアプログラミングだと思っているのですが(違っていたら教えてください)、これを他の様々な仕事に当てはめたものを本稿
ではペアワークと呼びます。日本でも大きな反響を呼んだ書籍『Joy, Inc』(2016)において
Menlo Innovations社で実際に採用されている働き方として紹介されました。書籍内ではメリットとして
- スキルの向上
- 親しくなれる
- 生産性が向上する
- 知識の塔を突き崩す(属人性の解消)
などが挙げられていました。それらの詳細についてはレビューなどもたくさん見つかると思うので割愛しますが、良書なので読んで損はないと思います。まだ読んだことがないという人は年末年始の一冊に加えてみても良いのではないでしょうか。Menlo Innovations社はペアワークをエクストリームに適用した会社で、どういう経緯でそこに至ったのかということや、実際の業務の進め方などが書籍内で紹介されています。本稿ではその一部であるペアワーク自体についてスポットを当てていきたいと思います。
ペアワークのメリット
私自身が思うペアワークから得られるものは大きく分けると以下の4点です。
- 別の観点が得られること
- 経験が共有できること
- 分かり合えること
- 集中できること
それぞれについてもう少し詳しく見ていきましょう。
別の観点が得られること
当たり前といえば当たり前ですが、自分とは違う人間とペアを組むことで同じ対象を自分とは違う視点で見てくれる人がいる状態になるので、結果として自分にはない観点が得られることになります。それによる具体的なメリットとしては「アイデアの幅が広がる」ことと「前に進むための推進力が得られる」ことかなと思います。
アイデアの幅が広がる
まず、こちらも当たり前のことではあるものの自分とは異なる観点が得られることでアイデアの幅は大きく広がります。良いアイデアが生まれる環境として3B(Bus、Bath、Bed)が有名ですが、個人的には(場所でないですが)Buddyを入れて4Bにしてもいいのではないかと思っています。人に説明するだけで頭の中が整理される上に、別の観点が得られるので他の3Bよりも能動的に短時間で成果が得られると感じています。ちなみに、アイデアの振り幅は相手が自分と違えば違うほど大きくなりますが、違えば違うほどお互いの共通言語を作ることが難しくなり、協業していくこと自体の難易度が上がってしまうのが注意すべきポイントだと思います。有名な「7つの習慣」(2013)で言うところの第6の習慣「シナジーを創り出す」は第5の習慣「まず理解に徹し、そして理解される」が前提になっているのも頷けます。
前に進むための推進力が得られる
エンジニアリングやデザインなどのクリエイティブな仕事は評価軸が複数あり(プログラムで言えば処理スピード、読みやすさ、メモリの使用量など)、最適解が見つからず、そのバランスを見つける必要があるような場合は非常に悩ましいことになります。そんな時にもう一人の意見をタイムリーに得られるのは前進する上で非常に大きな力になります。仮に同意が得られれば自信を持って先に進めるし、違う意見であればその意見を元に考え直してみたり、決めの問題だということが分かることで先に進むことができます。先に論じた通り、明確な答えの無い世界を彷徨う中で、まずは前に進んで仮に間違っていてもそれに早く気づけることがとても重要です。
経験が共有できること
同じ業務をペアで行うことでSECIモデルで言うところのSocializaiton(共同化)により、暗黙知をそのままの形でシェアすることができます。人類は言葉を使うことで時間や空間を超えてナレッジを広めることができるようになりましたが、言語化によって極めて多くの情報が失われます。共同化は言語化を挟まずに経験をそのまま共有できるため、「思考の過程が共有できる」こと、「(ツールの使い方など)効率的な仕事の進め方が分かる」こと。そしてそれらにより結果として「属人性が排除できる」ことなどが具体的なメリットになります。
思考の過程が共有できる
最終的な成果物を見ることも学びには繋がると思いますが、それを見ただけで自分も同じレベルの成果物が作れるようになるかというとそうではないと思います。ただし、もしそれがどのような過程を経て出てきたものなのか(e.g. どのように問題を捉えて、どこから手を付けたのか、どこでどう迷って、どう判断していったのか)が分かると、自分でも応用ができる可能性は圧倒的に高くなるのではないでしょうか。ストーリーテリングによる追体験も効果はあると思いますが、やはり同じタイミングで経験をシェアできることの学習効果はより高いものになるはずです。
(ツールの使い方など)効率的な仕事の進め方が分かる
独りで作業をしていると自分なりに効率よくやっているつもりが、実はもっと上手いやり方があるのに知らないままということもあります。ペアワークではお互いの作業を目の前で見ることになるので、より効率的な新しいツールの存在や既知のツールの機能の使いこなし方に発見があることもあると思います。さらに、ペアを定期的に組み替えていくことでチーム全体として良いノウハウを素早く行き渡らせることができます。
属人性が排除できる
ペアで作業を続ける中で経験が共有されることで、トラックナンバー(トラックに轢かれるなどして離脱してしまうとプロジェクトに支障をきたす人数)を最低でも2に保つことができます。トラックナンバーが2以上であれば休暇がとりやすくなったり、特定のプロダクトに縛られずに新しいことにチャレンジできるようになります(属人性が高いプロダクトは特定の人にしか面倒をみることができないので、最悪の場合辞めるまでそのプロダクトをメンテナンスし続けないといけないかもしれません)。
分かり合えること
ペアワークではお互いが密にコミュニケーションをとりながら作業を進めていくことになります。一定の時間、同じ経験を共有することで、自然とお互いのことをより深く知ることができるようになります。お互いのことを分かり合うことで「理解のレベルを合わせられる」ことと「セレンディピティに遭遇する確率を上げる」ことができると考えています。
理解のレベルを合わせられる
プロダクトは成功すると寿命も長くなり(それ自体もそれに付随するドキュメント等も)固定されたメンバーだけでメンテナンスし続けていくことは出来なくなります。そういった状況の中でスキルのレベル、視点や考え方も様々な人たちが共同でメンテナンスしていくためには、もちろん個々人のレベルを向上していくことも大切ですが、ある程度幅広い範囲の人にも理解ができるような状態をキープする努力も必要になります。ペアで作業していく中で自分にとっては自然に理解できるものでも人によっては理解しづらい箇所が詳かになります。そういった箇所は他に解釈の仕方のない書き方に改めることや、注釈をいれることなどでスキルの高い人にしか理解できない状態を解消し、メンテナビリティを上げることができます。
セレンディピティに遭遇する確率を上げる
様々なバックグラウンドやスキルを持ったメンバーと交流すると、ふとした雑談などから予想もしていなかった偶然の発見に遭遇する確率を上げることができます(ある分野で大きな障壁になっていた問題が別の分野で一般的に行われている手法を当てはめることで解決することもあります)。アイデアとは既存の要素の新しい組み合わせ以外の何ものでもないと言われますが、全く関係のない分野の話の中にこそイノベーションの種があるので、ペアワークを通じて雑談できるような間柄になることは目の前の仕事の成果を超えたところにもメリットがあるのではないかと思います。
集中できること
ペアワークはソロワークに比べて集中できます。集中しないといけない環境に無理やり追い込まれる感覚に近いかもしれません。ここから得られるメリットはやはり「生産性を上げる」ことになると思います。
生産性を上げる
ペアで密にやりとりを続ける働き方はそれ以外のことをする時間が必然的になくなります。結果的には単位時間あたりの作業の濃度が上がり、生産性が高くなる状況を人為的に作り出すことができます。逆に、非常にカロリーの高い働き方でもあるので長時間続けることは難しくなりますが(とても疲れるので)、短時間集中して仕事をしてしっかり休んでリフレッシュする方が健康的な生活と言えるかもしれません。
ペアワークのデメリット
これまでの議論で様々なメリットについて散々触れてきましたが、ご多分に漏れず銀の弾丸ではないのでデメリット(と導入の障壁)についても触れておきたいと思います。
全ての作業に向いている訳ではないこと
前述のMenlo Innovations社は本を読む限り業務のほとんどをペアでやっているような印象を受けますが、全ての作業をペアで取り組むことがベストとは思いません。具体的にはSimpleやComplicatedな問題についてはソロでやっても問題ない作業なのでそれぞれの時間を作って別で取り組めば十分だと思います。
生産性が落ちる(と信じられていること)
ペアプログラミングをすると生産性(ここでは生成されるコードの量をイメージしてください)が半分になると思われがちです。現実にはそうならない(成果物ができるまでのリードタイムはやや増えるが、同時に品質が向上する)ことが研究でも示されていますが、世の中そんなに理解のある人ばかりではないので、そもそもそういった働き方が否定される可能性は十分にあります。そんな時は転職、、するのではなく、まずは名著「Fearless Change」(2014)を読んで心を落ち着けましょう。新しいことに対する反発を乗り越えるヒントが見つかるかもしれません。
同期的な時間の確保
当たり前ですが、ペアワークをする以上、お互いに同じ時間を確保する必要があります。どちらもカレンダーに予定があまり入っていないような場合には問題ないでしょうが、どちらかにミーティングなどの予定がたくさん入れられているような環境だとその時間の確保は厄介な問題になるでしょう。もしリモート環境でやる場合にはタイムゾーンの問題もあるかもしれません。できるだけペアは同じタイムゾーン内で組むようにしたいですね。
リモート環境
2020年は新型コロナウイルスで働き方も一変しました。ホワイトカラーな方々は在宅勤務の割合が増えたのではないでしょうか。実際に仕事をしてみて思ったよりも大きな問題は起きていないという人もいると思いますが、ペアワークは可能であれば対面で行った方が効果は高いと思います。リモート環境でのペアプロなども技術的には可能ではあるものの、隣にいるのとZoomやDiscord越しのコミュニケーションとはやはり大きな違いがあります。ヒトの脳は社会的な繋がりを必要とするようにデザインされている(と思う)のでコロナ禍が終わったらぜひ直接会ってペアで仕事をしてみることをおすすめします。
おわりに
本稿はリモートコラボレーションのためのワークスペースであるStrapを使って初期の構成をまとめてみました。本当はこれをペアでやれたら良かったのですが、上記の同期的な時間の確保などの課題もありソロで進めてしまいました。ちなみに、どうしてもソロで進めなければいけない場合には一度寝かせて間を空けて取り組むことで、全く別の自分として過去の自分と向き合うことができるので、ある程度の期間を取れる場合にはそういったやり方をおすすめします。
今年も最後まで読んでいただきありがとうございました。
それでは、良いお年を!