こんにちは、株式会社Schoo(以下、スクー)のタキザワです。
今回は、私が企画したミニハッカソンについて、
取り組みとして面白かったので紹介したいと思います。
なぜやることにしたのか
他のSasSと同じく、スクーでも、より使いやすいサービスの追求にあたり、
軽快に動作するサービスであることの重要性は年々高まってきています。
そのため、機能の拡充だけでなく、性能の改善も避けては通れない課題となっています。
性能改善が求められる機能について、その状況は様々です。
きちんと原因調査し再構成や再設計が必要となる箇所もあれば、
三人寄れば文殊の知恵でサッと対応できそうな箇所もありました。
特に後者の、サッと対応できそうな箇所は、
開発優先度に沿って順次対応するのではなく、
有志が集まればスピーディに対応できるのではないかと考え、
ミニハッカソンとして取り組むことにしました。
計画にあたり工夫したところ
気軽に参加できる雰囲気にする
今回のミニハッカソンは、名前からも分かる通り、小規模なものとしました。
- 期間:数時間
- 規模:数名〜十数名を想定
- 場所:オンライン
- テーマ:サクッと性能改善
オフサイトの会場をおさえ、数日かけて取り組むやり方も考えられますが、
今回はサッと対応したいというのもあり、参加のしやすさを重視しました。
実施のタイミング
少し遡りますが、この取り組みは今年のゴールデンウィーク明けに実施しました。
スクーはプロダクト開発をスクラム開発で進めています。
スクラム開発では、安定した成果創出が求められますが、
ゴールデンウィークや年末年始は祝休の連続や有給奨励等で
メンバー稼働が不安定になり、スプリントを進めづらくなります。
そこで、それを逆手に取り、こういった取り組みをするスプリントにすることとしました。
今回は呼びかけに対し、なんと、6名もの方が手を挙げてくれました。感謝です!
競技性をもたせて楽しく!
今回のテーマは性能改善のため、性能試験を行うことでスコアを出すことができます。
そこで、今回集まってくれたメンバーを2つのチームに分け、対決方式での実施としました。
競技性のアイディアは、私が競技プログラミングをやっていて
面白いと感じた要素を参考とし、ルールを下記のように設計しました。
- ボトルネック調査から改善実装までを3時間以内に行う
- 試験環境を使った事前計測を、好きなタイミングで1度だけ行うことができる
- 本試験として、k6を利用して10分間連続して高負荷状態でのページアクセスを行い、その間のリクエストからページ初回レンダリングまでにかかった時間の95パーセンタイルが小さい方の勝ち
- 時間内に改善実装が完成しなかった場合は失格とする
- エラー率が1%以上になってしまった場合は失格とする
- チームの全員が何らかの形で関わり貢献していること
実施してみてどうだったか
最も印象的だったのが、2つのチームの、解決のためのアプローチが全く異なっていたことでした。
(Aチーム)
- データベースからのデータ取得でボトルネックになっている部分を特定し、クエリチューニングを行う
- 似たクエリを何度も呼び出している部分についてクエリを集約する
(Bチーム)
- ページレンダリングで最も重たい部分を特定し、遅延読み込みに変更する
競う相手がいたからこそ、何となく「改善できたらいいね」ではなく、
どのようにすればこのシステムはもっと上に行けるのか、という視点で、
より真剣に取り組めたのではないかと思っています。
結果と良かった点
結果としては、Bチームの方がより性能改善されていたものの、
アディショナルタイムでも実装を完了させることができなかったため、
Aチームの勝ちとなりました!
やってみて、特にやってみて良かったと感じた点をお伝えします。
- 普段同じチームで仕事をしていないメンバーとの交流ができ、イベント後も仲間意識を感じられる関係性になった
- 普段の業務ではなかなか関わらないプロダクトへの理解が深まった
- 自分にない発想を学ぶことができた
- 新たな改善課題を見つけることができた
- 休み明けのいいリハビリになった
普段と違うことをやることで、私も含め、いい刺激となりました。
課題点
実際にやってみると、どちらのチームも3時間で実装を終えることはできなかったため、
急遽ルールを変更し、1時間のアディショナルタイムを設けることになりました。
課題の難易度評価や、それに見合った時間設定等、次回以降の反省点にしたいと思っています。
終わりに
競技性を持って取り組んだため勝敗をつけていますが、
それぞれのアプローチはトレードオフではないので、
プロダクトにはどちらのアイディアも反映しています。
様々なアイディアが得られたという点でも、やってみて良かったと感じています。
生成AI等も活用しながら企画したので、準備に使った時間はだいたい2時間くらいでした。
その時間に対して、マンネリ解消、チームを超えた交流や、アイディアのブレスト・共有など、
様々な効果を見込めるので、リターンは大きいと感じています。
本稿が皆さんの新しい取り組みの参考になれば幸いです。
Schooでは一緒に働く仲間を募集しています!