がらくたの山に埋もれたベルトコンベアから、小さな箱がひとつだけ出てくる鉛筆画

コード1行あたりの業務価値を最大化する

AI のおかげで、マージされる PR は去年の倍になった。タスク管理ツールのチケットは、次々に「完了」へ移っていく。もはやチケットを切るのも追いつかず、チケットのない変更がそのままマージされていくチームも多いだろう。では、ユーザーが得たものや事業の数字は、果たして倍になっただろうか。

倍になっていないなら、数えているものが違う。クローズしたチケット、マージした PR、消化したストーリーポイント、リードタイム。どれも「いつ、何件終わったか」を示すアウトプットであり、点である。しかしアウトカムは、リリースしたあと、使われ続けるあいだに少しずつ積み上がっていく。点ではなく、時間とともに広がる面積である。

エンジニアの仕事は、アウトプットを増やすことでも、速度を上げることでもない。抱え続けるコード1行ごとに、どれだけの面積を生めるか。その効率を上げることである。

アウトプットは点、アウトカムは面積である

リリースした日、あなたのコードの価値はゼロである。

ユーザーが使い始めてはじめて、価値はあるペースで流れ出す。守れた売上、減った誰かの手間、避けられたリスク、依存してくれるプロジェクト。そのペースに、役に立ち続けた時間を掛けたものが面積になる。出荷が遅い、使われない、たびたび止まる。どれかひとつでもあれば、コミットログがどれほど賑やかでも面積は小さい。

同じ日に出荷しても、面積があるのは使われたほうだけ 同じ日にリリースした2つの機能。マスは1日で、その日に使った人が多いほど濃い。下の棒は同じ数字を週ごとの平均にしたもの。使われた一括編集機能には面積が積み上がり、一度も使われないエクスポート機能の面積は0のまま。数値は例示。 一括編集 機能 使われた 4月 5月 6月 7月 8月 9月 月 水 金 0 1,000 2,000 3,000 人/日 リリース 使われた日数 138日中 135日 面積の合計 35万 人日 利用の少ない週 多い週 障害 500 3,100 エクスポート 機能 一度も使われない 0 1,000 2,000 3,000 138日中 0日 0 人日

費用対効果も生産性も、分子にあるのは面積である。速く出しても使われなければ、分子はゼロのまま分母の費用だけが増える。安く価値を買ったのではない。使われない機能に、お金と時間を払っただけである。

新機能も保守も、同じ面積を広げる

面積を本当に広げる仕事は、次の5つのどれかに当たる。

  1. 早くリリースする — 始まりを前倒しし、価値が流れる時間を長くする。
  2. 価値を厚くする — 単位時間あたりの成果を上げる。ユーザーの課題を、よりはっきり解く。
  3. いま価値を落とさない — 障害、壊れた導線、気づかれにくい不具合。面積に空く穴を塞ぐ。
  4. あとで価値を失わない — サポート終了、強制アップグレード、抜けられない基盤。未来の面積が消えるのを防ぐ。
  5. 続けられる状態にする — 次の変更が高くつかないよう、変えやすさを保つ。

新機能はたいてい 1 と 2 に、保守や信頼性の仕事は 3 から 5 に効く。狙う面積は同じで、触る辺が違うだけである。

同じ面積を広げる5つの方法 打ち手を1つずつ動かした場合。点線が今日の面積(100)、色の部分がその打ち手で増えた分で、どれも同じ+10%。黒は事業の仕事、緑は信頼性と保守の仕事。 ① 早くリリースする +10% ② 価値を厚くする +10% ③ いま価値を落とさない +10% ④ あとで価値を失わない +10% ⑤ 続けられる状態にする +10% 0 6 12 18 24 か月

ただ、どの打ち手を選んでも、手元にはコードが残る。

機能は資産、コードは負債側にある

ビルのオーナーを思い浮かべてほしい。ワンフロア増築すれば、家賃収入が増える。同時に、建築費、入居者の募集、修繕、住人対応、退去対応、固定資産税がついてくる。空室のままでも、修繕費と税は毎年やってくる。コードも同じである。届いている機能が家賃を生み、残した1行には、レビュー、テスト、移行、オンコールがつきまとい、次に読む人の頭にも負担がかかる。OSS なら、Issue への返事と互換性の約束も加わる。どれも、その行が価値を生んでいるかどうかに関係なく。

空室の階も、毎月120時間の保守を取り続ける コードベースを6階建てのビルとして描いたもの。1つの階が1つの機能。保守はレビュー、テスト、アップグレード、オンコールにかかる月あたりの時間(160時間=エンジニア1人分)。空室の2階は利用者0でも、毎月120時間を取り続ける。数値は例示。 階(機能) 週の利用者 保守 時間/月 1F 決済 4.8万 90 2F 旧データ同期 0 空室 75 3F 検索 3.2万 60 4F 請求 2.1万 75 5F エクスポート 0 空室 45 6F レポート 0.9万 50 合計 11万 395 ≈ エンジニア2.5人 空室の階 0 120 ≈ エンジニア0.75人

総コード量が増えるほど、保守の割合も増える。人数を変えずに対象だけ広げれば、新しい価値に回せる余力は細っていく。維持するものを減らさずに前へ進み続けるには、人が増え続けるしかない。保守を AI で人間より安く代替できても、今度はその AI を保守するコストが加わる。

道はひとつしかない。維持するものを減らすことである。

消すことは本業である

だから削除と整理は、暇なときの掃除ではない。エンジニアリングの本業である。価値を落とさずに削ぎ落とせることこそ、卓越したエンジニアの証である。

空室の階を取り壊すと、毎月120時間が新しい仕事に戻る 同じビルの、空室の2階を取り壊す前と後。利用者は週11万人のまま、保守は月395時間から275時間に減り、エンジニア約0.75人分が新しい仕事に戻る。斜線の窓は利用者0の階。 決済 90 旧データ同期 75 検索 60 請求 75 エクスポート 45 レポート 50 決済 90 検索 60 請求 75 レポート 50 取り壊す前 保守 時間/月 取り壊した後 保守 時間/月 −120時間/月 空室の2階を撤去 11万 週の利用者 395 11万 週の利用者 そのまま 275 −120時間/月 ≈ エンジニア0.75人

使われない機能やオプション、終わった実験の残骸、誰も使わない互換のための継ぎ足し。これが 業務上の負債 である。空室と同じで、コストだけがあり、面積がない。消すべきである。消すのは面積のないコードであり、読めない短さに潰すことではない。同じミスを封じる抽象なら、行が増えても価値は上がる。

残るのはしばしば 実装上の負債 である。まだ価値を生んでいるが、安全に変えにくいコード。こちらは消さずに、いま生んでいる面積を壊さないよう直し、まとめる。目的は見た目のきれいさではない。次の面積を安く作れるようにすることである。先送りしても、結局は払う。利子付きで、しかもたいていは障害や強制移行のさなかに。

AIの工場で、最初にやるのは削除である

ソフトウェアファクトリーを組み、大量の AI が構築と保守を回すようになっても、工場を管理するのは人間である。

管理画面には、今日もマージされた PR の数が並んでいる。ある日、AI では直せない障害が起き、あなたは初めて工場の中を覗く。中はゴミだらけで、かろうじて出荷できている。

どうするだろうか。

まず、消すはずだ。面積のないコードを探し、残す1行ごとに、何の価値を生んでいるかを問うはずだ。その問いは、工場が止まる前から始められる。今日の差分からでいい。

AI の時代は、コードを増やす誘惑が強い。そこで踏ん張る。


コード1行あたりの業務価値を最大化する。