Retty Tech Blog

実名口コミグルメサービスRettyのエンジニアによるTech Blogです。プロダクト開発にまつわるナレッジをアウトプットして、世の中がHappyになっていくようなコンテンツを発信します。

開発組織としてのRettyアプリチーム紹介と2020年振り返り - LeSSとリモート勤務の元でのより良い開発体制を目指して

(本記事はRettyアドベントカレンダー2020 12日目の記事です) adventar.org

こんにちは、Rettyアプリチームでエンジニアをしているimaizumeです。 2020年は年初から赤ワインにドハマりし、この一年でボトルを50本近く空けてしまいました(笑)好きな品種はジンファンデルです。 もちろんRettyを通じて素敵なビストロやワインバルにも巡り会えたので、 来年も飲み過ぎに注意して色んなお店に行きたいと思います!

さて、Rettyがモバイル向けのアプリを提供していることをご存知の方も多いかと思いますが、その開発体制についてはこれまであまり紹介する機会がありませんでした。

そこで本記事では、私の所属するRettyアプリチームが2020年に行った取り組みを振り返りつつ、Team Rettyの一員としてどのように開発に取り組んでいるかを皆さんにご紹介できればと思います。 なお今回の記事は「組織面」にフォーカスしていますので、施策や技術での取り組み等についてはまた別の機会にご紹介させていただければと思います。

この記事を読んで分かること

  • Rettyのアプリチームの開発体制
  • 普段の開発の流れやアプリチーム周辺の様子
  • 組織面での2020年の取り組み

Rettyのアプリチームとは??

f:id:imaizume:20201206180742p:plain
Rettyのスクラム開発の流れとアプリチームが持つタスクのイメージ

現在Rettyでは、iOSAndroid向けにネイティブアプリを提供しています。 このアプリ開発を支えるのがRettyのアプリチーム(通称はらみチーム)で、2020年12月現在5名のエンジニアが所属しています。 この5人で、iOSAndroid、さらにはアプリ向けAPIサーバーの開発を行っており、各メンバーが複数のプラットフォームを横断的に開発する体制をとっています。 実はRettyは2012年頃からiOSアプリでサービスを展開しており、ネイティブアプリ界隈では比較的古株のサービスであると自負しています。

Rettyでのアプリ開発の流れ

f:id:imaizume:20201206185140p:plain
アプリチームが開発するタスクの種類

Rettyでは大規模スクラム開発(LeSS)を採用しており、プロダクトバックログを軸とした開発を行っています。

engineer.retty.me

具体的には主にプランナーチーム主導で施策を立案し、展開先のプラットフォームに対応するエンジニアチームと一緒に開発を行います。 RettyはWeb(PC/スマホ)とアプリ(iOS/Android)の両方にサービスを展開しているため、アプリ固有で行う施策もあれば、Webと同時に展開するようなものもあります。

前者であれば、仕様や設計の調整はアプリチーム内で完結しますし実装方法もおのずと決まってきます。 一方で後者の場合には、Webチームと協力して仕様実装やリリースタイミングを調整する必要もありますし、機能によってはWebサービス側のUIをWebViewとして利用することで実装する場合もあります。このため仕様策定から実装までチーム横断的な相談や情報共有が重要となってきます。 またアプリにはApple / Googleによるアプリの審査があり、万が一リジェクトされた場合には施策全体のリリースタイミングをずらすなどの調整が必要となることもあります。

このため普段の開発時はチームに閉じて行いますが、デイリーリファインメントや スプリントレビュー以外でも積極的にプランナーや他のエンジニアとコミュニケーションを取りながら開発を進め、Webとアプリの両方で安定的に施策をリリースできるよう日々努力しています。 (余談ですが「はらみ」チームの他にも「きのこ」「たけのこ」「あんこう」「桃天」など、食べ物にちなんだチーム名が付けられています。その理由についてはこちらも併せてご覧ください。)

アプリチームが大切にする価値観

Rettyのアプリチームでは次のような価値観を重視し開発を進めています。

事業成長とユーザーへの価値提供を第一に

Rettyはサービスを大切にしており、どのエンジニアも技術=価値提供のための手段として捉えています。 何かを議論するときも、「それってユーザーさんにとってHappyになるんだっけ??」というように全員同じ方向を見ているので建設的で納得感が得やすい議論ができます。

担当領域を過度に分担・限定せず属人性の低い開発をする

少人数のチームかつ複数のプラットフォームを担当する必要があることから、個人の技術領域を限定せず全員で扱える技術を揃え、個人プレーではなくチーム全体でのパフォーマンスを重視します。

相手を尊重して積極的な対話を行う

意見や考え方が違っていても、しっかり意見・理由を聞き、納得がいくような議論を心がけています。 こうすることで、お互いが心理的安全性を確保しつつ、思ったことを素直に話すことができ、より良いアイデアを生み出すことに繋がっています。

2020年 アプリチームの組織面での取り組み

ここからはアプリチームとしてこの1年間で行った組織面での取り組みについて振り返りたいと思います。 2020年はGo To Eatを始めとした大規模なプロジェクトを複数経験し、さらに2020年3月より、新型コロナウイルス感染防止を目的として全社が一定期間リモート勤務となるなど、これまでで最も環境の変化が激しい年でした。 それでもアプリチームでは新しい取り組み・仕組みの導入によって、むしろ以前よりも生産性を向上させることができたように思います。

LeSS及び全社リモート体制への移行によるコミュニケーションへの取り組み

f:id:imaizume:20201206191447p:plain
アプリチームと他チームでのコミュニケーション

LeSS移行以前は、プランナーとエンジニアが1つのチームで開発をしていましたが、LeSSになったことでエンジニアとプランナーが別チームとなり、さらにエンジニアの中でもWeb、アプリ、お店さん向けなどで複数のチームに分かれるようになりました。

チーム分割後、スクラムイベントなどもチーム単位で行われるようになり、チーム外とのコミュニケーションが減少しました。 例えば朝会をプランナーとエンジニアで別々に行うようになり、お互いのちょっとした気づきや提案が共有されにくくなってしまいました。 またリモート勤務の影響で、雑談の時間や対面でのちょっとしたコミュニケーションが減ってしまったことも大きく影響しています。

そこで、チーム内外でのコミュニケーションを減らさないよう、アプリチームでも様々なトライを行いました。 例えば毎週各チームでのKPTの結果を持ち寄って、チーム間で共有する「振り返り共有会」で問題をチームに閉じないようにしたり、リモート勤務時はDiscordになるべく常駐し相談や質問を受けやすいようにしたりしています。

f:id:imaizume:20201206193003p:plain
アプリ開発よもやま会での議事録

またアプリ周辺の最新の技術をプランナーやデザイナーに共有し、施策や改善につなげてもらうための「アプリ開発よもやま会」 を隔週で開催しています。 これにより、iOSAndroidの新機能、ストアの仕様変更、技術的負債の中長期的な事業リスクの説明などを行うことでアプリ開発に関するコミュニケーションが増え、納得感や新しい発見が得られるようになりました。 こうしたコミュニケーションは、チーム横断的な大規模プロジェクトでの周辺の状況変化を俊敏にキャッチアップするだけでなく、Rettyが「one team」であるという感覚をリモートであっても維持することに役立ったと考えています。

一方、オンラインでのコミュニケーション量の増加に伴う別の課題も出てきました。 例えばチャットでの非同期かつ非定型の相談が増えたり、どのチャンネルで誰に連絡すれば良いか分かりづらいという声も上がりました。 そこで、デイリーリファインメントの依頼やプロダクトバックログへの記載報告などをGoogle フォームや Slack Workflowにすることで、フォーマットを統一し窓口を一本化することでコミュニケーションコストを減らしました。 この方法は最初アプリチームでの勤怠報告やQA依頼で行われており、その後他のチームへと伝搬していきました。 より詳しく知りたい方は別の記事もあるので、よければ参考にして下さい。

engineer.retty.me

また、アプリチームへの依頼や相談を、チャット上で特定個人に対してメンションしてしまうという問題も発生しました。 アプリチームは少数精鋭のチームであり、チームとして扱うべき問題を個人に紐付けてしまうと属人性が生まれ、開発の進捗に影響が出てしまいます。 そこで「チームへの相談を原則チームメンション付きで行う」というルールを導入したことで「人」ではなく「チーム」に質問・依頼するという意識をチーム内外に醸成することができました。

こうしたチーム間のやりとりで起こりがちな細かいフリクションも2020年は一つずつ丁寧に取り除くことで全体のパフォーマンスを向上させられたのではないかと思います。

チーム内でのスクラムの様子

次にチーム内で行った取り組みについてのご紹介です。

まず日々のタスクの進捗管理方法ですが、フルリモート勤務開始前は物理カンバンで管理していました。 その後さまざまな方法を試した結果、最終的にプロダクトバックログ(Google Spreadsheet)とMiro(オンラインのカンバン)の使用に落ち着きました。 前者はストーリーとしての施策の進捗状況、後者は分割されたタスクの進捗を管理するために使っています。 他のエンジニアチームもMiroを使っており、様子を知りたい時はタブを移動するだけで見に行くことができるのも利点です。

一方Rettyのアプリチームは、前述の通り人数に対して開発プラットフォームが複数あるため、定型的な作業を自動化していくことにトライした一年でもありました。 例えばアプリチームには開発版のビルドを行う社内マシンがありますが、今年はiOSのクラッシュ報告に必要なdSYMのアップロードをする機能や、マニュアルで行なっていたクラッシュフリーレートの報告を自動で行うような機能を追加しました。

またアプリでは必須のライブラリ更新や工数見積に使うストーリー定規の更新など、頻度や緊急性が低いタスクが放置されがちであるという問題もありました。 そこで今年から、アプリチーム独自で「マンスリースクラム」という、月単位で行う定形タスクを全員でこなすためのイベントを開始しました。 これにより以前はあまりできていなかったライブラリのアップデートや、見積もりで使用するストーリー定規の更新を継続的にできるようになりました。 地味ではありますがインシデントリスクを下げ、安定したサービス価値を届けることができるようになったという点で良い成果だと思っています。

さらに、暗黙の知見・ルールが増えたり、コードレビューで個人の価値観による指摘が増えたことを受け、 チームとしての開発上のルールを決めるための「App Engineeringの会」というイベントを毎週開くことになりました。 このMTGで、小さなものでは「Swiftで明示的にselfをつけるべきか」といったものから「どのテストフレームワークを選ぶべきか」などの抽象的な問題まで毎週チーム内で話し合い決めていきます。 App Engineeringの会を実施後は、なんとなくで決められていた開発ルールが納得感を持ってチーム内に共有されるようになりました。 今後はこれを他チームとの開発ルールにおいても導入したいと考えています。

新メンバーの参画と技術的可用性の向上

組織という点において、2020年は新しいメンバーのJOINも大きな出来事でした。 Rettyのアプリチームはプラットフォームに拘らず必要となる複数の技術領域を全員で見れるようにするのがチームとしての開発ポリシーです。

engineer.retty.me

今年はWebチームから1名(アプリ未経験)、さらに20新卒の松田(Androidエンジニア)がJOINしたことで、チームメンバーの技術・チームワーク両面での可用性を早期に向上させることが必要でした。

f:id:imaizume:20201206193737p:plain
アプリチームのスキルマップ

そこで未経験分野の開発に慣れてもらえるようペアプログラミングを実施し、特定プラットフォームでの開発経験のないメンバーも小さなタスクを通じて少しずつできることを増やしていきました。前職ではiOS開発を専門にしていた自分も、今年は上記の取り組みを通じてKotlinやAndroidの開発を行えるようになりましたし、現在ではチーム全員でアプリ向けサーバーのオンコール対応を行えるようになっています。 またメンバーの扱える技術レベルをより定量的に可視化するため、スキルマップの作成にもTRYしてみました。こうすることでチーム全体の可溶性が低い部分を今後強化していく必要があるということがよくわかるようになりました。

f:id:imaizume:20201206185441p:plain
スクラムイベントの当番表

またチームワークの面では、スクラムイベントの主催やスクラムマスターのタスク当番制で行ってみました。これによって、メンバーが休んだり差し込みタスクなどに対応する必要が出たとしても、チーム全体のパフォーマンスは低下させずにスクラム開発を滞りなくすすめられるようになりました。

もちろんペアプログラミングや画面共有は業務中ずっと行えるものではありません。このため、必要な知識や手順をドキュメントに起こす作業も積極的に行いました。アプリ・サーバーの申請・リリースや、忘れがちなインフラ周りの手順書、スクラムイベントの進行方法など、マニュアルを見ながらであれば誰でもできるように環境を整備しました。

総括: 継続的なサービスグロースを目指せる開発体制を構築した1年

こうしてみるととても地味な活動が多かったように見えるかもしれません。 しかし、この記事を通じて皆さんにはRettyのアプリチームが単独で動いているのではなく、プロダクトチーム一丸となってサービス作りをしているんだということを知ってもらえればと思います。 わずか5名の小さなチームではありますが、LeSSとリモート勤務の体制下でチームとしてパフォーマンスを最大限に引き出せるような開発体制を整え、プロダクトグロースに貢献する力が身についた1年であったと確信しています。

もちろん施策・技術の両面でまだまだできていないこと・やりたいことはたくさんありますので、2021年は現在の生産性を保ちつつこれらも達成して行けるように頑張っていきたいと思います。