
2025.02.06
ポンコツ期、孤独期、成果独り占め期を経て… サイボウズのプロマネが振り返る、マネージャーの成長の「4フェーズ」
SUZURIチームのパフォーマンスをfour keysで可視化してみる話(全1記事)
リンクをコピー
記事をブックマーク
近藤宇智朗氏(以下、近藤):では、お願いします。「生産性を可視化したい」と題して発表します。ということで、自己紹介します。私は技術部に所属している、近藤といいます。ふだん、インターネットなどでは“うづら”と呼ばれているので、お気軽にうづらと呼んでください。現在、技術基盤チーム兼データ基盤チームという感じで働いていて、SUZURIの事業部には直接所属していませんが、お手伝いという感じで今回はお話しします。
ちなみに、福岡市のエンジニアカフェという施設があるんですけど、私はそこのサポーターもやっているので、Twitterなどで福岡の相談があればお気軽に絡んでください。趣味はZumbaです。あとは書いてあるとおりな感じです。
今日は生産性を計測する話をしますが、具体的にどういうやり方をして、どういう対象を見て、ツールとかは何を使っているかという話と、具体的な値をちょっと見て、サンプルを出して、今後のやっていき、なんかをお話ししようと思います。
まず、生産性を計測します。どうして今この話が出ているかの背景があります。例えば、Google Cloudのブログに『エリートDevOpsチームであることをFour Keysプロジェクトで確認する』という記事があります。これは、要するにソフトウェアの開発チーム、たぶんDevOps系に限らず、ソフトウェア開発チームのパフォーマンスを実際にいろいろな指標を使って計測することが重要ですよ、ということを紹介した記事です。
少し前になりますが『LeanとDevOpsの科学』、英書では『Accelarate』といいますが、その本でもチームの生産性をなんとかして計測することを非常に重要だと説いていて、具体的な方法などを紹介しています。
以前からSREのプラクティスの1つに、自分たちが使った時間を計測するなどがあったりするのかな、と思います。具体的なところをすぐには思い出せませんが(笑)。そんな話があった記憶があります。
最近『ユニコーン企業のひみつ』という本が出ました。この中に、プロダクティビティスクワッドの組織の話があります。この組織は早く進めるようにすること、つまり、生産性向上に投資するための組織であると説明されています。
こういう組織が、これからWebの企業では非常に重要になると思っていて、私が所属している技術基盤チーム、データ基盤チーム、どちらもいわゆる早く進めるようにするための仕組みづくりにコミットする組織です。その一環としてSUZURIの支援を行なっています。
そのため、私たちのOKRの説明は省略しますが、目標の中にはSUZURI事業部を含めた生産性の指標が入っているとすごくわかりやすいとなり、こういった計測の仕組みにあらためて注目している、というところです。
もちろん、実際にやったことをちゃんと計測するのは、やはりエンジニアリングの基本なので、そういうことをやっていきたい面もあります。
ちょっと堅い話が続いてしまった感じがありますが(笑)。生産性に投資をするのはすごく重要で、ガンガン投資したいので、その効果をちゃんと測定したい、という話です。
では具体的にどうやって計測するかという話です。計測対象として、昔からあった指標としては、いわゆるスクラムのベロシティみたいなのもありますが、最近はみんなSaaSを使っていたりとか、あとはGitHubやRedmineなど。APIで活動、アクティビティが取れるプラットフォームをみんなが使っていることもあり、そこの値を使うことは考えられます。
どういうことを計測するかというと、具体的には、例えばデプロイの頻度、変更のリードタイム、変更に対する障害の確率。あとはサービスの復元のための時間が考えられます。
例えば、デプロイ頻度については、SUZURIはHerokuを使っているので、リリース数を取るとよさそう、とか。リードタイムはちょっと難しいですが、例えばプルリクエストのマージ時間はよさそう、とか。
あと、変更障害率はサーバーのアクティビティログなどを組み合わせる。サービス復元時間はあとで説明しますが、インシデント対応用のbotのデータを使うことを考えました。
その上で、これはちょっとデータチームっぽい話ですが、考えたのが、データソースとしてGitHub EnterpriseのAPI、Heroku PlatformのAPI、あとはアプリケーションログ、sssbotという社内のbotのデータでした。それぞれ対応は色で書いています。
これらのデータを、データ基盤がもっているBigfootと呼ばれているデータ共通基盤にExtractして、Loadして、Data Lake的に内部でBigQueryの中にもっておいて、Outputとしては一応グラフにして出すことをやっています。
このBigfootというものが、一応社内データ基盤として、私たちデータ基盤チームが運営しているものになります。
また、可視化周りはいろいろ選択肢がある状況ではありますが、まだ具体的なとこはこれからというところです。ただ、Google Workspaceを使っていることやBigQueryとの相性から、基本的にはデータポータル、いわゆるGoogleのDataStudioを使おうと考えていますが、このあたりの選択肢はいろいろ検討できるかなと思っています。
いろいろデータソースはわかりましたが、ではどうやって抽出するのかの話をします。ここからは、もう少しテクニカルになっていくと思います。
GitHub Enterpriseの活動を抽出するために、専用のコマンドラインツールを書いちゃいました。それが、octxというツールです。
これはRustで書いています。octocrabというライブラリを使うと勝手に非同期になって、やたら速いクライアントができるのでそれを使っています。なおかつRust製のrustlsを使うことで、ワンバイナリで(opensslなどへの)依存なく動くバイナリを作れるということで、かなり取り回しがいいので、Rustを採用しました。
これはCSVを出力することしか行わず、APIにアクセスしてCSVを出す。そこから先はbqコマンドやembulkに投げるというふうに、やることを割り切ってできます。
抽出する対象として、Issue APIを叩いて、Issue、Comment、User、Label、あとIssueEventといって、マージやクローズのイベントも取るようにしています。というのも、プルリクエストやマージというタイミングがIssueEventを使わないとわからないので、急遽対応した感じです。一応、時間を絞っての抽出もできるようになっています。
octxはちょっと注意事項として、github.comのほうにコマンドを投げると、たぶんけっこうレートリミットなどが厳しいと思うので、Enterpriseのユーザー向けのツールという感じで今のところは考えています。そのため、このようなoctxツールを作りました。
あと、サービスの500や503など、ステータスコードも取りたいところがあって。これは一応、minneなどで使っている、rack-bigfootと呼ばれる、RailsのRack Middleware。Railsを知らない方向けにいうと、アクセスごとのフック処理を簡単に記述できる仕組みがあり、それを使ったrack-bigfootを使って、アクセスごとのログをほぼ漏れなく送りつけています。ステータスコードが取れるので、失敗したリクエストを集計することができるというわけです。
Herokuは、これもHerokuのPlatform APIを使えば簡単に取れますが、既存のRust実装がページネーションをサポートしないことに気づいたので(笑)。ほぼフルスクラッチで書いてしまった経緯がありますが、一応Herokuのリリースログも取れます。
あと、障害対応については、実は全社的に障害やインシデントの対応をSlackのBotOpsで行っています。そのため、SUZURIの各種対応もこのbotを使っているという経緯があり、そのbotのバックデータをロードして利用することにしました。このbotもすごくよくできているものなので。よければ、GMOペパボのセキュリティ対策室の資料も見てください。
という感じで、ひととおりロードができました。データが揃ったので、「可視化して運用していくぞ」というところまでもっていきました。というのが、実はこの話の終わりです。
運用はこれからですが、一応、簡単な集計結果をちょっとグラフとして出しておこうと思います。例えば、マージとデプロイの回数を週ごとに比較して並べています。このグラフを見る限り、マージに対してデプロイが極端に少ないとか、あるいはデプロイの数がちょっと減っていってるということがあれば、たぶんチームとしてなにかがボトルネックになっている兆候なのかなと思います。直近だと、あまりそういうことはないように思えます。
デプロイの回数も、たぶん月に40回から50回はいっているので、この調子を続けていこうぜ。もしくは、もっと増やせたら増やそうという感じかなと見ています。ただ、こういうのをトラッキングしていくのが大事なんじゃないか、というのはあります。
もう1つが、横軸がデプロイの時間で、縦軸がデプロイ後6時間でのエラー数をプロットした図です。これを見る限り、こういったものをプロットしておくと、例えばデプロイ直後に100回とか1,000回とかエラーが出ているようなデプロイを可視化できるのかなと思いました。これを見る限り、基本わりと優秀といえば優秀かなと思います。これのベースラインを下げるとかができれば、もっといいのかなというところです。
ただこれはちょっとざっくり出しただけで、もっといい可視化の方法があるかもと思うので、データチーム内で揉んでみようと思っています。
という感じで、いろいろデータが揃ったので可視化ができて楽しい、というところもあります。今後はやはりこういった生産性の計測の運用を載せていくのが大事で、データチームだけでなく、もちろんSUZURIの開発チーム、運用チームとも連携して進めたり、データソースを増やしたりをやっていく必要があるかなと思います。
あと、他事業部に当然展開していきたいと思っています。特にデプロイ周りのトラッキングは、もっといい感じに標準化した方法があるとやりやすくなると思うので、そういうのも考えられるといいかと思っています。
プロダクティビティスクワッドと読みますが、今後も、早く進めるための仕組みづくりや工夫を、SUZURIに限らず手伝っていこうと思っています。
我々はデータチームとして、データサイエンスやオペレーションの技術や、基盤チームとしていろいろ整備の部分に特化したノウハウがあるので、それらをどんどん出していくとともに、技術的にはドメインに特化しつつも、コミュニケーションはドメインレス、事業部やそういう組織の壁をまたいでどんどんやっていくことを心がけて、今後もSUZURIの生産性に貢献していければなと思っています。
最後に、SUZURI事業部もそうですが、データ基盤チームとしての採用枠もあるので、興味があればお声がけください。ということでお話は以上です。ありがとうございました。
関連タグ:
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.03
「昔は富豪的プログラミングなんてできなかった」 21歳で「2ちゃんねる」を生んだひろゆき氏が語る開発の裏側
2025.02.03
手帳に書くだけで心が整うメンタルケアのコツ イライラ、モヤモヤ、落ち込んだ時の手帳の使い方
2025.01.30
2月の立春までにやっておきたい手帳術 「スケジュール管理」を超えた、理想や夢を現実にする手帳の使い方
2025.02.04
日本企業にありがちな「生産性の低さ」の原因 メーカーの「ちょっとした改善」で勝負が決まる仕組みの落とし穴
2025.02.05
「納得しないと動けない部下」を変える3つのステップとは マネージャーの悩みを解消する会話のテクニック
PR | 2025.02.07
プロジェクトマネージャーは「無理ゲーを攻略するプレイヤー」 仕事を任せられない管理職のためのマネジメントの秘訣
2025.01.29
社内会議は「パワポ」よりも「ドキュメントの黙読」が良い理由 Amazon元本社PMが5つのポイントで教える、資料の書き方
2025.01.31
古い手帳から新しい手帳への繰り越し方 手帳を買い換えたら最初に書き込むポイント
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由