開発にかかる工数
プロダクトの作り始めの頃はコードが少なく、影響範囲の把握は容易だが、機能を追加していくと次第にコードは膨らんでいく。テストが存在していて影響範囲を把握できればまだましではあるが、必要なだけのテストが自動化されていて存在する可能性は極めて低い。
自動化とあえて書いたのは、手動で実施するテストは実施しなくなるしメンテナンスされていかないから。
自動で検知されることが重要なのだ。
しかしここで問題なのは、テストを自動化することは往々にしてコストが高いということだ。
まだ売れるかどうかもわからないプロダクトに対して果たしてどれだけのコストを張るのか。
非常に難しい問題である。
コストをかけなければ失敗したときの傷は浅い。しかし、コストをかけたのに失敗をしたとなればその傷は非常に深い。
スタートアップ時のイニシャルコストはなるべく下げたいが、下げた結果将来の開発スピードは失われるのだ。
プロダクトが軌道に乗り始めたとき、もしくは乗り始めそうな段階で初期に支払わなかったコストを払うのが良いだろう。
後回しにすればするほど苦しくなる。
技術的負債と表現される由縁はそこにある。
借金を想像してもらうのが一番良い。借金返済を後回しにすればするほど利子とともに返済しなければならない総額は雪だるま式に増えていってしまう。
気づいたときには首が回らなくなっているのだ。
開発においてさらに苦しいのは、借金をした人間とは別の人が借金を背負うことが多いことだ。
エンジニアなら当然返済するものか?残念ながらそんなわけない。
上述した方に、考え方は借金と一緒だ。だから湧いてくる感情も同じである。
「どうして自分がそんなものを返さなければならないのか。知ったこっちゃない。」
そんな感じで最初に作られた借金は誰も返さず膨れ上がっていく。
そうして、新機能の追加は難しくなり、機能を追加・変更するたびにエラーが発生し、エラー修正には時間を要するようになる。