こんにちは。ソフトウェアエンジニアの @ttokutake です。
この記事では、スタディサプリ小中高プロダクト開発部の技術戦略グループの活動内容を紹介していこうと思います。 「いきなり何ですか?」と思った方がほとんどだと思われますので、まずは「技術戦略グループとは何なのか」から順を追ってご紹介させていただきます。
@chaspy さんが SRE NEXT 2022 ONLINE で発表している内容と被っている部分がありますが、ご容赦いただけたらと思います。
ちなみに自分は2021年10月〜2022年9月の期間で技術戦略グループの中の横断ワーキンググループをリードする役割を担当していました。 (横断ワーキンググループの説明はこのあとすぐ!)
技術戦略グループとは
このグループの目的と目標は以下のようになっています。
- 目的
- プロダクト開発組織とそのシステムをより変化に強くする
- 目標
- 技術的なビジョンと方針の策定
- 技術的課題・負債をコントロール下に置く
- 改善サイクルの確立と自己診断能力の獲得
これらの目的・目標を達成するために、「特定の分野ごとに集まって、組織横断で解決すべき課題にメスを入れていく」のが技術戦略グループです。
2021年度から活動が開始されています。 誰でも参加可能であり、興味のある人が集まって兼務と言う形で活動しています。
技術戦略グループには以下のようなワーキンググループが存在します。
- ディレクション
- 技術戦略グループについての課題・議題を取り扱うメタ的なワーキンググループ
- 例えば「こういう取り組みをした方が良いのでは」とか「各ワーキンググループの調子はどう?」みたいな話をしています
- 横断
- 特定の分野に限らない課題・議題を取り扱うワーキンググループ
- 横断という名前ではあるがバックエンドの話題が多いです
- 現在は「技術的課題・負債をコントロール下に置く」という目標に向けての取り組みをしています
- フロントエンド
- Webフロントエンドに関する課題・議題を取り扱うワーキンググループ
- Webフロントエンドのスペシャリストが集まって様々な議題・課題の解決を試みています
- DevOps
- DevOpsに関する課題・議題を取り扱うワーキンググループ
- 「改善サイクルの確立と自己診断能力の獲得」という目標に向けての取り組みをしています
どのワーキンググループも基本的には週に1回1時間、集まって活動をしています。
今回はこの中でも横断ワーキンググループが今までどのような活動をしていたのかをご紹介していこうと思います。 フロントエンドワーキンググループやDevOpsワーキンググループについてもいずれ紹介されると思いますのでご期待ください!
発足までの経緯
横断ワーキンググループの活動を紹介する前に、そもそも技術戦略グループが発足した経緯を説明しておこうと思います。
つい先日、スタディサプリは10周年 を迎えています。
それだけ長い間プロダクト開発が行われていますので、当然ながら開発や運用が辛い部分もたくさんあります。 よくある話だと思いますが、複数のチームが関連するモノリシックなシステムがスタディサプリには存在します。 そのようなシステムではオーナーシップを持ったチームが存在せず、複数のチームがそれぞれ必要なときに変更を加えるので、 技術的負債が積み重なっていきやすく、放置されやすい状態です。
こういった変化しづらくなってきているシステムを放置するわけにはいかないので、 「開発組織としてこれらの技術的負債に計画的に対処していこう」という経緯から技術戦略グループが発足されました。
ちなみにこの活動はビジネスサイドでも理解していただいており、 「2022年度の開発予算のうち3割は技術的負債の解消に当てる」という決定までされています。 英断ですね...!
横断グループの活動
では横断グループはどのような活動をしてきたのかについて、ご紹介させていただきます。
2021年度 上期(4月〜9月)
まずは技術的課題の洗い出しと優先度決めを目標としました。 2022年度の開発ロードマップに技術的負債の解消を計画として載せることが決まっていたため、 下期までには課題を整理する必要がありました。
最初は有志で集まったメンバーで「課題だと思っていること」をマインドマップの形でどんどん書き出していきました。 それぞれ想いのこもった課題が続々出てきましたが、想いのこもりすぎた内容もあったため、画像はあくまでほんの一部を抜粋してきたものです。
次に完成したマインドマップを眺めながら、メンバーで議論しつつ課題を選別していきました。 例えば「これとこれはまとめるとこういう課題だね」とか「これは技術というより組織的な問題だから別の場で考えよう」とか議論しました。
課題が一通り出揃ったら、今度は取り組む課題の優先度を決めていきました。 確かな記録が残っていないのですが、課題は全部で30〜40個くらいになりました。 優先度を決めるのには、ペイン強度とペイン頻度という指標を用いました。 (ちなみに Zero Topic というPodcastで聴いた内容を真似しようと思って自分が提案しました。)
- まずは基準となる課題を真ん中に配置します
- 次の課題を取り出し、メンバーそれぞれが「ここだ!」と思う位置を示します
- なぜその位置だと思ったのかを議論して、最終的な課題の位置を決めます
- 2に戻って、課題がなくなるまで繰り返す
このようにして以下のようなペインのマッピングができました。 こちらも内容について載せられるものだけを抜粋しております。
最後に第一象限にある課題の中から投票で2022年度に取り組む課題を決めました。 開発ロードマップに載せるため、課題について以下のような情報を整えて最終的な承認を得ました。
- 背景
- 何をやるのか
- それをやると何が得られるのか
- それをやらないとどうなるのか
- リソースはどのくらい必要なのか
投票で選ばれた課題は「使っていない・廃止された機能・コード・データの削除」です。 2022年度現在、デッドコードの削除プロジェクトが進行中です。 こちらについてもより具体的な内容がブログで紹介されると思いますのでお待ちください。
ここまでさらっと内容を紹介しましたが、それぞれの作業はかなり時間がかかっています。 課題の選別と優先度決めは特にかなり時間を要しました。 というか優先度決めに関してはすべて終わらず、半分以上の課題は手付かずの状態でした。 それでも結局ここまで決めるのにがっつり半年を費やしたというのが2021年度上期の活動でした。
ここまでの横断ワーキンググループの大まかな動きをまとめると以下のようになります。
2021年度 下期(10月〜3月)
下期はまず今後何をしていくかということを時間をかけて議論しました。 上期では「技術的課題の洗い出しと優先度決め」という明確なゴールがありましたが、 まだまだ技術戦略グループの目標のどれも達成しているわけではないので今後何をしていくかを決める必要がありました。
上期から引き続き、優先度決めが終わっていない課題の優先度決めを並行して進めつつ、 2ヶ月ほどかけた議論の結果、以下のようなことを進めていくことになりました。
- 技術的ポリシーやガイドラインの整備
- 日々生まれる技術的負債を拾っていく仕組みの構築
技術的ポリシーやガイドラインの整備については、今も手付かずで今後の課題として残っています。 しかし、これについて議論をする過程で「Tech Darwin」と呼ばれる新たな試みが開始されることになりました。 Tech Darwinについては別の機会に改めて紹介されますのでお待ちいただければと思います。
日々生まれる技術的負債を拾っていく仕組みの構築が下期のメインの活動となりました。
まず仕組みについてですが、これ自体は単純です。 「課題投げ込み場」というGoogle スプレッドシートを用意して、技術的な課題や負債をどんどん書き込んでいくというものです。 スプレッドシートを用意したら開発全体に「課題投げ込み場を作ったから思いついたら書いてね」とアナウンスをしました。
また、Slackの Reacji Channeler も使うようにしました。 誰かのコメントをみて「こ、これは...技術的負債じゃねーか!」と思ったら「技術的負債投げ込み」というリアクションをつけてもらうことで、 技術戦略グループのチャンネルに流れるようにして、横断ワーキンググループがそれをみてスプレッドシートに追記するようにもしました。
運用を開始すると、下期の間で40個の課題が記載されました。 課題がどんどん見つかるのは良いのですが、ただでさえ上期で出てきた課題の優先度決めも終わっていない中、 このままでは課題が溜まっていく一方で一生優先度決めをすることになってしまいます。
そこで優先度決めのスピードをあげるために以下のような工夫をしました。
- 優先度決めの進行方法の型を用意する
- これはスピードをあげる狙いに加えて、誰でも進行をできるようにしてファシリテーションの負担を分散する目的もありました
- 課題の内容を事前にSlackで議論して整理する
- 以下の内容を事前にまとめておいて、ミーティングでは内容についての議論と優先度決めをするだけで済むようにしました
- 概要
- ペイン要素
- やりたいこと(オプショナル)
- なにか思い付いていれば書き出しておく
- すでに議論した課題と重複している場合は取り下げる
- 他のワーキンググループに委譲できるものは委譲する
- 以下の内容を事前にまとめておいて、ミーティングでは内容についての議論と優先度決めをするだけで済むようにしました
これらの工夫により、ミーティングで課題を取り扱う時間は、もともと1つあたり15~20分かかっていましたが、10分程度にまで短縮することができました。 (もちろん扱う課題によっては10分以上かかることもあります。)
下期ではすべての課題の優先度決めを終えることはできませんでしたが、 安定したワーキンググループの運営ができるようになったことが成果だったと思います。
2021年度下期の横断ワーキンググループの大まかな動きをまとめると以下のようになります。
2022年度 上期(4月〜9月) + 10月
さて、ここまで読んでいただいてありがとうございます。 疲れてきたと思いますが、今回の活動報告はこれで最後となりますので もう少しお付き合いいただけたらと思います。
2022年度上期では2023年度に取り組む技術的負債を決めていく必要があるので、 そこに向けてやるべきことを進めていくのが上期の目標でした。
とはいえまだ課題の優先度決めが終わっていないため、そちらを引き続き対応しました。 上期に入ってからも課題投げ込み場に新たに30個ほど課題が投げ込まれましたが、 それでも優先度決めは5月には終わりが見えてくるくらいには順調に進みました。
そのため、5月からは並行して「ワーキンググループとして次にやるべき作業を決める」という試みも進めました。 やったことは「やりたいこと・やったほうが良さそうなことをみんなで書き出す」と「その中で投票をしてタスクの優先度を決める」です。 ちなみにこの試みはワーキンググループでは天下一武闘会という名前で浸透しています。
その結果として、「課題の解決策の検討と作業ボリュームの見積もり」をすることになりました。 これは主に以下のような理由でみんなからの票を集める結果となりました。
- 課題の大中小くらいの見積もりを把握しておきたい
- 開発ロードマップに載せる課題は、ちょっと作業したくらいではまったく終わらないような作業量の課題にしたいのでそれを見極めたい
- 逆に1人月以下で対応できそうな課題もわかるようにしておいて、今後開発ロードマップに載せる以外で解決する方法がないか模索する動きに繋げたい
- 課題を一通り見直しておきたい
- 整理している間にも他のチームが解決する動きをみせていたり、実はすでに問題ではなくなっている可能性もある
ただし、ここまでで70個近い課題が存在しており、これらを素直に見積もっていくと半年では終わらないことが試算した結果わかりました。 そのため、徹底的に見積もりの対象にする必要があるものを厳選して、最終的には40個程度まで課題を絞りました。 また、横断ワーキングループのメンバーを3チームくらいに分けて、それぞれのチームに毎週課題2~3個を振り分け、 MTGまでに事前に解決策の検討と見積もりをしてもらいました。
ここでもMTG以外での事前準備の活動が功を奏して、9月初週には見積もりを終えることができました。 ワーキンググループとして活動する上で、「MTG以外の時間も活用していくこと」や「非同期で進められる作業は進めておくこと」が重要だということを改めて実感しました。
そして、ここから開発ロードマップに載せる課題を決める作業が始まりました。 見積もりを終えた課題の中から作業ボリュームが大きく、優先度が大きい課題を選び出して、その中で取り組んだ方がよいと思うものを各自投票する方法を取りました。
投票の末、2023年度に取り組む課題として3つの課題が選出され、現在はこれらの課題について必要な情報を整理して開発ロードマップの制作を進めています。
今年度の10月までの横断ワーキンググループの大まかな動きをまとめると以下のようになります。
おわりに
今回は技術戦略グループの1年半の活動について一気に紹介しました。
これまで放置されていた技術的負債に対して、組織的に向き合って課題を管理できるような形にできたことは スタサプの開発にとって非常に大きな成果となりました。
で実際に負債がどのように解消されているのか? これについては別の記事で改めて紹介させていただきますのでお待ちください。
以下のような記事が今後予定されております。
- 技術戦略DevOpsワーキンググループの活動
- 技術戦略フロントエンドワーキンググループの活動
- 「使っていない・廃止された機能・コード・データの削除」に取り組んだ話
- Tech Darwin
- 横断ワーキンググループをリードする上で苦労したこと・気をつけたこと
技術戦略グループの目的や目標の達成にはまだまだ至っていないため、 活動については今後も定期的に紹介させていただきます。
ここまでお付き合いいただき、ありがとうございました!
スタディサプリでは、一緒に最高のプロダクトを作っていってくれる仲間を募集しています! 少しでもご興味がある方は こちら のページからご連絡ください!