こんにちは、asatoです。
チームでコードレビューについて議論する機会がありました。 その中の1トピックで「プレフィックス」について話し合いました。 このチームでは、「must」「nits」「imo」「ask」など、一般によく使われている(とブログなどでお見かけする)プレフィックスを使っていました。
議論が終わったとき、僕たちはプレフィックス運用を辞めました。 その後、特に大きな課題もなく開発を続けられました。
このポストでは、どんな話をしてその結論に至ったのかをまとめておきます。
もともとはプレフィックスの利用ルールを決める議論だった
プレフィックスはチーム内のほとんどのエンジニアがレビューコメントに使っていました。 しかし、チーム内に明確なルールがなく、どういうときにどのプレフィックスを使えばいいかの認識を揃えたいというところから議論はスタートしました。
それぞれがどのプレフィックスをどのシチュエーションで使っているかを表で整理
議論を進めるために、それぞれがどのプレフィックスをどのシチュエーションで使っているかを共有し合い、それをスプレッドシートにまとめました。 このとき、同じ意図で違うプレフィックスを使っていたり、その逆が存在していたため、整理の必要性に全員が合意しました。
全部imoだと気づく
ここでもっとも矢面に立ったプレフィックスが「imo」です。 「In My Opinion」の略で、「私的には〜」みたいなニュアンスで使われていました。
いや、レビューコメントにIMO以外なことある?
このチームでは、ピアコードレビューを行って(目指して)いました。 コードレビューでは、レビュアーとレビュイーはコードをよりよくするために協力し合う対等な関係をつくろうとしていました。 静的解析抜けた明確なコーディング規約違反ならわかりますが、それ以外は「must」も「want」も「nits」もどれも「imo」だし、使い分けがわからないなぁという話に花が咲きました。 (本当にこれだけで15分くらい意見を出し合っていた気がする。)
ひとまずここで、「imoは全部そうだから使わないようにしよう」という一つの結論が出ました。
そのプレフィックスで相手に何を期待しているかを
いよいよ本題です。 ここまでの議論で、レビュアーの意図から整理しても議論がまとまらないことを経験できました。 そこでアプローチを変え、そのプレフィックスを受け取ったレビュイーに期待する行動から分類を試みることにしました。
まずは「コードの変更を期待するか、否か」です。 例えば、「must」や「nits」などはコードの変更を期待するもの、「info」「ask」「memo」などはコードの変更を期待していないものという分類ができるのではないかと考えました。 しかし、「must」であってもその後の議論次第では変更を期待しないという結論になることもあるし、「ask」でも返答次第ではコードの変更を期待するケースもあるという話になりました。
次に、「レスを期待するか、否か」について議論してみました。 「nits」「info」「memo」などはレスを期待しないのではないかという意見がでました。 しかし、それぞれに自分がそのプレフィックスを使ったときを想像してもらった結果、コメントを残しているのだから見てほしいしレスもほしいという結論になりました。 さらにレビュイーの立場でも、これらのプレフィックスであっても自分はレスするだろうという意見が一致しました。
さて、すでに議論はカオスです。
コメントは議論開始の合図
ここまで議論してきて、自分たちがコードレビューで何をしたいかが見えてきました。 それは「議論」です。 どんなプレフィックスを使おうとも、その次に期待している行動は「議論」だったのです。 なぜそう書いたのか。 こういう設計はどうだろうか。 こういう情報を見たが今回の変更に活かせそうか。 プレフィックスが何であれ、僕たちはそこから議論をしたいということが判明したのです。
レビューをそのまま受け入れてほしいわけじゃない。 もちろん無視してほしいわけもない。 互いの意見を出し合って、認識を揃え、知識を共有し、より良いコードを目指したかったのです。
じゃあ、プレフィックスいらないか
ということで、レビュイーに期待する行動が「議論を開始する」の一択だとわかったので、僕たちはプレフィックスの議論をやめました。 使わないことにしました。
実際にはその後1週間プレフィックスを禁止する実験をしてみて、特に課題を感じないことを確認し、プレフィックス運用をやめました。
まとめ
今回、チームの中で暗黙的に当たり前になっていたプレフィックス運用について対話した結果、運用自体がなくなるという経験をしました。 当たり前にあったものをなくしてシンプルにできたのですが、それを可能にした点はいかのような行動にあったように感じます。
- 表などを使い情報を視覚化しながら議論することで、客観的に議論を進められた
- 「自分は何をするか」ではなく「相手に何を期待しているのか」から議論することで「自分は何をするべきか」がシンプルかつ明瞭になった
- メンバー全員が「私はこうしてる」「私はこう思う」を率直に場に提示してくれた
- まず短期間で実験してみて、その後意思決定することで、「やめる恐怖」を克服できた
効果がすごくあるわけではないけど、とても楽しい議論だったので、ここに残しておきます。