皆さん、こんにちは!フリーランスエンジニアの城間です。
僕は新卒で大手SIerに入社し、約8年間、数千人規模の基幹システム開発に携わってきました。その後、独立してからはスタートアップ企業を中心に、少人数のチームでプロダクト開発を進めています。
この異なる二つの世界を経験してきて、それぞれの開発現場の文化、スピード感、そしてエンジニアに求められるスキルに大きな違いがあることを痛感しています。今日は、僕が実際に見てきた大規模開発と爆速開発の「真実」を、皆さんにお伝えしたいと思います。
第1ラウンド:要件定義の泥沼 vs. 仮説検証の荒野
SIerの大規模開発では、プロジェクトの初期フェーズに完璧な要件定義を目指します。数百ページにわたる要件定義書を作り込み、あらゆるパターンを想定し、関係者全員の合意を得るまで、幾度となくレビューと修正を繰り返します。
まるで、地図と羅針盤を完璧に揃えてから、巨大な船で大海原に出るような感覚です。綿密な計画がある安心感はありますが、その一方で、実際に開発が始まる頃には市場のニーズが変化している、なんてことも珍しくありません。
一方、スタートアップの爆速開発では、要件は**「仮説」として捉えられます。「まずは動くものを作ってユーザーの反応を見よう!」というスタンスが基本。要件が固まりきっていない状況でも、柔軟に仕様変更に対応し、「作って、測って、学ぶ」**を高速で繰り返します。
まるで、ジャングルを切り開きながら、最適な道を探す探検隊のよう。不確実性は高いですが、ユーザーの声をダイレクトに反映できるため、市場にフィットしたプロダクトを素早く生み出すことができます。
第2ラウンド:超分業制のスペシャリスト vs. フルスタックのジェネラリスト
SIerの現場では、役割が細かく分業されています。要件定義担当、設計担当、開発担当(さらにバックエンド、フロントエンド、DBなど)、テスト担当、インフラ担当…と、それぞれの領域のスペシャリストが連携してプロジェクトを進めます。
自分の専門領域に深く集中できる一方で、隣の工程の進捗が見えにくかったり、部門間の調整に時間がかかったりする側面もあります。
対照的に、スタートアップでは、少人数のチームで開発を進めるため、一人のエンジニアがフルスタックに近いスキルを求められることが多いです。バックエンドもフロントエンドも、インフラもデータベースも、時には要件定義やテストも。僕自身も、AWSのインフラ構築からPythonでのAPI開発、Vue.jsでのフロントエンドまで、幅広く担当することがほとんどです。
大変ですが、プロダクト全体を見通せるため、開発のスピード感が格段に上がりますし、自身のスキルセットも飛躍的に広がる面白さがあります。
第3ラウンド:石橋を叩いて渡る安定性 vs. 荒波を乗りこなすスピード
大規模開発では、システムの安定性や堅牢性が最優先されます。何千人、何万人ものユーザーが利用する基幹システムでは、小さなバグ一つが甚大な影響を及ぼす可能性があります。そのため、入念なテストと品質管理、厳格なリリースプロセスが必須です。
「石橋を叩いて渡る」という言葉がぴったりな、安定志向の開発です。
これに対し、スタートアップでは、何よりもスピードが重視されます。市場の機会を逃さないため、アジャイルな手法で素早くプロトタイプをリリースし、改善を重ねていきます。時には、多少の技術的負債を抱えながらも、まずは「動くもの」を世に出すことを優先します。
荒波を乗りこなし、いち早く目的地にたどり着くために、多少の揺れは覚悟の上、といったスピード重視の開発スタイルです。
最後に:どちらの経験も、僕の血肉
全く異なる開発スタイルですが、どちらの経験も今の僕にとってかけがえのない財産です。
SIerでの大規模開発で培った**「計画性」「品質意識」「多様なステークホルダーとの調整力」は、スタートアップでの開発においても、プロダクトの持続的な成長を考える上で非常に重要です。
そして、スタートアップでの「仮説検証」「高速なPDCA」「変化への柔軟な対応力」**は、SIer時代には得られなかった、ビジネスを加速させるための開発視点を僕にもたらしてくれました。
もし、この記事を読んで、ご自身の開発スタイルを見つめ直すきっかけになったり、「こんな開発の話をもう少し聞いてみたい」と思っていただけたら嬉しいです。