リファクタリング力を分解する

先日のエントリ「リファクタリングとヒステリシス - カタチづくり」で色んなフィードバックを頂いたので、もうちょっと考えてみた。


先日のエントリと同様、次の2つのパターン (1) と (2) を考えることにしよう。

  • (1) 最初から 機能A と 機能B を把握していた場合
  • (2) まず 機能A が要求され、次に 機能B が要求された場合

下の図は、(1) と (2) それぞれのパターンにおけるリファクタリングの様子を表したもの。縦軸はエントロピー、横軸は時間だ。リファクタリングを進めると、時間と共にエントロピーが下がっていく様子を示している。

まず、パターン (1) と (2) で開発者は同じ人だとする。つまり、(1) と (2) で開発者にスキルの差はないとする。これは重要な前提なので覚えておいて欲しい。

さて、リファクタリング開始時点から (1) のエントロピーは (2) のエントロピーよりも低い。(1) のパターンでは最初から機能Aと機能Bを把握した状態で開発しているのだから、当然ながら (2) の状態よりも有利な位置からスタートできるのだ。

そしてリファクタリング終了時点でも、エントロピーは (1) のほうが (2) よりも低い。(2) はスタート時点が不利なぶんだけ、なかなか (1) と同じレベルまでリファクタリングしきれない。この終了時点での (1) と (2) の差が、先日のエントリで書いた「ヒステリシス」である。


重要なこととして、どんなに頑張っても (2) のエントロピーが (1) のエントロピーを下回ることはないと考えられる。(1) の条件のほうが有利なのだから、この条件で(リファクタリングを経て)得られる設計がこの開発者の持つ設計能力の限界といえるはずだ。その限界を、不利な条件でスタートする (2) が超えられるはずがない。

そう考えると、この開発者が設計を改善するためには、次の2種類のスキルアップが挙げられる。

  • (α) ヒステリシスを小さく下げられるようにする。つまり、(2) のパターンでスタートしても、(1) のパターンと同程度までエントロピーを下げられるくらいのリファクタリング能力を身につける。
  • (β) 設計能力の限界を下げる。つまり、(1) のパターンで到達できる設計のレベルを上げることで、(2) のパターンで到達できる設計レベルも上がるはず。

例えば伸び悩んでいる後輩を見たとき、(α) と (β) のどちらがボトルネックなのかを見極めてあげると、よいアドバイスができるかもね。