はじめに
今でもよわよわ開発者な私ですが、現在のチームに配属された時はもちろんもっとよわよわでした。
今ならAIもありますが、数年前の当時はその片鱗もありませんでした。
今のチームでは、コードレビューをリーダーも含め全員参加でやっています。
なので、当時私がレビュイーになれば指摘事項満載で時間超過しますし、レビュワーになればほぼ聞いているだけでした。
この記事では、指摘事項満載なケースを減らせたので、それについて話します。
コードレビューの当時の状況
コードレビュー形式
先述の通り、リーダーも含めた全員参加でコードレビューを実施します。
1対多の状況になるわけです。
なので、私もレビューに参加することは多かったです。
メンバーは大体、
- 開発リーダー
- 技術力が高い開発者
- 元開発の開発者
- 開発未経験の私
な感じでイメージしてください。
技術力が高い開発者の立ち回り
リーダーが指摘点をいくつも持っているので、そこを起点に始まります。
それが一通り終わると、次に技術力が高い開発者が指摘を重ねていき、概ねそれで出尽くします。
リーダーがレビュイーになると、指摘点もほとんどなく、技術力が高い開発者がぽつぽつと確認して終わり、という感じです。
未経験開発者な私
それに対して私は、レビュイーであれば、先述の通り指摘事項満載で時間超過します。
また明日もう一度、と何度もありました。
レビュワーで参加すると大体言えることはありません。
ギリギリ思いついても、先に他の人が指摘するので、結局無言で終わります。
コードレビューの弱点
当たり前のような法則
しばらくして、2つの法則性を見出しました。
それは
- 指摘する人は大体偏りがち
- 何度も同じ指摘が複数のレビューで発生する
というものでした。
1つ目の、指摘する人が偏るのは、至極当たり前のことでしょう。
技術力が高い開発者は、早く、そして多く気付けます。
コードを読む速度も、理解力も、何もかもが早いからです。
私は、レビューの時間内にコードを読み切ることすらままなりません。
指摘数に傾斜が付くのは当然です。
2つ目は、同じ指摘が何度も発生することです。
私がギリギリ思いつく指摘は、過去の指摘事項を覚えているからです。
時々私が過去の指摘事項を最後の手番で発言するのは、技術力が高い開発者たちも時折忘れるからです。
これはつまり「コードレビューは属人的」だということです。
属人的コードレビューの問題点
「属人的」には様々な問題が付きまといます。
- その人がいないと成り立たない
- 人はいつかミスをする
この2点が大きいでしょう。
1つ目の、その人がいないと成り立たないとは、ここでは技術力が高い開発者を指します。
開発リーダーが休みだったら、レビューをリスケすればよいでしょう。
でも、休職したり異動したり、いなくなってしまうケースがあります。
2つ目の、人はいつかミスをするとは、私が過去の指摘事項を発言することです。
技術力が高い開発者であっても、見逃しはあります。
私が気付いたのは、私が優秀なのではなく、偶然です。
属人的コードレビューからの脱却
属人化脱却の指標:私が技術力が高い開発者と同じくらい指摘ができればよい
私がレビューできないのはどうしてでしょうか。
それは、コーディングの技量も、製品の知識も足りないからです。
足りない、つまり観点を持っていないから気付くこともできません。
では、私が勉強して、コーディングの技量を上げて、製品知識も身に着けてしまえばいいのでしょうか。
それはNOです。
例え私の技術力が高くなったとしても(なれていないが)、属人化を取り除けていません。
私にも、誰にも依存しない仕組みで解決する必要があります。
そもそも、私がレビューのタイミングで指摘をする必要性はないはずです。
もっと言えば、誰かがレビューで指摘する必要だってないはずです。
人はミスをするのだから、システマチックに対応すべきでしょう。
コードレビュー観点表の実装
そうして、私はコードレビュー観点表を作り上げました。
叩きの段階では、それまでのコーディングと製品知識に関する指摘を集約した一覧を作成し、それを技術力が高い開発者の方々に強化してもらいました。
開発中はその観点表を用いてセルフチェックを行い、レビュー時にも改めて全員でチェックします。
新しい指摘や、不具合の再発防止でチェック項目の追加などを施し、強化も続けました。
おかげ様で「レビュー時にチェックするには長すぎやしないか」という程度には使い倒され、強化され続けました。
観点表を作成して面白かったのは、明文化することで、感覚値を検討できたことです。
「if文かswitch文か、どこから分けるか」など、レビューの都度感覚値で決めていたことも定量的になり、そういった議論の時間が減るという効果もありました。
そうして、技術力が高い開発者の指摘を元に作った観点表を用いて、私が時間超過する回数は減ったのでした。
めでたしめでたし