ドキュメントについてつらつらと考えたこと
はじめに エンジニアリングをする中で「時間を取って後でドキュメントを書こう」と思う瞬間がある。 これは自分もたまにやってしまうことで、特にゾーンに入っている場合だったり、ガッと実装してしまったほうが早い場合だったりに起きているように思う。 しかしながら当然、ドキュメントを書かないことによる弊害というのも存在することは明白で、短期的に見るとスピードが出るのは間違いないのだが、長期的(と言っても状況によっては1ヶ月、2ヶ月と全然遠くない未来だったりする)に見て様々な問題が発生する。 ドキュメントがないことに対する弊害 例えば新機能の開発について考えてみる。 ドキュメントを整備しないまま実装した場合、実装した瞬間から「動いているものが正しい」状態になってしまう。仮にリリース前に仕様変更があった場合、ドキュメントがないと動いているものから仕様を読み解き、修正する必要があるかもしれない。 例として契約プランと契約年数で割引率が変わるロジックに手を加える場合、マトリクス表を一個書いておけば仕様把握は一瞬ででき、「パターンBをB'に変えたいんです」といった話がスムーズに行えるだろう。 だがマトリクス表がない場合はどうだろうか?どういう条件で分岐しているかコードリーディングした上でまとめ、どこをどうするか検討する必要が出てくるかもしれない。 この場合のコストは実装時にドキュメントを書くよりも工数が発生するように思うのは僕だけだろうか。 例えば新メンバーが加入した場合について考えてみる。 ドキュメントがないままオンボーディングするとなると毎回アーキテクチャやデータベース、システム構成について図を使って説明する必要があるだろう。 既存の仕様についても同様で、コードリーディングするかテストコードから挙動を追う必要があるかもしれない。 この辺りのキャッチアップは非常に時間がかかるもので、サービスが成長すればするほど、ドキュメントがない場合の工数は指数関数的に増えていくと思っている。 あるいはドメイン知識が浅いままに既存機能の修正を行った場合、考慮漏れが検知できず思わぬエンバグにつながるおそれもある(それを回避するためにコードレビューがあるが、コードレビューも万能ではないので)。 例えば既存機能の修正について考えてみる。 言わずもがなだが、ここがドキュメントがない弊害が一番大きく出る