AIを使っているのに、思ったほど開発が速くない
コーディングはもうAIにすべて任せています。
実装そのものは間違いなく速くなりました。コードレビューもAIに任せています。
人間がコードを書き、人間がレビューしていた頃と比較すれば、個々の作業は段違いに速いです。
それなのに最近、少し違和感があります。
思っていたほど、プロダクト開発全体は速くなっていません。
例えば1つのIssueに注目すると、
Issue
↓
AIが実装
↓
AIがレビュー
↓
テスト・検証
↓
人間が最終確認
↓
必要なら修正
↓
Issue Close
という流れになり、結局クローズまで半日程度かかることがあります。
もちろん、すべてを人間がやっていた頃よりは圧倒的に速いです。
ただ、AIを使うことが当たり前になった今、AIを使っていなかった頃より速いという比較をしてもあまり意味がありません。
AIを使う前提で、なぜ思ったほど開発全体が速くならないのかを考えるようになりました。
AIが何時間動いたかは、それほど重要ではない
AIにIssueを任せていると、「これに2時間も使ったの?」と思うことがあります。
最終的なdiffを見ると、変更は数十行だけということもあります。
しかし、これはあまり重要ではないのかもしれません。
AIが2時間動いていても、その間に人間が別の仕事をできているなら問題ありません。
極端に言えば、
AI稼働時間: 4時間
人間の対応: 10分
でもよいわけです。
AIの稼働時間と人間の工数は分けて考える必要があります。
そう考えると、次の発想が出てきます。
AIを待っている間に、別のIssueを進めればよいのではないか。
複数のIssueを並列に流せば爆速になる?
AIエージェントを複数動かせるなら、例えば次のように仕事を流せます。
Issue A AI実装 ─────→ AIレビュー ─────→ 完了
Issue B AI実装 ─────→ AIレビュー ─────→ 完了
Issue C AI実装 ─────→ AIレビュー ─────→ 完了
これは間違いなく効率的です。
1つのIssueに2時間かかっていても、3つを同時に処理できればスループットは大きく上がります。
AI時代の開発効率とは、
1 Issueを何分で終わらせるか
ではなく、
どれだけ並列化できるか
なのではないかと思います。
ところが、実際のプロダクト開発を考えると、ここでも問題があります。
すべてのIssueを並列に処理できるわけではありません。
実際の開発は、思ったより直列です
例えば、ある機能を作るとします。
データモデルを決める
↓
APIを実装する
↓
画面から接続する
↓
実際に動かしてみる
↓
問題が見つかる
↓
仕様を調整する
↓
修正する
この工程をエージェントを7個起動して、一斉に処理することはできません。
前工程の結果が決まらなければ、次の工程を確定できないからです。
もちろん、設計を工夫して独立性を高めたり、インタフェースを先に決めたりすることで並列化できる仕事はあります。
それでも、実際の開発にはどうしても前後関係が残ります。
また、実際に動かしたり、ユーザーに使ってもらったりして、初めて次の仕事が決まることもあります。
「実装 → フィードバック → 改善」という工程を、すべて同時に進めることはできません。
つまり、エージェントを大量に用意できるようになっても、プロダクト開発の並列化には限界があります。
人間の工数が減ることと、開発期間が縮むことは別
ここは、AI時代の開発見積もりを考える上でも重要だと思っています。
例えば、3つのIssueがあったとします。
Issue A: AI 3時間 / Human 10分
Issue B: AI 2時間 / Human 15分
Issue C: AI 4時間 / Human 10分
人間が実際に使う時間は合計35分です。人間の工数という意味では、かなり効率化されています。
しかし、この3つが、
Issue A → Issue B → Issue C
という依存関係だったらどうでしょうか。人間の実作業が35分しかなくても、完成までには約9時間の経過時間が必要です。
つまり、
AIによって人間の工数が1/10になったからといって、開発期間も1/10になるわけではありません。
ここを混同すると、
AIならこの規模のアプリも数日で作れるのでは?
という見積もりになりやすいのだと思います。
ここまで考えて、AI時代の特別な話ではないことに気付きました。
例えば、
工程A → 工程B → 工程C → 検査
という生産ラインで、工程Bだけ10倍速くしても、工程Cや検査がボトルネックなら全体は10倍にはなりません。
AIコーディングも同じです。実装やレビューといった工程の処理能力が上がると、ボトルネックは仕様決定、検証、統合、フィードバックなど別の工程へ移ります。
実装をさらに速くすることが、必ずしも開発全体を速くすることにはなりません。
AI時代の見積もりでは「工数」と「期間」を分けたい
「1人月相当の実装を数日で処理できる」ことと、「1か月かかっていたプロダクトを数日で完成できる」ことは別です。
見積もりでは、人間の工数、並列化できる範囲、クリティカルパス上のリードタイムを分けて考える必要があると感じています。
おわりに
実装速度だけではなく、開発ライン全体を見る 結局ここに戻ってきました。