システム開発はなぜ時間がかかるのか?非エンジニアのマネージャーに伝わる説明方法
結論から言うと、システム開発に時間がかかるのは、単にコードを書く量が多いからではありません。
本当の理由は、分からないことを調べ、曖昧な要件を具体化し、変更に耐えられる設計にし、壊れていないことを確認する必要があるからです。
非エンジニアのマネージャーに説明するときは、「難しいです」「時間がかかります」だけでは伝わりません。
大切なのは、開発を次のように言い換えることです。
| よくある誤解 | 伝わりやすい説明 |
|---|---|
| 開発はコードを書く作業 | 開発は不確実性を減らす仕事 |
| 見積もりは約束 | 見積もりは天気予報に近い |
| 画面ができたら完成 | テスト・修正・リリース確認まで必要 |
| 小さな変更ならすぐ終わる | 影響範囲が広ければ確認に時間がかかる |
| AIを使えば一瞬で作れる | 下書きは速くなるが、品質確認は人間が行う |
開発の説明で目指すべきなのは、遅延の言い訳ではありません。
納期・品質・スコープ・将来の保守性のどれを優先するか、関係者が判断できる状態にすることです。
1. 開発が遅いのではなく、不確実性を減らすのに時間がかかる
システム開発は、工場のように決まった手順を繰り返す仕事とは少し違います。
もちろん、経験によって効率化できる部分はあります。しかし、新しい機能や複雑な要件では、作り始めるまで本当の難所が見えないことがあります。
たとえば、マネージャーから見ると「検索条件を1つ追加するだけ」に見える変更でも、実際には次の確認が必要になることがあります。
- データベースに必要な情報が保存されているか
- 既存の検索機能と矛盾しないか
- 表示速度が遅くならないか
- スマホ画面でも使いやすいか
- 管理者と一般ユーザーで表示条件が違わないか
- テストデータだけでなく本番データでも問題ないか
つまり、開発者が時間を使っているのは「ボタンを置くこと」だけではありません。
そのボタンを押したときに、どの条件でも安全に動くかを確認しているのです。
大規模ITプロジェクトでは、計画通りに進まないことも珍しくありません。McKinseyとOxford大学の調査では、大規模ITプロジェクトは平均で予算を45%超過し、スケジュールを7%超過し、期待価値を56%下回ると報告されています。
参考:McKinsey - Delivering large-scale IT projects on time, on budget, and on value
これは「開発者が怠けている」という意味ではありません。
システム開発は、要件・技術・ユーザー行動・外部サービス・運用条件が絡み合うため、最初の想定だけでは読み切れない領域が多いということです。
2. 見積もりは「約束」ではなく「天気予報」に近い
非エンジニアのマネージャーに最初に伝えたいのは、見積もりは締切の宣言ではなく、現時点の情報に基づく予測だということです。
天気予報を考えると分かりやすいです。
明日の天気は比較的当たりやすいですが、2週間後の天気は不確実です。新しい情報が入れば、予報は更新されます。
開発見積もりも同じです。
| 開発内容 | 見積もりやすさ |
|---|---|
| 過去に何度も作った機能 | 高い |
| 類似機能がある | 中程度 |
| 新しい技術検証が必要 | 低い |
| 要件が曖昧で関係者が多い | かなり低い |
| 外部サービスや既存システムの制約が大きい | かなり低い |
たとえば、同じ「ログイン機能」でも、以下では工数がまったく違います。
| 依頼内容 | 実際の難しさ |
|---|---|
| メールアドレスとパスワードでログインする | 比較的見積もりやすい |
| 企業ごとのSSO、権限管理、監査ログ、既存ユーザー移行も含める | 不確実性が高い |
説明するときは、こう言うと伝わりやすくなります。
「現時点の見積もりは、今分かっている情報から出した予報です。要件や技術的な前提が変われば、見積もりも更新する必要があります」
重要なのは、最初から断言しすぎないことです。
不確実な段階では「3日です」と言い切るより、次のように幅を持たせた方が信頼されます。
「既存仕様に大きな影響がなければ3日程度です。ただし、外部APIの制約が見つかった場合は5〜7日かかる可能性があります。まず半日〜1日で調査して、見積もり精度を上げます」
見積もりを外さないことよりも、見積もりの前提を明確にすることが大切です。
3. 実装方法が分からないものは、最初から正確に見積もれない
開発には、「作業」と「調査」が混ざっています。
すでに作り方が分かっているものなら、作業量を見積もれます。
しかし、まだ実装方法が分からないものは、いきなり正確な日数を出すことができません。
これは、レシピ通りに料理を作るのではなく、新しい料理を試作しながらレシピ自体を作る状態に近いです。
たとえば、次のような場合は調査が必要です。
- 外部サービスの仕様が不明
- 既存システムのデータ構造が複雑
- 過去に使ったことのない技術を使う
- パフォーマンス要件が厳しい
- セキュリティ上の確認が必要
- ユーザー数が増えたときの挙動が読めない
この段階で「いつ終わる?」と聞かれたら、無理に確定日を出すのではなく、調査フェーズを提案します。
「現時点では実装方法が2パターン考えられます。まず1日で技術検証を行い、実現可能性とリスクを確認します。その結果をもとに、全体の見積もりを更新します」
この言い方なら、「分かりません」で終わらず、次の行動が明確になります。
悪い説明は、次のようなものです。
「ちょっと難しそうなので時間がかかります」
良い説明は、次のようなものです。
「外部APIの認証仕様がまだ確認できていないため、ここを調査しないと正確な工数が出せません。まず認証方式とエラー時の挙動を確認し、その後に実装見積もりを出します」
「分からない」と言うだけでは不安を与えます。
しかし、何が分からないのか、どう確認するのか、いつ判断できるのかを伝えれば、リスク管理として受け止められやすくなります。
4. 要件定義は「最初に決めて終わり」ではない
開発が予定より長くなる大きな理由の一つが、要件の変化です。
非エンジニアのマネージャーから見ると、「最初に依頼したものを作ればいいのでは?」と思えるかもしれません。
しかし実際には、作り始めてから初めて分かることが多くあります。
たとえば、最初の要件が「学習履歴を表示できる機能」だったとします。
しかし、ユーザーに見せると次のような意見が出るかもしれません。
- 日別だけでなく週別でも見たい
- 英語、TOEIC、資格勉強で分けたい
- スマホではグラフが見づらい
- 間違えた問題だけを振り返りたい
- 友達やクラス単位で比較したい
この時点で、最初の「学習履歴を表示する」という要件は、かなり広がっています。
これは悪いことではありません。
むしろ、ユーザー検証によって本当に必要な機能に近づいている状態です。
ただし、要件が変われば、設計・実装・テストも変わります。
| 変更内容 | 影響する作業 |
|---|---|
| 表示項目を増やす | データ取得、画面設計、テスト |
| 分類機能を追加する | データ構造、入力画面、検索条件 |
| 権限を分ける | 認証、管理画面、セキュリティ確認 |
| グラフを追加する | 集計処理、表示速度、スマホ対応 |
| 通知を追加する | バックエンド処理、配信条件、停止設定 |
説明するときは、相手を責める言い方を避けましょう。
「要件が変わったので遅れます」
だけでは、対立が生まれます。
代わりに、次のように伝えると建設的です。
「今回の変更でユーザー価値は上がります。一方で、保存形式と画面表示に影響があるため、追加で2〜3日の調整が必要です。納期を優先するなら次回リリースに分けることもできます」
ポイントは、要件変更を悪者にしないことです。
要件変更は自然に起きます。大切なのは、変更によって何が増えるのかを可視化することです。
5. 仕様変更で納期が延びる本当の理由
仕様変更があると納期が延びるのは、「作業が少し増えるから」だけではありません。
多くの場合、すでに作った設計を見直す必要があるからです。
たとえば、最初は「ユーザーが自分の学習履歴だけを見られる」という仕様だったとします。
途中で「管理者が全ユーザーの履歴を見られるようにしたい」と変わった場合、単に画面を1つ追加するだけでは済みません。
確認すべきことは増えます。
- 誰がどのデータを見られるのか
- 個人情報をどこまで表示してよいのか
- 管理者権限をどう判定するのか
- 表示件数が増えても速度は問題ないか
- 誤って他人の情報が見えないか
- 監査ログを残す必要があるか
つまり、仕様変更は「追加作業」ではなく、前提条件の変更です。
マネージャーには、こう説明すると伝わりやすくなります。
「仕様変更自体は可能です。ただし、今回の変更は画面だけでなく権限とデータ取得にも影響します。安全に出すには、実装だけでなく影響範囲の確認とテストが必要です」
また、仕様変更時は選択肢を出すことが重要です。
| 選択肢 | メリット | デメリット |
|---|---|---|
| 今回のリリースに含める | ユーザー価値が上がる | 納期が延びる |
| 次回リリースに分ける | 今回の納期を守りやすい | 改善が後になる |
| 簡易版で出す | 早く試せる | 後で作り直す可能性がある |
このように示すと、話が「遅れる・遅れない」ではなく、何を優先するかに変わります。
6. 1行の修正でも時間がかかる理由
非エンジニアに最も誤解されやすいのが、「1行直すだけならすぐでは?」という感覚です。
たしかに、文言変更や色の調整だけなら短時間で終わることもあります。
しかし、1行の修正に見えても、実際には広い確認が必要な場合があります。
たとえば、以下のような変更です。
- 計算式を1か所変える
- 条件分岐を1つ追加する
- 保存時のチェックを変える
- 表示対象ユーザーを変える
- 通知の送信条件を変える
コード上の変更は1行でも、その1行が多くの処理に影響していることがあります。
| 見た目の変更 | 実際に確認すること |
|---|---|
| 文言を変える | 他画面との表現統一、翻訳、表示崩れ |
| 計算式を変える | 過去データ、丸め処理、境界値 |
| 条件を変える | 権限、例外ケース、既存ユーザーへの影響 |
| 通知条件を変える | 二重送信、未送信、停止設定 |
| 入力項目を増やす | 保存、表示、検索、CSV出力 |
伝え方の例は次の通りです。
「変更自体は小さいですが、その値を使っている画面が複数あります。修正後に別の画面で表示が崩れたり、計算結果が変わったりしないか確認する必要があります」
開発では、変更する時間よりも、壊していないことを確認する時間が長くなることがあります。
これは非効率ではなく、サービスを安定して運用するために必要な工程です。
7. 画面ができているのにリリースできない理由
マネージャーから見ると、画面が表示されているなら「もう完成では?」と思うかもしれません。
しかし、画面ができていることと、リリースできることは別です。
画面が見えていても、まだ次の確認が残っている場合があります。
- 保存処理が正しく動くか
- エラー時に適切な表示が出るか
- スマホやタブレットでも崩れないか
- 権限のないユーザーが見られないか
- 大量データでも遅くならないか
- 他の機能が壊れていないか
- 本番環境で必要な設定が完了しているか
特に本番リリースでは、「自分の環境では動いた」だけでは不十分です。
開発環境では問題なくても、本番環境ではデータ量、通信状況、権限設定、外部サービス連携が違うことがあります。
そのため、リリース前には確認作業が必要です。
説明するときは、こう伝えるとよいでしょう。
「画面上は完成に見えますが、まだ保存処理、権限、エラー時の動作、本番環境での確認が残っています。ここを省くと、ユーザーが使ったときに不具合が出るリスクがあります」
見える部分だけで判断すると、開発の終盤は「何も進んでいない」ように見えます。
しかし実際には、見えない品質を整える重要な段階です。
8. 設計・実装・テスト・レビューはすべて開発である
開発というと「コードを書く時間」だけが注目されがちです。
しかし、実際には多くの工程があります。
| 工程 | 内容 |
|---|---|
| 調査 | 実現方法、制約、既存仕様を確認する |
| 要件整理 | 何を作るか、何を作らないかを決める |
| 設計 | データ構造、画面遷移、処理の流れを決める |
| 実装 | コードを書く |
| テスト | 正常系、異常系、境界値を確認する |
| レビュー | 他の開発者が品質や安全性を確認する |
| 修正 | 指摘や不具合を直す |
| リリース | 本番環境に反映し、問題がないか確認する |
| 運用 | 問い合わせ、不具合、改善要望に対応する |
この中で、非エンジニアに見えやすいのは「実装」だけです。
しかし、品質を左右するのは設計・テスト・レビューです。
たとえば、急いで作った機能は一見動いていても、次のような問題を抱えることがあります。
- データが増えると急に遅くなる
- 少し変更するだけで別の機能が壊れる
- 担当者以外が直せない
- エラーが起きたときに原因を追えない
- セキュリティ上の穴が残る
これは、見えない部分の品質が低い状態です。
建物にたとえるなら、壁紙や照明だけでなく、配線、配管、耐震性、点検しやすさも重要です。
ソフトウェアでも同じように、見えない設計が将来の開発速度を決めます。
9. 技術的負債を無視すると、後でさらに遅くなる
「とりあえず動けばいいから早く出して」と言われることがあります。
状況によっては、それが正しい判断になることもあります。
検証用のプロトタイプや、短期間だけ使う社内ツールなら、完璧さよりスピードを優先してよい場合もあります。
ただし、本番で長く使う機能では注意が必要です。
短期的なスピードを優先しすぎると、技術的負債が増えます。
技術的負債とは、急いで作った結果、将来の修正や機能追加に余計な時間がかかる状態です。
| 短期的な判断 | 将来起きやすい問題 |
|---|---|
| テストを減らす | 本番後の不具合が増える |
| 設計を省く | 機能追加のたびに作り直しが増える |
| 例外処理を後回しにする | 想定外の入力でエラーが出る |
| ドキュメントを残さない | 担当者以外が修正できない |
| セキュリティ確認を省く | 情報漏えいや不正利用のリスクが上がる |
マネージャーには、こう伝えると理解されやすくなります。
「今回は早く出すために簡略化できます。ただし、その場合は次回以降の修正に時間がかかる可能性があります。短期の納期を優先するか、今のうちに保守しやすく作るかを選ぶ必要があります」
品質の話をするときは、「こだわり」ではなく、将来コストとして説明するのがポイントです。
10. 作って終わりではなく、不具合対応と運用が始まる
システムは、リリースした瞬間に終わりではありません。
むしろ、実際のユーザーが使い始めてから新しい問題が見つかります。
開発中にすべての使い方を想定するのは難しいからです。
- 想定外の入力をされる
- 古い端末やブラウザで表示が崩れる
- 大量アクセスで遅くなる
- 外部サービスの障害に巻き込まれる
- ユーザーが想定と違う順番で操作する
- 問い合わせによって説明不足が分かる
不具合が出ること自体は、必ずしも失敗ではありません。
ユーザーが実際に使っているからこそ、発見される問題もあります。
ただし、不具合対応を計画に入れていないと、次の開発がすぐに遅れます。
たとえば、新機能をリリースした翌週にバグ修正が3件入れば、その分だけ新しい機能開発に使える時間は減ります。
これを無視して新機能だけを積み上げると、開発チームは常に火消し状態になります。
マネージャーには、こう伝えるとよいでしょう。
「リリース日はゴールではなく、実際の利用が始まる日です。リリース後の問い合わせ、不具合修正、改善対応も開発工数として見込む必要があります」
開発計画には、実装だけでなく、テスト・修正・運用対応の余白を入れることが大切です。
11. AIを使っても開発が一瞬で終わらない理由
生成AIの普及によって、「AIを使えば開発はもっと速くなるのでは?」という期待が高まっています。
この期待は一部正しいです。
AIは、コードの下書き、エラー調査、テストケースの案、ドキュメント作成、リファクタリングの補助などに役立ちます。
一方で、AIは開発時間をゼロにするものではありません。
Stack Overflowの2024年調査では、AIツールを使う、または使う予定がある開発者は多い一方で、AI出力の正確性を信頼している人は43%にとどまると報告されています。
参考:Stack Overflow Developer Survey 2024 - AI
また、DORAの2024年レポートでは、AI導入は個人の生産性や満足度を高める一方で、ソフトウェアデリバリーの安定性やスループットに負の影響も見られるとされています。
参考:DORA 2024 Report
AIで速くなる部分と、速くならない部分を分けると分かりやすくなります。
| AIで速くなりやすいこと | 人間の確認が必要なこと |
|---|---|
| コードのたたき台作成 | 要件に合っているか |
| エラー原因の調査補助 | 既存仕様と矛盾しないか |
| テストケースの案出し | 本当に十分なテストか |
| ドキュメントの下書き | 内容が正確か |
| 簡単なサンプル作成 | 本番品質に耐えるか |
AIが出したコードは、見た目には正しそうでも、細かい条件で壊れることがあります。
そのため、AIを使うほど「レビュー」「テスト」「修正指示」が重要になります。
マネージャーには、こう説明すると現実的です。
「AIで下書きや調査は速くできます。ただし、正しく動くか、既存仕様に合うか、セキュリティ上安全かを確認する責任は人間に残ります。AIは開発を助けますが、品質保証を不要にするものではありません」
AIを使っているのに時間がかかるのは、矛盾ではありません。
むしろ、本番に入れてよい品質かを判断するために、専門家の確認が必要なのです。
12. 非エンジニアのマネージャーに伝わる説明テンプレート
開発の説明では、技術用語をそのまま伝えるより、意思決定に必要な言葉に変換することが大切です。
基本の型は次の通りです。
現状 → 分かっていること → 分かっていないこと → リスク → 選択肢 → おすすめ
たとえば、次のように使えます。
「現在、画面側の実装は進んでいます。一方で、データ保存の仕様がまだ確定していないため、ここを仮で進めると後から作り直しになる可能性があります。選択肢は2つで、納期優先なら一部機能を後回しにする、品質優先なら保存設計を先に固める方法があります。おすすめは、まず保存設計だけ今日中に決めて、実装範囲を確定することです」
状況別のフレーズも用意しておくと便利です。
| 状況 | 伝え方 |
|---|---|
| 見積もりが不確実 | 「現時点では幅を持った見積もりになります。技術検証後に精度を上げます」 |
| 要件が変わった | 「変更自体は可能ですが、影響範囲が増えるため、納期・品質・スコープの再調整が必要です」 |
| 急いでほしいと言われた | 「早めることはできます。その場合、どの機能を後回しにするか決める必要があります」 |
| テストを省きたいと言われた | 「短期的には早くなりますが、本番後の不具合対応リスクが上がります」 |
| AIでできないかと言われた | 「AIで下書きは速くできますが、正確性と安全性の確認は必要です」 |
| 進捗が見えないと言われた | 「見える画面は少ないですが、現在は設計とリスク除去を進めています」 |
| 小さな修正に時間がかかる理由を聞かれた | 「変更箇所は小さく見えますが、影響する機能が複数あるため確認が必要です」 |
特に使いやすい一文はこれです。
「可能です。ただし、早く出す場合は、スコープ・品質・将来の保守性のどれを調整するか決める必要があります」
この言い方なら、単に「できません」と拒否するのではなく、ビジネス上の選択として話せます。
13. 納期を短くしたい時に決めるべき3つのこと
開発を早くしたいとき、単に「急いでください」と言っても限界があります。
納期を短くするには、何かを調整する必要があります。
主に決めるべきなのは、次の3つです。
| 調整するもの | 内容 |
|---|---|
| スコープ | 今回作る機能を減らす |
| 品質基準 | どこまでテスト・検証するか決める |
| リリース方法 | 一度に出すか、段階的に出すか決める |
現実的には、スコープ調整が最も安全です。
たとえば、すべての機能を一度に出すのではなく、以下のように分けます。
| リリース | 内容 |
|---|---|
| 第1段階 | 最低限使える機能だけ出す |
| 第2段階 | ユーザーの反応を見て改善する |
| 第3段階 | 管理機能や自動化を追加する |
この方法なら、早くユーザーに届けつつ、後から改善できます。
マネージャーに提案するときは、こう伝えるとよいでしょう。
「予定通りに出すなら、今回は必須機能だけに絞るのが現実的です。追加機能は次回リリースに分けることで、納期と品質の両方を守りやすくなります」
開発では、すべてを同時に満たすのは難しいことがあります。
だからこそ、何を今やるか、何を後に回すかを決めることが重要です。
14. 開発側も改善できることはある
ここまで、開発に時間がかかる理由を説明してきました。
ただし、「開発は難しいから仕方ない」で終わらせるのは危険です。
開発側にも改善できることはあります。
- 見積もりの前提を明記する
- 不明点を早めに共有する
- 進捗を作業量ではなくリスクの減少で伝える
- 大きな機能を小さく分ける
- テストやレビューの工数を最初から含める
- 仕様変更時は影響範囲を表で示す
- AIを使う場合もレビュー基準を決める
- 非エンジニアにも分かる言葉で説明する
特に大切なのは、進捗報告の仕方です。
悪い報告は、次のようなものです。
「まだ実装中です」
これでは、相手は状況を判断できません。
良い報告は、次のようなものです。
「画面実装は完了しています。現在は保存処理と権限チェックを確認中です。残りのリスクは、既存データで正しく表示できるかどうかです」
このように、何が終わり、何が残り、何がリスクなのかを伝えると、信頼されやすくなります。
開発も学習も、一気に完成させるより、毎日少しずつ改善する方が現実的です。英語・TOEIC・資格・受験勉強などを学べるDailyDropsは、完全無料で利用でき、学習行動がユーザーに還元される共益型プラットフォームです。仕事で必要な知識を少しずつ積み上げる選択肢の一つとして活用できます。
15. よくある質問
Q. 開発者の見積もりが外れるのは能力不足ですか?
必ずしもそうではありません。
同じような機能を何度も作っているのに毎回大きく外れるなら改善が必要ですが、未知の技術、曖昧な要件、外部サービス連携、ユーザー検証を含む開発では見積もりがブレるのは自然です。重要なのは、見積もりの前提と不確実性を共有しているかどうかです。
Q. なぜ小さな修正なのに何日もかかるのですか?
変更箇所が小さく見えても、影響範囲が広い場合があります。
計算式、権限、保存処理、通知条件、データ表示などに関わる変更では、修正そのものよりも確認に時間がかかることがあります。
Q. 画面ができているなら、なぜリリースできないのですか?
画面が見えることと、本番で安全に使えることは別です。
保存処理、エラー処理、権限、スマホ表示、表示速度、既存機能への影響などを確認する必要があります。
Q. テストを減らせば早くリリースできますか?
短期的には早くなる可能性があります。
ただし、本番後の不具合、問い合わせ、緊急修正が増えるリスクがあります。検証用のプロトタイプならテストを軽くする判断もありますが、本番で多くのユーザーが使う機能では慎重に考えるべきです。
Q. AIを使えばエンジニアの作業は大幅に減りますか?
AIは作業の一部を効率化できます。
ただし、要件理解、設計判断、セキュリティ確認、レビュー、運用責任までは完全に代替できません。AIの出力を本番で使える品質にするには、人間の確認が必要です。
Q. 非エンジニアのマネージャーに一番伝えるべきことは何ですか?
「できる・できない」だけでなく、選択肢を出すことです。
たとえば、「予定通り出すなら機能Aを後回し」「品質を守るなら3日追加」「将来の保守性を優先するなら設計から見直す」のように、判断できる形にすると納得されやすくなります。
Q. 遅延を報告するタイミングはいつがよいですか?
遅れが確定してからではなく、遅れる可能性が見えた時点で共有するのが理想です。
早めに共有すれば、スコープ調整、優先順位変更、リリース分割などの選択肢が残ります。
16. まとめ
システム開発に時間がかかるのは、単にコードを書くのが遅いからではありません。
開発では、次のような不確実性を一つずつ減らしています。
- 何を作るべきか
- どう作れば安全か
- 既存機能に影響しないか
- ユーザーが本当に使うか
- 速度や保守性に問題がないか
- AIの出力をそのまま使ってよいか
- リリース後にどんな不具合が起きるか
非エンジニアのマネージャーに説明するときは、技術の細かさをそのまま伝えるより、リスク・選択肢・判断材料に変換することが大切です。
見積もりは天気予報に近いものです。
要件が変われば、目的地も道順も変わります。
1行の修正でも、影響範囲が広ければ確認に時間がかかります。
画面ができていても、リリース前にはテスト、権限確認、運用確認が必要です。
AIは強力な補助になりますが、品質責任まで消してくれるわけではありません。
開発の遅れを説明する目的は、言い訳をすることではありません。
相手と同じ地図を見ながら、納期・品質・スコープ・事業価値のどれを優先するかを一緒に決めることです。
最後に、説明で迷ったら次の一文を意識してみてください。
「できるか、できないか」ではなく、「何を優先すれば、どの形で実現できるか」を説明する。
この姿勢で伝えれば、開発に必要な時間は単なる遅延ではなく、価値あるシステムを作るための投資として理解されやすくなります。