ブログ

エンジニアリングドキュメントが、エンジニアが考える以上に重要である理由


ほとんどの開発チームは、ドキュメント作成に対して複雑な感情を抱いています。その重要性には誰もが同意しますが、優先する人はほとんどいません。リリースすべき機能のバックログは、文書化すべき決定事項のバックログよりも常に緊急性が高く感じられます。その結果、コードベースは着実に成長する一方で、なぜそのように構築されたのかという理解は同じように着実に失われていきます。

これは怠慢ではありません。コードをリリースすることに報い、それについて書くことには報いないインセンティブ構造に対する合理的な反応です。しかし、不十分なドキュメント作成がもたらす下流工程へのコストは現実的かつ測定可能であり、ほとんどのチームが認識しているよりもはるかに大きいです。そして、放置される期間が長くなるほど、対処が困難な形でその悪影響は蓄積されていきます。


ドキュメントの4つの役割

開発ドキュメントには4つの異なる機能がありますが、ほとんどのチームはそのうちの1つしか意識していません。

エラーの削減。アーキテクチャの決定背景が文書化されていれば、後からそのシステムに触れるエンジニアは、なぜそのように構築されたのか、どのような制約を尊重すべきなのかを理解できます。その文脈(コンテキスト)がないと、単体で見れば合理的だが、オリジナルの作成者が前提としていた条件を壊してしまうような変更を加えてしまいます。その結果、構文的なエラーではなく概念的な不整合であるため、診断が困難なバグが発生します。コードは正常に動作しますが、単に意図とは異なる動きをします。

意思決定のドキュメント、つまり特定の設計アプローチを選択した理由や代替案の検討記録こそ、多くのチームに欠けているレイヤーです。コードコメントはコードが何をするかを説明します。意思決定ドキュメントは、なぜ別の形ではなくこの形で存在するのかを説明します。この「なぜ(理由)」がないと、アーキテクチャの決定事項は、それに直面する新しいエンジニアによってその都度議論が蒸し返されることになります。

オンボーディングの迅速化。十分にドキュメント化されたチームに加わる新しいエンジニアは、ドキュメントを読むことで状況を把握できます。彼らは、コードを1行も書く前に、システムアーキテクチャ、重要な決定事項、規約、そしてアクティブなプロジェクトの現在の状況を理解できます。一方で、ドキュメントが不十分なチームに加わった新しいエンジニアは、会話を通じてこれらすべてを再構築しなければならず、これは本来開発を進めているはずの人々の作業を中断させることを意味します。

立ち上がりに要する時間の差は、通常、数日ではなく数週間に及びます。その数週間のコストは、新入社員の生産性の低い期間の給与と、シニアエンジニアの中断された生産性の双方で測定されます。

組織知の保存。人は離職します。チームを異動したり、会社を辞めたり、育児休暇に入ったり、コードに触れなくなるような役職に昇進したりします。人が去るたびに知識も一緒に失われますが、失われる知識は通常、最も価値のある種類、すなわち経緯、意思決定の背景、なぜその状態になっているのかという歴史です。

ドキュメントとは、個人の知識を組織の知識に変換するための仕組みであり、これを学んだ人が去った後でも組織に学習内容をとどめておくことができます。ドキュメントがない場合、組織はすでに知っていたはずの事柄を永久に再学習し続けることになり、これは開発における最も高コストな無駄の一つとなります。

AIツールの有効活用。これは最近登場した機能であり、将来的には最も重要になる可能性があります。コードアシスタントから社内エージェント、そしてドキュメントの自動生成システムに至るまで、開発ワークフローにおけるすべてのAIツールは、コンテキスト(文脈)が多いほど高いパフォーマンスを発揮します。もし開発の知識がSlackのスレッドや個人の頭の中にしか存在しない場合、AIツールはそれにアクセスできません。ドキュメントは、AIを一般的な能力を持つツールから、特定の組織独自の文脈で役立つツールへと進化させるものです。


なぜドキュメントは機能開発に負け続けるのか

ドキュメントの重要性を理解していても、なぜそれが作成されないのかは説明できません。その答えは文化的なものではなく、構造的なものです。

ドキュメントは拡散的で長期的な価値(次の四半期のバグ削減、次の新入社員の迅速なオンボーディング、次の離職時の知識保存)を生み出すのに対し、機能のリリースは集中型で即時的な価値(顧客の要望の充足、収益の確保、ステークホルダーの満足)を生み出します。緊急性と可視性を重視するあらゆる優先順位付けフレームワークにおいて、機能開発は常に勝利します。なぜなら、ドキュメント不足のコストは、具体的で追跡可能な問題を引き起こすまで目に見えないからです。そしてその問題が起きる頃には、ドキュメントを作成しないと決めた時点から何ヶ月も経っています。

また、エンジニアはドキュメントが陳腐化することも正確に理解しています。ドキュメントのパラドックスとは、ドキュメントが作成された後にマージされるすべてのプルリクエストが、そのドキュメントの正確性を少しずつ損なっていくことです。数週間以内に古くなると分かっているドキュメントを書くことは、無駄な取り組みのように感じられます。手動で維持されるドキュメントにとっては、実際にその通りです。

だからこそ、ドキュメント問題の解決策はモチベーションの向上ではなく、仕組み(アーキテクチャ)の導入なのです。エンジニアに「もっとドキュメントを書こう」と呼びかけるだけでは機能しません。インセンティブ構造がそれに反しているからです。すでに発生している開発活動(プルリクエスト、Slackでの会話、ミーティング、コミット)からドキュメントを自動的に生成し、維持することで、エンジニアをドキュメント作成のループから完全に解放すれば、その経済性は完全に変化します。ドキュメントはソースから作成されるため、手動で維持しなくても常に最新の状態に保たれます。


ドキュメント不作成によるコストの累積

不十分なドキュメントによるコストは、ドキュメントの技術負債が蓄積するのと同じように累積していきます。それは静かに、累積的に、そしてほとんどのチームが予想するよりも速く進行します。

5人のチームでは、全員がすべてを把握しています。システム全体が数人の頭の中に収まり、コミュニティが小さいため暗黙知が機能します。10人になると、ギャップが生じ始めます。20人になると、そのギャップによって目に見えて進捗が遅くなります。50人になると、この暗黙知のボトルネックがリリース速度を制限する主要な要因の一つになります。なぜなら、コンテキストを必要とするすべての決定において、文書化されなかったコンテキストを再構築するためにミーティングやSlackスレッドが必要になるからです。

早い段階でドキュメント作成に投資したチームが、それを後悔することはほとんどありません。痛みが深刻になるまで後回しにしたチームは、大規模で複雑なシステムを遡及的に文書化するコストが、構築と同時に文書化するコストよりもはるかに高いことに気付きます。技術的負債と同じように、ドキュメントの負債も修正するより予防する方がはるかに安上がりです。


よくある質問

まず何を文書化すべきですか?アーキテクチャの決定事項、システムの境界、そしてオンボーディングガイドです。これらは、アーキテクチャの誤解によるエラー、遅いオンボーディング、離職時の知識損失といった最も深刻な問題に対処するため、最も高いレバレッジ効果を持ちます。

どうすればエンジニアにドキュメントを書いてもらえますか?理想的なのは、書かせないことです。最も持続可能なアプローチは、すでに行われている開発アクティビティから自動的に生成されるドキュメントです。それが不可能な場合は、明示的に時間を割き(ドキュメントスプリントやドキュメントデーなど)、レビューにおいてドキュメントの品質を可視化します。

コード内のドキュメント(コメント、README)だけで十分ですか?コードドキュメントは、コードが何をしているかを説明します。なぜそのように構築されたのか、どのような代替案が検討されたのか、あるいは異なるシステム同士がどのように関連しているのかは説明しません。両方のレイヤーが必要ですが、通常欠けているのは意思決定とアーキテクチャのレイヤーです。


関連記事:開発ドキュメント執筆のコスト、ドキュメントの技術負債、エンジニアがドキュメント作成を嫌う理由、ドキュメント自動生成の解説。 関連ページ:セルフライティングドキュメント、エンジニアリングチーム向け、ナレッジの保持。

The workspace that thinks with you.

Ready when you are.

The workspace that thinks with you.

Ready when you are.

The workspace that thinks with you.

Ready when you are.