見出し画像

RedashとスプレッドシートつかったKPI管理の話

この記事は「paiza Advent Calendar 2021」の最終日25日目の記事です。
最終日はpaizaで社長をやっている片山がお送りいたします。
(…投稿する日を一日間違えました。)

ちなみに、paizaはITエンジニア向け国内最大の転職・就職・学習プラットフォームです。(paiza.jp)

背景

ここのところ大きめの施策を全社巻き込んで動かす必要ができてことなどがあり、直近自分がpaizaのプロダクトをもう一度直接みることになりました。

これまでは、2年前にMBOしたことなどもあり、経営レイヤーでのあれこれを中心にやっていたので、プロダクトを直接みるのは久しぶりです。
そこでまずは、各種指標を過去からの流れで見れるようにしつつ計画を作り、予実管理をできるようにし、それを日時で自動更新する流れを作ったのですが、割と事業状況がクリアに見えれるようになって良かったので、今回はその話をします。

事業管理上の課題感

プロダクト系出身なので、ひさしぶりにプロダクトを自分で面倒みれるのは楽しいです。
プロダクトサイドに戻ってきて最初にやったのは、事業とプロダクトの解像度を上げるためにまずは数値をとり、これまでの各指標流れを把握し、直接各ページをヒューリスティック分析し、気になった詳細な数値をとりなおしてという分析をおこない、改めてキードライバーをあたりをつけることをやりました。
そしてそれをもとに計画を引き、予実管理を日時で行いながら、より素早くPDCAを回せるようにするダッシュボードを作る必要があります。

ただ事業状況が変動している際や、キードライバーが明確に見えてない状態では、見るべき指標は多岐にわたり、かつそれらの詳細指標が常に見れる状態を作る必要があります。一方で指標が多ければとにかく集計作業が大変になり、指標が多すぎて全体を把握しづらくなります。

以前の指標の取り方

以前の指標の取り方:レプリカDB(MySQL)から2通りのデータ取得

従来の事業から少し距離があった際の指標の取り方上記のとおりです。

1.スプレッドシートで値を取得
paizaの本番DBとデータを同期し、一部テーブルにアクセス制限をかけているレプリカDB(MySQL)に、スプレッドシートのGAS経由で値を取得し、スプレッドシート上に自動更新していく。スプレッドシートのGASはバッチ実行などできるのと、SQLをfor文で回せることもあり、いろいろできるのですが、GASを書かないといけないのでメンテコストがかかります。
最近は時間がなくてGASのメンテができず、ほかにメンテする人もほとんどおらず、ある意味技術的負債と化していました。

2.直接レプリカDBをたたいて値を取得
手動でSQLを書いて値を取得するというベーシックな方法。上記スプレッドシートのGASでの対応が間に合わなかったりするものや、データが重すぎてGAS経由だと拾えないものなどはこちらの方法で対応。

3.それらをエクセルに統合、計画データと突き合わせる
1,2は自分で値をとっていましたが、事業部でもとってるものなどはそのデータを共有してもらって、エクセルにコピペするなどしていました。

…とにかく集計と付け合わせに時間がかかる!

集計と付け合わせだけで半日ぐらいつぶれていました。
そのため指標を簡単に増やすことがやりづらく、問題が起きたときに数値をとりに行くことになるため対応が遅くなる、という課題がありました。

プロダクトサイドに戻ってきた当初の数値の取り方

プロダクトサイドに戻った当初の指標の取り方

プロダクトサイドに戻った当初は、指標管理の仕組みよりも分析を優先でやっていたので、以前の指標の取り方に加え、さらにGoogleDataSutudioからデータをCSVエクスポートでしてエクセルと突き合わせる、ということが発生しました。

プロダクトサイドに戻って数値分析とヒューリスティック分析をまずやっていたのですが、SQLを自分で書いて分析しているほどの時間は取れなかったのと、複雑な条件や重いデータの処理などもあったため、そのあたりはSQLが得意な方にお願いして、Redashで拾えるようにしてもらっていました。またMySQLを直接たたくと重すぎて見れないようなものも出てきたので分析基盤はBigQueryに移行してもらいました。
そうこうしているうちに、この条件変えたらどうなるか、みたいな細かい条件変更が出てくるようになったためDataStudioで条件を変えて分析できるようにしてもらいました。

そんなこんなでいろいろな角度で分析を素早く進めることはできるようになり、計画も立てられたのですが、予実管理のフェーズになるとDataStudioから毎回CSVでエクスポートしてエクセルと突き合わせるのは時間がかかり、苦痛でしかありません。

解決方法:Redash→スプレッドシートで自動更新

現在の指標の取り方

計画との突合せをエクセルからスプレッドシートに変更

まずやったことは、計画との実績数値の突合せを従来エクセルでやっていたものをスプレッドシートに移行しました。グラフ作ったり、細かい部分で予実管理などはいまだにエクセルの方がやりやすかったりするのですが、自動化することと、メンバーへの共有の手間&即時性を考えてスプレッドシートに移行しました。

こんな感じで横軸に月、縦軸に各指標ごとに実績、計画、達成率を出して、達成状況がすぐにわかるようにしました。1サービスでトータル500行ぐらいにはなってしまうのですが、ここでは見やすさよりも網羅性を重視します。
見やすさの観点では、重要KPIだけサマったものを別シートにだしたり、ロジックツリー上にして予実を出す形を作ります。

RedashからAPI経由でスプレッドシートに読み込み

データベースは一部レプリカDB(MySQL)と、重い処理のものはBigQueryで分けていますが、どちらもRedashでデータをとるように変更しました。複雑の条件のものは得意な人にお願いしつつ、単純なものは自分でもSQLをどんどん書いてRedashに移行をしました。BigQueryは早くて楽しいですが、料金が常に気になる…。

RedashはSQLの定期実行も指定できるため、毎日朝方に実行するように設定を行っておきます。RedashからはAPI経由でCSV呼び出しができるので、スプレッドシートでそれを読み込みます。それを予実のシートで参照します。

ここで困ったのが予実シートは月の進捗が横軸なのに対して、Redashで吐き出されるものは月の進捗が縦軸ということです。このあたりはスプレッドシートのindex関数とmatch関数を使って値を拾ってくるようにしました。
match関数を使うことでRedash側で出力するものを追加したり、間に足したりしても、項目名さえ同じであればスプレッドシート側では特に何もせずとも正しい値を拾えるので便利です。
↓こんな拾い方をしています

=iferror(index('シート名'!$A$1:$X$500, match(日付セルの指定,'シート名'!$A$1:$A$500,0), match("SQLで出力する項目名",'シート名'!$A$1:$X$1,0)),0)

完全自動化後、より状況を分かりやすく整理

これらのことによってスプレッドシート上の数値は毎日自動更新されるので、予実管理が劇的に楽になりました。指標を追加したいときもRedashでSQLを書いて、スプレッドシートにAPI経由でインポートして、というのも割と簡単にできます。

ただ次に課題になったのは見やすさと分かりやすさです。毎日指標を見てると肌感として事業の動きが見えるようになってくるのですが、自分以外の人にはほとんどそれが伝わりません。そこで他の事業でやっていたのをまねして、ロジックツリーに予実を反映して、日数進捗ベースで、計画を超過できてるのかビハインド出来ているかを見れるもの取り入れました。

自分のアイデアではないですがこれは結構良いです(ぼかしてます)

スプレッドシートでロジックツリーをを作って、今月の計画と、現時点の実績、達成率、日数進捗(たとえば15日だったら50%進捗)ベースで計画通り進捗してれば晴れマーク、9割以内だったら曇りマーク、9割未満だったら雨マークが出るようにして、どこが詰まってるかすぐわかるようにする、みたいなものを作ってチームで共有する形にしました。ロジックツリー上でも特にポイントとなる項目は色を変更してどこを見るべきかを示しました。
こちらも完全自動更新されています。

こうすることで、打ち手の検討着手が圧倒的に早くなりました。よりポイントが明確になり、なんでこの数値悪いのか?というときは詳細の指標を見に行くことですぐ要因が分かります。またメンバーとも状況を共有できるため、課題感がそろった状態で検討、改善実施が進められるためコミュニケーションコストの削減もできます。

まとめ

自分で毎週数時間かかっていた作業を、自分で自動化して、自分がその恩恵を受けるというのはネット&エンジニアっぽくって最高に楽しかったです。エンジニア以外の職業の人もこういった自分で自動化して自分の仕事が楽になる体験を早いうちに経験できると、日本のDX化はもっと進捗するんだろうなと思います。プログラミング教育は、プログラミング的思考を教えるより、このような自動化体験をおし進めた方がいいのではないだろうかと良く思います。

このあたりのことを一緒にやってみたい、という人がいたら是非お声がけください。(結局採用につなげる)
これを社長業やりながら自分で手を動かしてやるのはやっぱり大変で、毎週末ちくちく作業をしてやって作り上げたのですが、まだここまでやれてないサービスもあったりするので、一緒にやってくれる人を探してます。

paizaの採用情報
https://www.paiza.co.jp/recruit/


この記事が気に入ったらサポートをしてみませんか?