カミナシのソフトウェアエンジニア @imu です。
ソフトウェアエンジニアの仕事をしていて、やりがいを感じられる瞬間はいくつかありますよね。例えば、「新規機能開発をする」「新しい技術に触れる」「モノづくりが楽しい」などが挙げられます。ここ最近、私自身が一番やりがいを感じるなと思うことがあります。
それは「ユーザーからフィードバックをもらう」ことです。
日々の開発をする中で、ユーザーからフィードバックをもらうことは少ないかも知れません。直接ユーザーと会話する機会が少ないので、作成した機能や改善したことがユーザーのためになっているかを把握することは難しいです。
今回、技術的負債を解消した結果、ユーザーフィードバックが社内に共有される良い文化の事例をご紹介したいと思います!
目次
技術的負債解消のキッカケ
今年に入って一括承認の機能でエラーの頻度が多い傾向にあり、調査してみると承認のユースケースは様々であることが分かりました。
- 毎日、就業後に本日分をすべて承認をするユーザー
- 1週間、1ヶ月など、1度にまとめて承認をするユーザー
この「1度にまとめて承認をするユーザー」で、大量の承認データを溜め込んでおり、一括で承認しようと思ったらエラーになってしまい、ユーザーの心理的には「エラーになるなら使わない、いずれ修正されるだろうから後で対応しよう」と思うはずです。
プロダクトの価値をすべてのユーザーに届けられていない機能になってしまうことは、どうしても避けたくてこの技術的負債に取り組むキッカケとなりました。
一括承認とは
「カミナシ」のアプリケーションで記録したデータに対して、決められた承認フロー(一次承認 → 二次承認 → 最終承認)の順に、押印していく業務を一括でシステムで行うものです。
ざっくりではありますが、以下のイメージ図を参照してください。
技術的負債について
課題
一括承認に時間が掛かるようになった
原因調査
データベースのスナップショットを復元し、DatadogのAPMを使って、ユーザーごとに調査すると、全ユーザーで起きている問題ではなく、特定のユーザーで発生頻度が高いことが分かりました。該当ユーザーの条件で MySQL Explain をしてみると、ほぼ全レコードを検索していることが分かりました。
該当クエリ
以下はsample1, sample2 には 10000 レコード
ある状態の結果です。
※実行計画が分かりやすいようにクエリを書いているため、クエリに意味はないものとしてください。
explain select * from sample1 where id in ( select id from sample2 where id > 10000 group by id -- having句 having count(id) > 1 );
何が起きているのか
実行計画を見ると、sample1
テーブルを rows: 9986
件検索するようになっています。
サブクエリで取得される結果が0件かつ、HAVING句を含んでいるとき、主テーブルがほぼ全件検索になることが分かりました。
-- サブクエリにHAVING句を含んでいないとき explain select * from sample1 where id in ( select id from sample2 where id > 10000 );
解決案
遅くなっていた箇所のクエリは、サブクエリの結果が0件になる可能性があるため、サブクエリをやめました。ただ、サブクエリをやめる場合に注意したいことは、データベースへの問い合わせが増えてしまうデメリットがあります。
今回のケースではパフォーマンス劣化はほぼ見られなかったのでこの対応を行いました。
-- result1 select id from sample2 where id > 10000 group by id -- having句 having count(id) > 1 ; -- result1の結果が 0件 なら以下のSQLを投げないように条件を追加する -- result2 select * from sample1 where id in ( `result1の結果` ) ;
ユーザーフィードバック
普段ユーザーとの距離が近いCSチームのメンバーから、ユーザーのフィードバックを社内Slackに共有していただきました!
こういうのは素直に嬉しいですよね!
まとめ
カミナシのバリューにある「β版マインド」を実践して本来のプロダクト価値を届けることで、ユーザーから嬉しいフィードバックをもらい、社内で共有される良い文化があることが伝われば幸いです!(今回は嬉しいフィードバックでしたが、ユーザーからプロダクトに対してもっとこうして欲しいとか、こうなると使い勝手が良くなる等のフィードバックも盛んにSlackで共有されています)
こういった文化が良いなと思った方、少しでもカミナシに興味がある方はカジュアル面談からでもよろしくお願いします!