tomoima525's blog

Androidとか技術とかその他気になったことを書いているブログ。世界の秘密はカレーの中にある!サンフランシスコから発信中。

柔軟に開発チームを拡張する ~スタッフ・オーグメンテーションの知見~

ベイエリアにある今のスタートアップに入っておよそ一年ちょっとが経過しました。入社してから開発の他に採用やチーム作り、プロジェクトの推進などに力を入れて取り組んでます。今回は UI 改善や短期的なプロジェクトを回すために、スタッフ・オーグメンテーション(Staff Augmentation) を導入した話を書きます。

シリコンバレーで開発チームを作る課題

我々のスタートアップはサンフランシスコに本社があります。サンフランシスコおよびベイエリアでスタートアップをやる大きなメリットとして、この地が最新の技術や社会の源流となっており、それにいち早く触れられるというメリットがあります。もう一つのメリットとして、優秀な人材が集まってくる(tech hub といいます)というのがあるのですが、実はこれが小さなスタートアップが開発チームを作ることにとって落とし穴になっています。課題は大きく 2 つあります。

課題 1: 採用コストが高い

この地区に住むエンジニアの給与は非常に高いです。平均で $100k(1 千万円)以上の年俸に加えてストック・オプション、保険、フリーランチなどの福利厚生が基準となっています。

スタートアップにとってこのコストは馬鹿になりません。候補者はもちろん優秀な人が多いのですが、慎重にならざるを得ない現状があります。

課題 2: 採用難易度が高い

もう一つこの地のスタートアップにとって苦しいのは、並みいるテックカンパニーが採用のライバルとして立ちはだかっていることです。やはり現実的な問題として、不安定なスタートアップでリスクを取るよりは、ある程度安定したテックカンパニーで高い給与をもらう方が良いという人が多いです。

そんなわけでこの地で居を構えるスタートアップはリモートチームを持っているケースが多いです。各地にメンバーがいるケースや、給与水準が低めの地域にハブオフィスを作りそこにエンジニアを集約するケースがあります。国もアメリカ国内に限らず、時差がほぼないカナダやブラジルなどにチームを持っている会社もよく見ます。

蛇足ですが、最近よくあるのが、創業者の出身国で開発チームを作るケースです。有名なところだとビデオチャットの Zoom は中国に大規模な開発チームがあります。

www.cnbc.com

我々の会社も多分にもれず、日本に開発チームがあります。バブオフィスは東京にありますが、メンバーは日本各地からリモートで勤務しています。

スタッフ・オーグメンテーション とは

スタッフ・オーグメンテーション とは、開発アウトソーシング会社(Dev shop といいます)から雇った人にチームの一員として働いてもらう業務形態です。

いわゆる通常のアウトソーシングと異なる点は、プロジェクトマネジメントは採用側で行うところです。雇ったエンジニアもフルタイムエンジニアと同様にプロダクトマネジャーと機能の実装について議論し、チームでコミュニケーションをとりながら開発を進めます。一方で雇用契約やピープルマネジメントは Dev shop 側がハンドリングします。

poviolabs.com

メリットをあげると、

  • コストが安い
    • ヨーロッパ、アジア圏は米国よりはるかに人件費が安いです。また、他の社員による教育などの育成コストもかからない点も大きなメリットだと思います。
  • 必要な人材を必要なタイミングで雇える
    • スタートアップのようなイテレーションを激しく回す環境の場合、専門性の高いタスクや誰でもできるけど量が多いタスクなどで、この期間だけサポートがほしいというケースがしばしばあります。そういうときにさっと人をアサインできるのはスタートアップにとっては魅力的です。
  • 開発にフォーカスできる
    • 時間と労力がかかるメンバーのマネジメントも Dev Shop に任せられるので開発にフォーカスできます。

もちろん導入には配慮すべきことも沢山あり、それは後述の知見で書きます。ベイエリアではリモートでの スタッフ・オーグメンテーション がかなり普及していて、多くのスタートアップが導入しています。

導入ケース

我々の会社ではふたつの導入ケースがあります。

ケース1.ベトナム、フルタイム、UI改善

ひとつは細かいバグ修正やUI改善を継続的に実施するため、知人にアウトソーシング会社を紹介してもらい、リモートでベトナムのエンジニアを1名フルタイムで採用しました。

当初、先方からはアウトソーシング形態での提案をされましたが、それだと深い連携ができない&進捗が見えにくいことからスタッフ・オーグメンテーション形態を依頼しました。採用にあたっては、こちらの要望に基づいて複数名のエンジニアのレジュメを送付してもらい、その中から数名を選択して通常の採用フローと同じように技術面接を実施しています。

我々の会社は当時2週間サイクルのスプリントを回していましたが、このエンジニアとは独立したタスクボードをJIRA上に作成し、カンバン方式でプロジェクトを進めました。バグ修正やUI改善は開発スケジュールに合わせる必要のないタスクが多く、カンバンの方が優先度を柔軟に変更できるからです。その代わりバーンレートを確認するために、各タスクにはポイント見積もりを行い、月次での目標消化ポイント数を設定しました。

プロジェクトのマネジメントについては、プロダクトの仕様はプロダクトオーナーが、技術観点については自分がコンタクトポイントとなり、必要に応じてSlackやZoomコールなどで他のエンジニアの支援を受けられるような体制にしました。

開発プロセスに関しては、社内のエンジニアとほぼ同様です。

  • 毎日のスタンドアップ(ベトナムの早朝、USの夕方)にて進捗共有と実装に関する相談、ブロッカーについて10-30分ほど話し合う
  • タスクアサイメントについては毎週プロダクトオーナーと自分ですり合わせを行い優先度を設定した上でカンバンに積む
  • コードレビューはフロントエンドチームで実施し、マージ、デプロイ後プロダクトオーナーによるレビューを経て完了

およそ半年で100以上あったUI関連タスクやバグ修正が一掃され、契約を完了しました。

ケース2.ボスニア・ヘルツェゴビナ、20時間/週、Android版開発支援

もうひとつのケースでは、サンフランシスコの Dev Shop 経由でボスニア・ヘルツェゴビナAndroidエンジニアを週20時間、2ヶ月の短期で採用しました。我々のアプリはクロスプラットフォーム開発ができるReact Native製ですが、コア機能である撮影機能や写真加工機能はカスタム実装しており、プラットフォームごとの開発が別途必要です。我々のAndroid版アプリは2019年12月頃より開始し、その計画と見積もりに対して足りていない開発リソースを補うためにスタッフ・オーグメンテーションを利用しました。

ちなみにできたてほやほやのAndroid版アプリはこちら!

play.google.com

このケースではスケジュールがある程度決まっていたため、チームの同じボード上でタスクを管理しました。ただしコミュニケーションはAndroid版の開発を社内で行っている自分だけに限定し、他のチームメンバーのリソースを利用しないよう配慮しました。

今回は専門性の高いエンジニアを採用したので、設計に関する踏み込んだ議論はもちろんのこと、技術検証、コードの改善を提案してもらいました。一人で開発するよりも効率よく無駄のない開発が進められたと思います。

期間中、Dev Shopからは1週間に一度開発者の評価や改善点について確認の連絡が来ました。

余談ですが、アメリカ西海岸でスタッフ・オーグメンテーションを行う場合、時差の少ないブラジル、カナダのエンジニアを採用することが多いようです。その点東欧のエンジニアは半日以上の時差があるため、お互いにスケジュールの調整が必須ですが、優秀なエンジニアの採用難易度は低いです。英語に関しても全く問題ありませんでした。

スタッフ・オーグメンテーションでリモート開発するための知見

ここではスタッフ・オーグメンテーションをしながらやってよかったことや気をつけるべきことについて述べていきます。

面接は技術と働き方へのスタンスをみる

通常の採用では会社とのカルチャーマッチングが重要な判断要素となりますが、前述のとおりその考慮は不要です。しかし、その人の働き方や勤務態度については面接時に注意したほうがよいです。例えば我々のチームではプロジェクトの前進を重視しているので、逐次状況を共有してくれることを期待します。

実は上の2ケース以外にも技術力重視でエンジニアを採用したのですが、スタンドアップを欠席したり、進捗が明確に共有されなかったりということがあり、早期で解約しました。

タスクの結合度を見極めてアサインする

チームの状況を把握しきっているわけではない外部エンジニアにタスクを効率よくこなしてもらうためには、タスクの依存関係を減らすことは重要です。

例えばUI改善タスクのアサイメントで最も意識したことは"このタスクはバックエンドの修正が必要か?"でした。バックエンドチームとコミュニケーションが発生しそうな仕様変更の場合は事前にその部分をこちらで対応してから依頼するようにし、"誰に確認したらよい?"といったコミュニケーションのコストを事前に減らしました。

キャッチアップコストを減らす仕組みをつくる

スタッフ・オーグメンテーションでは教育コストがないぶん、多少の未対応技術は自前でキャッチアップしてもらう必要があります。とはいえいきなり丸投げするのも双方にとってメリットがないです。なので最低限の開発環境や利用技術についてキャッチアップするためのテンプレートなどを用意しておくと良いです。

例えば Androidエンジニアの場合、React Nativeは未経験で、そこはこちらでフォローする前提でしたが、事前に一通りのドキュメントやサンプルコードは送付して学んでおいてもらいました。

f:id:tomoima525:20200309152306p:plain
事前に送ったメール

あとは、どの領域までタスクをまかせるか、というのはよく考えておいた方がよいです。通常の採用の場合、時間を経てプロジェクトのコードを理解していきますが、スタッフ・オーグメンテーションの場合は即効性を期待します。全て説明して理解してもらえれば、より任せられる範囲は広がりますが、数週間かけて理解するプロジェクト説明しきるのはほぼ不可能です。ある程度はあきらめが必要ですが、こちらの実装負担も増えることは覚悟しなければなりません。

なるべく毎日顔を合わせる

毎日短くとも顔を合わせることで、ブロッカーに迅速に対応できるメリットがあります。先方のエンジニアはプロジェクトの全ての仕様やメンバーを把握しているわけではないので、詳しい人に聞けばすぐわかるようなことで時間を消費してしまうケースがありました。リモートの外部エンジニアだからこそ、さっと解決できるようにするのは重要だと思います。

まとめ:スタッフ・オーグメンテーションが向いている開発

今回は我々がシリコンバレーでチーム開発をするためにスタッフ・オーグメンテーションを活用している話について書きました。自分の経験から、スタッフ・オーグメンテーションが向いているのは、ゴールや期間のはっきりしたプロジェクトなんじゃないかな、と思います。

スタートアップは日米関係なく採用は大変なので、スタッフ・オーグメンテーションはプロジェクトを進めるためにもよい手段ではないでしょうか。