コードレビューをすると出戻りが発生する

プロマネ#Inside-ShouldBee
suin
suin
2015年3月22日 投稿

こんにちは!ShouldBee開発者の野澤です。

今日は、ShouldBeeの開発チームでコードレビューを導入したら、どんな課題が見つかったか?それをどうやって解決しようと考えているかについて書きたいと思います。

コードレビューを始めたきっかけは、コードや仕様の属人化を避けたいと思ったところにはじまります。ShouldBeeの開発では、たったふたりでコードを書いていても、作業を分担してやっていると、コードや仕様が作者にしか分からなくなるだけでなく、「いつの間にか追加されていた機能」もあって問題になっていました。

この課題を解決するために、GitHub上でPull Requestを行い、必ず相手がコードレビューをしてからマージする運用を導入しました。コードレビューを取り入れてから2週間ほど経ったと思います。

そこで新たに見つかった課題が、「コードレビューをすると出戻りが発生する」ことです。コードレビューがテストケースの追加やtypoの修正くらいの軽微なものならいいのですが、APIそのもの変更など、大改修が何度か必要になることもありました。コードレビューでコードの属人化が減り、コードやテストケースの品質は高まったと感じるものの、開発スピードが以前より犠牲になっているとも感じました。

インターフェイスは外部に公開することが多く、コードが実装されてからインターフェイスが変わってしまうと、出戻りが大きくなってしまいます。そのインターフェイスに依存するコードは全て変更しないといけませんし、UIの場合ユーザマニュアルがあるとスクリーンショットはすべて差し替えになります。

この課題を解消するには、実装する前にインターフェイスを固めることと考えました。具体的には、今2つのアイディアがあります。

  1. 設計レビューをフローに加える
  2. ペア設計にする

1つ目の設計レビューをフローに加えるとは、コードを完全に仕上げる前にレビューをすることです。と言っても設計図を評価するような堅苦しいものではなく、他のモジュールとの接合部になるAPIの名前や引数・ユーザインターフェイスのラフ図についてレビューします。コードレビューと似たフローで行えるので、僕らのチームとしては導入が容易だと考えました。

2つ目のペア設計にする方法は、設計を2人がかりで行う方法です。非同期で行える設計レビューと比べると、ペア設計は2人が時間を合わせて作業しないとなりません。場合によっては、お互いの別の作業を止めてしまうデメリットがあります。逆にメリットとして、同じテーブルにつき、議論したり疑問を解決しながら行えるので意思疎通が早いという点があります。ペア設計の特徴を考えると、画面・モデル・インフラなど大枠の設計をするときに向いていると思います。

今後、この2つのアイディアを試してみて、「コードレビューをすると出戻りが発生する」が軽減されるか試してみたいと思います。何か学びがあったらまた共有したいと思います。