1. 状況(非エンジニアからの要望)
リリース直前、事業側やPMから「テストを書く時間があるなら、その分で次の機能を作ってほしい」と言われることがあります。特に締め切りが近いときほどこの要望は強くなります。相手は怠けているわけではなく、「テストは目に見える成果を生まない作業」であり、「機能が増えること=価値が増えること」だと素朴に信じているだけです。これはむしろ自然な感覚で、エンジニア側が説明を怠ってきた結果でもあります。
ここで「テストは大事なので書きます」とだけ返すと、相手には理由が伝わらず、次の締め切りでも同じ要求が繰り返されます。大事なのは、テストを書かないことの「見えないコスト」を、相手が普段扱っている言葉に翻訳して伝えることです。
2. たとえ(日常・ビジネスの比喩)
これは「車検を通さずに走り続ける車」に似ています。車検を飛ばしても、その日のうちに事故が起きるわけではありません。むしろ整備工場に車を預けている時間がない分、今日も明日も予定通り走れます。問題は、ブレーキの摩耗やオイル漏れが「見えないところ」で進行していくことです。半年後、高速道路の合流で急ブレーキが利かず、事故を起こしてから初めて「整備しておけばよかった」と気づきます。しかもその事故の修理費は、毎回の車検費用よりずっと高くつきます。
テストも同じです。テストを書かずに機能を追加しても、今日・明日は何も壊れません。しかし3ヶ月後、別の機能を追加したときに過去の機能が静かに壊れ、それに誰も気づかないまま本番に出てしまう。発覚するのは大抵、顧客からのクレームやデータ不整合という形で、修正コストは最初にテストを書くコストの何倍にも膨らみます。
3. 提案の型(受け取り→たとえ→言い換え→段階案)
受け取り 「スケジュールを守りたいからこそ、テストより機能を優先したい」というのは合理的な発想だと思います。限られた時間をどこに使うかという判断そのものは正しいです。
たとえ ただこれは、車検を飛ばして走り続けるのに近い状態でもあります。今日は確かに早く走れますが、整備不良は目に見えないところで蓄積していって、ある日まとめて代償を払うことになります。
言い換え つまり論点は「テストをやるかやらないか」ではなく、「コストを今払うか、後で何倍にもして払うか」です。今回の判断は、将来の自分たちに借金をするかどうかの判断でもあります。
段階案 全部をテストで固める必要はありません。例えば次のような段階を提案します。
- 今回のリリースで一番壊れたら困る箇所(決済・ログイン・データ保存など)だけ最低限のテストを書く
- それ以外の画面表示や文言変更などはテストを省略してスピードを優先する
- リリース後、余裕のあるタイミングでテストを追加する「返済スプリント」を1回分あらかじめスケジュールに組み込む
これなら納期は守りつつ、重大な事故だけは防げます。
4. ミーティングで使える一文
「今回はここだけ最低限のテストを残させてください。あとの部分はスピード優先でいいので、その代わり次のスプリントで少し返済の時間をもらえますか。」
この一文は「全部やらせてほしい」でも「全部諦める」でもなく、具体的な範囲とタイミングを提示している点がポイントです。相手は「何にどれだけ時間を使うか」を判断したいだけなので、選択肢を渡すほうが通りやすくなります。
5. 例外(このたとえを使わない/肯定すべきケース)
このたとえを使うべきでないケースもあります。
- 本当に使い捨てのプロトタイプ:社内検証用や、1週間後には捨てる前提のデモコードにまでテストを求めるのは過剰です。この場合は相手の「テスト不要」の判断は正しいので、素直に同意してよいです。
- 影響範囲が極めて小さい変更:文言修正や色の変更など、ロジックを含まない変更にまで同じ主張をすると「テスト原理主義」に見え、信頼を失います。
- すでに手動確認の運用が機能しているチーム規模:数人規模で、変更のたびに人間がすべて目視確認できている場合は、テストの投資対効果がまだ低いこともあります。
こうした場面では「このたとえは今回は当てはまらないですね、スキップしましょう」と自分から言えると、逆に「テストが必要なときは本当に必要だから言っている」という説得力が増します。
6. まとめ表
| 相手の言葉 | たとえ | 返し |
|---|---|---|
| 「テストは後でいいから機能を先に」 | 車検を飛ばして走り続ける車 | 「今日は早いですが、半年後の事故修理の方が高くつきます」 |
| 「今回だけは特別に」 | 毎回の車検を1回飛ばす | 「1回なら大丈夫でも、積み重なると整備不能になります」 |
| 「バグが出たら直せばいい」 | 事故が起きてから修理工場を探す | 「事故後の修理は、事前整備の何倍もの時間とお金がかかります」 |
| 「全部テストする時間はない」 | 全部の部品を毎回点検する必要はない | 「決済やログインなど、壊れたら致命的な箇所だけ最低限やりましょう」 |
| 「スケジュールが最優先」 | 車検を先延ばしにする判断 | 「今回は時間優先でいいので、次回に“返済”の時間を確保させてください」 |
テストと機能開発は対立概念ではなく、「コストをいつ払うか」という時間軸の選択です。相手の言葉を否定せず、同じ土俵の比喩に乗せて返すことで、議論は「正しいかどうか」から「どう配分するか」に変わります。