プロジェクト・マネジャーが知るべき97のこと/負債を支払う

うまく管理できている限り、借入金(負債)は一般市民にとっても、成功している組織にとっても、有用な資金確保手段です。借入金を利用することで、将来の余剰金を借用して、現在の不足分を清算できます。賢く使えば、短期的借入金は現金の増減の凹凸をなだらかにする効果的なツールとなります。しかし使い方を間違うと、時が経つにつれて徐々に負担が大きくなり、やっかいな重荷となります。

ソフトウェア開発の世界において、時間を借用するということは、やるべきことを何とかやり遂げながら、リスクのあるマイルストーンを達成するのに役立つ戦略です。ワード・カニンガムは、イテレーション†の終わりや締め切りに向かいつつ、時間が足らないときに開発者が負担するものとして、「技術的負債」という考えを取り入れました。その時点では、完璧なコードは書けないかもしれませんが、いくぶん手抜きをすれば、開発者は完了基準に「十分適合した」コードなら書けるかもしれません。

たとえソフトウェアが一時的に不完全な状態になっても、負担した技術的負債が責任をもって管理されているなら、これはまったく理にかなっています。しかし、技術的負債が支払えないでいると、やがてこれは苦痛になってきます。負債を返済せずに将来を担保にして借用し続けると、プロジェクトはさらに危険にさらされていきます。

技術的負債を支払う一番よい方法は、各イテレーションの終わりにどんな「ローン」を組むか評価することです。開発者に依頼しましょう。やり直したいハック††を具体的に特定して、それをやり直すのにどれくらいの時間が必要になりそうか、数値化してもらうのです。今すぐに負債を支払う必要はありませんが、どんな近道をしたのか開発者の頭の中に残っているうちに、今後必要になる修正範囲を調べておくのはよいことです。

時間を好きなだけ要求するのではなく、コード上で書き直すべき問題が具体的にあるか確認しましょう。これはサボるチャンスではありません。コードベースをきれいにしておくための規律あるアプローチなのです。

また、コードカバレッジ、カップリング分析、スタイル違反検出といったソフトウェア分析ツールがいろいろと出てきていますが、こうしたツールは負債が生じたところを自動的に特定するのに役立ちます。おそらく専門的な知識はほとんど必要ないはずです。こうして見つけた案件は課題管理システムに投入しておき、将来のイテレーションで実施するようスケジュールを立てましょう。新しいビジネス機能の開発とローンの支払いを盛り込み負荷のバランスをとることによって、顧客の機能要求を満足させながらも、技術的負債が手に負えなくなるのを防ぐことができます。

ソフトウェアはいろいろな理由から不恰好になっていきます。しかし、ほとんどの責任は、ハックや不十分なドキュメント、不適切な依存関係、近道、意図した設計からの逸脱といったところにあります。開発者が降参してしまい、もう一度最初からやり直す必要があると言うときは、未払いの技術的負債が手に負えなくなったときです。彼らはソフトウェアを「破産同然だ」と宣言する必要性を感じたのです。

そういう状態に陥る前に、負債を特定してすばやく対処しましょう。そうすることで、頻繁に「最低限の支払い」ができるようになり、次なる混沌を避けることができます。時間がたつにつれ、ソフトウェアがどのように手に負えなくなるのか、なぜコードをきれいにしておくことに投資すべきなのかを、ビジネス関係のステークホルダーに説明するとき、このたとえは驚くほど役に立つでしょう。

この作品はクリエイティブ・コモンズ 表示 3.0 アメリカ合衆国ライセンスのもとに利用を許諾されています。

あなたは以下の条件に従う場合に限り、自由に

  • 共有 – 本作品を複製、頒布、展示、実演できます。
  • 再構成 – 二次的著作物を作成できます。

あなたの従うべき条件は以下の通りです。

  • 表示 – あなたは適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。