無駄のないリーン製造の過程では、在庫の定義は明確だ。余分な物品、製造中の物品、次の処理を待っている物品が在庫だ。リーンでは在庫を減らすことが重要だ。在庫にはコストがかかるからだ。ソフトウエア開発では要求は在庫と見なされるが、ではコードはどうか。
機能に対する要求の作り込みにたくさんの時間を費やすのは、作業が十分に合理化されていない間は、作業が進んでいないことになります。これは妥当なことですが、現実はもっと野蛮で、はっきりと在庫だと見なせるものがあります。それはコードです。
氏によれば、リーン製造では部品はひとつひとつ作られていく。この場合、個別の部品の製造過程を合理化することで効率性が得られる。しかし、ソフトウエア開発では違う。チームは同じ部品に何度も手を入れる。これはシステムが使われ始めるまで終わらない。なのでコードは最後まで作り上げられる生きた在庫で、最小化しなければならない。
ソフトウエア開発では、本質的には同じ車や製品の開発作業を続けます。作業は数年に及びます。同じコードベースを使って作業を続けます。このような、単一のコードベースを磨き続け、継続して注意を向ける必要がある場合、独立した部品のモデルを想定することはできません。なので私にとってはコードは在庫です。所有者にとっては実体のあるコストです。なのでコードを最小化することを考えるのは良いことだと思います。
同じようにOri Pekelman氏もコードは資産というより負債だと指摘する。まず、チームはお金を得るために製品のコードを書かなければならないが、後になるとチームはコストを可能な限り少なくするためにコードを少なくする方法を考えなければならなくなる。氏曰く、
コード量が多ければ多いほど、新しい機能追加は高くなります。そして本当に悪いことに新しく追加した機能はすべて既存のコードの上に積み重なり、さらに機能追加が高コストになります。既存コードの負の限界効用は定量ではありません。コードが構造化されて、単体テストがたくさん書かれて、スキーマのない、またはスキーマの緩いデータベースを利用すればするほど、新しいコードにかかる費用は少なくなります。
BoswellとFoucherの著書The Art of Readable Codeの中で著者たちは軽量なコードベースの重要さを強調する。彼らによれば、運用中のシステムを上手く扱う最良の秘訣はコードベースをなるべく軽くしておくことだ。彼らのアドバイスは、
- できるだけ包括的なユーティリティを作成する
- 使っていないコードや機能を削除する
- プロジェクトのモジュール性を維持し、下位のプロジェクトと結びつかないようにする
- ライブラリを使いこなす
- コードベースの量を常に意識して、可能な限り軽くしておく
Kevlin Henney氏は大量のコードを書かないための実践的ガイドの中でコードを削除してなるべく軽くしておくことが必要だと指摘する。
このようにコードベースを軽くしておくことは重要だ。Michael Feathers氏は下記のようにまとめている。
コードを戦略的に削除する方法を学んだ組織には未来があると思います。保持しなければならないコストか思った以上に大きいものです。これに気付いた組織には競争力があると思います。