柔軟な開発を可能にするエンジニアチーム

f:id:vasilyjp:20180329181145j:plain

こんにちは、フロントエンド開発部マネージャーの荒井です。今回はVASILYフロントエンドチームの体制、開発手法、マネージャーの役割について紹介したいと思います。

はじめに

私はエンジニアの採用担当もしているのですが、会う方に「どのように開発をしているのですか?」「リファクタリングの工数は取れていますか?」といった質問をよく頂きます。働く上で事業ドメインや採用技術も重要ですが、同様に日々のタスクの進め方、チーム体制を重要視している方も多いようです。今回はVASILYのフロントエンドチームの体制、開発手法について紹介します。

フロントエンドチームの役割

まず初めにフロントエンドチームの業務範囲を説明します。 VASILYフロントエンドチームは大きく3つのプラットフォームを担っています。

  • Webアプリケーション開発
  • iOSアプリケーション開発
  • Androidアプリケーション開発

ネイティブアプリケーションを「アプリ開発部」などとして分けている企業も多いかと思いますが、VASILYではすべてまとめて「フロントエンド開発事業部」としています。 Kotlin、Swift、 Ruby、JavaScriptといった言語を使用しており、HTMLやCSSをコーディングするのもフロントエンドチームの役割です。

チーム体制

現在は6名の体制で開発を進めています。 多くの企業では明確に役割分担されており、専任が多いと思います。VASILYのフロントエンドチームの変わったところは、プラットフォームの垣根を取り払って開発をすることもある点です。下記図のようにすべてのプラットフォームを担当してるメンバーも2名います。

f:id:vasilyjp:20180329181204j:plain

プロダクション環境に反映されるmasterブランチへのマージはコードレビューが必至となります。コードレビューの体制を整える都合上、各プラットフォームは最小で2名としています。案件に応じて2〜4名で開発しています。

専任と兼任

元々複数のプラットフォーム経験のあるメンバーが揃っていたわけではなく、兼任メンバーは働き初めてから学習期間を設けてコンバートしました。現在Android開発が出来るメンバーは4名となっていますが、元々Android開発を行っていたのは1名で、iOSから1名、Webから2名増えています。 複数のプラットフォームに精通するメンバーが増えることで、案件に応じて柔軟なリソース配分が可能となりました。また、特定のメンバーに負荷がかかることを避けるメリットもあります。

兼任

個人のキャリアパスを無視して業務命令で兼任とさせることはしていません。 以下のことは大事にしています。

  • 他のプラットフォーム開発に興味があるメンバー
  • 学習期間を設ける
  • 有識者のもとで開発をする

Android開発はUdacityにて基礎を学び、はじめはベテランのAndroidエンジニアのもとで小さいタスクから行なっていきました。学習方法については随時振り返りを行い手法を変えていっています。

専任

iOSのみ開発するメンバーも2名います。Swiftという言語に興味があり、キャリアパスとしても現状iOSの開発に力を入れたいというメンバーは専任としています。個々がモチベーションを保てる業務内容であることが大前提で、それを踏まえた上でチームとしてリソース配分をしていくことが重要です。

技術の選定

異なるプラットフォームの実装をするには負荷がかかります。その負荷を軽減するためには技術選定も重要です。直近ですとiOS、AndroidではReactiveXを取り入れて開発を進めるといった取り組みをしています。同じパラダイムを採用することでプラットフォームを跨いだ時の負荷を軽減しています。

開発手法

プラットフォームやプロジェクトにもよりますが、多くのプロジェクトでは1〜2週間のスプリントで開発を行っています。現在アクティブなプロジェクトでは以下のような役割分担で行っています。

  • プロダクトオーナー
  • 開発チーム
  • マネージャー

前述した6名は開発チームにあたります。

役割

プロダクトオーナー

プロダクトの方向性を決定します。プロダクト開発における優先順がついたタスクリストであるプロダクトバックログを作成します。殆どの場合、開発チームに直接の指示は出していません。

開発チーム

プロダクトバックログに記載されているタスクの工数を見積もります。見積もった結果、マネージャーと共に、どの機能まで次のスプリントに入れるかを決定します。ここで決定したスプリントバックログの進捗をマネージャーが管理していきます。

マネージャー

作成されたスプリントバックログが問題なく完了するように調整していきます。フロントエンド事業部として持つタスクの優先度をつけ、開発チームに「差し込み案件」などが来ないようにします。案件は様々発生してしまうため、その場合、開発メンバーに流れないように開発したりします。

スプリント

2週間の間には以下のことが行われます。

  • スプリントバックログの作成
  • 開発
  • QA
  • リリース

プロダクトオーナー、デザイナーも含めたQAが完了し、機能がリリースされるとそのスプリントは完了とみなされます。プロジェクトによってはMeasureというステータスを設け、実施した施策に対する測定を行なってからDONEへ移行するようにしています。

マネージャーの役割

マネージャーの業務は多岐に渡ります。また、私自身がエンジニアのマネージャーとして大切にしたいことは多々あるのですが、今回は質問が多い「リファクタリング」「新しい技術の導入」の観点に絞って紹介します。

アカウンタビリティ

「リファクタリング」も「新しい技術の導入」も率先して行なっています。リファクタリング用に工数を取りますし、タスクの調整も行なっています。その時に必要なのが「アカウンタビリティ(説明責任)」です。「何故リファクタリングが必要なのか」を明確にする必要があります。幸い会社が開発に対して理解があるので揉めたことは一度もありませんが、説明は意識するようにしています。

新しい技術導入も同様です。VASILYには「エンジニアマニフェスト」が存在しており、新しい技術の導入にはポジティブです。しかし、手当たり次第新しいことを試すのではなく、「何の課題を解決するのか」は全員が考えて選定しています。これが担保されるのならば会社として実績がないことでも挑戦する機会を設ける方針です。

開発チームのタスク

新しいことを始めるには学習コストがかかりますし、日々の業務でも集中して作業する時間が必要です。「集計依頼が頻繁にきて開発時間が確保出来ない」等の問題が出来るだけ起きないように意識しています。VASILYにおいてスクラムマスターは存在していませんが、チームとしてスピードが出るように障害を取り除いていくポジションという意味では近しい役割を担っています。

まとめ

今回はフロントエンド事業部の紹介をしました。チームによって様々ですが、VASILYの開発スタイルが少しでも伝われば幸いです。現在エンジニアのマネージャーは私しかいません。一緒にマネージャーとしてチームを作って行ける方、是非ご連絡ください。また、こんなチームで働いてみたいなと思った方は是非一度オフィスへ遊びに来てください。お待ちしております。