「このままでは開発が期日に終わらない!」
プロダクトを作っていれば誰しも経験があるはずです。そんな時、あなたならどうしますか?
選択肢(クイズ)
① 開発品質を落として開発スピードを上げる
② エンジニアを増やして開発スピードを上げる
③ エンジニアに残業させて開発スピードを上げる
④ 開発予定の機能を削減する
⑤ 期日を伸ばす
絶対的な正解はありませんが、多くの場合で ④ の「開発予定の機能を削減する」が答えです。 それぞれの選択肢について考察してみましょう。
① 開発品質を落として開発スピードを上げる
品質が低下すると、バグが多く使いづらいプロダクトになり、ユーザー満足度も下がります。さらに技術的負債が溜まって将来の拡張が難しくなり、結局スピードも遅くなります。また、低品質なプロダクトはエンジニアのモチベーションを低下させ、とくに優秀なエンジニアの離脱リスクも高まる可能性があります。
② エンジニアを増やして開発スピードを上げる
エンジニアを増やしても、開発スピードが上がるとは限りません。メンバーが増えることでコミュニケーションコストが増し、開発効率が下がります。エンジニアが2人から3人に増えても、開発効率が1.5倍にはならないのです。また、新しいエンジニアにはオンボーディングが必要なため、短期的にはむしろ効率が低下する可能性があります。
③ エンジニアに残業させて開発スピードを上げる
エンジニアは一日に長時間集中してコードを書くことはできず、長時間労働によって作られるプロダクトの品質が下がります。さらに、長時間労働は燃え尽き症候群を引き起こします。私の経験でも、リリース前の追い込み期間にエンジニア全員が残業してプロダクトを完成させ、期日に間に合わせたチームがありました。しかし、その後、チームの大半が退社してしまったのです。期日に間に合わせる代償に、優秀なエンジニアを失ってもよいのですか?
④ 開発予定の機能を削減する
リリースが期日に間に合わないと分かったら、優先度の低い、つまりユーザーへの価値が相対的に低い機能を、リリースに含める機能群(スコープと呼びます)から外します。ステークホルダーと良好な関係のもとで話し合いを行い、スコープを再検討して、期日通りにリリースできるようにします。このアプローチは、チームの負担を減らし、ステークホルダーからの信頼を失うこともありません。
⑤ 期日を伸ばす
リリース期日を延ばすことはビジネス上の都合で難しく、仮に延長できても、開発期間が長くなることで失敗時のリスクが増加します。過去に携わったプロジェクトでは、期日を何度も延ばしてようやくリリースに至ったものの、プロダクトがヒットせず大きな損失を出した経験があります。
まとめ
④ の「開発予定の機能を削減する」以外の選択肢は、いずれも大きなデメリットがありますね。 ステークホルダーと良好な関係を築いて、リリースに含める機能群(スコープ)を柔軟に調整可能にしておくことが、プロダクト開発ではとても大切です。