ウォーターフォール・アジャイル以外の第三の道

cassetteの延澤です。 今回は「ウォーターフォールアジャイル以外の第三の道」について書いていきたいと考えてます。ウォーターフォールアジャイルのメリデメを簡単に紹介して、最後に私の考えを載せております。
ここでアジャイルについて言及してますが、本来のアジャイルとは違う私の経験ベースの内容に一部なっております。なので、アジャイル自身について知りたい方は別の記事を参考にした方が良いです。

スタートアップにアジャイルが都合が良かったわけ

私が大手企業からスタートアップに行って驚いたのは、あまりドキュメントを残さないことでした。開発における仕様書は、デザインとこうやりたい企画書レベルのドキュメントのみ。最悪、企画書さえもなく口頭で伝えられることも多いです。そのため、開発者は以下の能力を求められることが多かったです。

  1. 自分で仕様を考え、それを納得させる力
  2. 素早くコードを書ける力
  3. テストコードが書ける

自分で仕様を考え、それを納得させる力

開発のスピードで一番重要なのは手戻りを少なくすることです。ウォーターフォールアジャイル問わずそこは同じです。しかし、アプローチが違います。ウォーターフォールでは要件定義に重きを置きます。つまり、開発着手前に決めるべきことは決めることが一番の肝になります。反対にアジャイルでは開発着手前に細部まで詰めません。細部に関しては開発者がよしなに開発をします。えっそれでいいの?と思われるかもしれませんが開発者自身が仕様をコントロール出来る権限があるためそれが実現できます。もし、仮に権限がなかったとしてもそれを認めさせるように行動するべきです。こう考えると最終的な権限がない受託開発の場合アジャイルでやることが根本的に難しくなります。逆に事業会社であるスタートアップではこのやり方がコミュニケーションコストも含めてコストを下げるベストな形になります。
ここではやるべきことを精確にやるのが得意な人よりも、自分で提案してどんどん進めるのが得意な人の方が相性良いです。

素早くコードを書ける力

とにかく素早く仮説検証し実装していくためスタートアップでは素早く機能を作れることが重要です。何故、Ruby on Railsというフレームワークがスタートアップと相性が良いのかはそれが理由です。素早く生産性が高いため採用されているのです。(情報が多いなどの理由もあります。ただ、個人的にRailsはあまり好きなフレームワークではないです。。)
そもそも開発者が仕様を考えるぐらいですから、ある意味適当に作れるぐらいが丁度良いのです。仕様通りじゃなくて本当にいいのかという疑問も勿論あります。ただ、事業の目的は仕様通りに作ることではありません。ユーザーに価値を届けることが目的だからです。仕様通りにバグがない精確なシステムだったとしても、使いにくければ誰も使いません。

テストコードが書ける

時間も人がいないスタートアップでもテストコードはしっかり書いてあるケースは多いです。何故、時間も人もいないのに書くのか?
それはテストコードがドキュメントの代わりだからです。スタートアップだとしても仕様は複雑だったりします。また、仕様に詳しい人も多くなく、その人自身も忙しいです。そのため、新しく来る人は手探りの状態で開発を行います。ここでテストコードが威力を発揮します。追加したコードによってテストが落ちることで以前の仕様と整合性を保ちながら開発が出来るのです。

ウォーターフォールアジャイルの限界

ウォーターフォールの限界の一つとして即ち事前に全てドキュメントに落とすこと、ドキュメントを常に最新状態に保つことが難しいです。そこで、色々とルールを決めたりダブルチェック・レビュー会などの人海戦術で乗り切ろうとしますが非効率であることは否めません。
ではアジャイルにも全く問題がないかと言えばそうではありません。現実的に全ての仕様をテストコードに落とし込むのは容易ではありません。例えば、E2Eテストを全てに適応しようとすると今度はテストコードの保守コストが高くつきます。また、今後のFintechやIOTなどのミッションクリティカルなサービスやバージョンアップが難しいサービスに対して今まで通りのスタートアップのアジャイルのやり方が正しいのかは疑問が残るところです。

解決策

ここからは私自身の考えです。ウォーターフォールアジャイルというようにどのように開発を効率良くするかというよりも、そもそも発想を変えて開発する範囲を狭めていけば良いのではないかと考えてます。例えば、画像配信のCloudinaryや認証のAWS Cognitoなどの外部サービスを活用するのです。本当に必要なビジネスロジックの開発は行い、セキュリティリスクが高く保守コストが高いものは外部化するのです。メリットは以下です。

  • 少ない人数で高速に開発できるようになる
  • テスト範囲を切り分けできる
  • セキュリティを専門化に委託することができる

エンジニアの人数が多ければ必然的に管理することは難しくなります。また、現在のエンジニア不足の問題もある程度解決できます。次にテスト範囲でもテストコードで担保が難しいシステムテストの範囲を狭めることが出来ます。セキュリティに関しても、今後は専門のサービスに任せる方がセキュリティエンジニアを沢山雇うよりもコストが低く、結果的にセキュリティも高まると考えてます。
ウォーターフォールアジャイルをどちらを選択するのかは、ビジネスモデルにも影響されるため結論は出ません。ただ、ビジネスのコアとは関係ないシステムは外部に放出してコアとなる箇所に力を注ぐべきだと考えてます。
そうすればウォーターフォールアジャイルのいいとこ取りも実現できるのではないかと考えてます。

補足

何故、スタートアップは急激な成長を求めるのかという疑問はありませんか?
そもそも、しっかりシステムを作ればいいじゃないのかと指摘もあります。でも、働いて思ったのですがこれ難しいんです。
まずスタートアップで働く人は定年まで働こうなんて誰も考えていないんですよ。じゃあ、何を求めているのかというと事業やその人自身のスキルも含めての急激な成長です。その中で成長に伴わない技術選択や施策を実行する決断が難しいし、それで人は中々ついてこれないのです。
ただ、モラルを著しく欠いたシステム開発は大手・スタートアップ問わず止めるべきなのは事実です。