menu開発チームの課題改善

はじめに

こんにちは。menu開発チームのサーバエンジニアリーダー兼PM業務サポートの友兼です。
menu開発チームは少人数のエンジニアチームとしてスタートしました。
当初はテイクアウトアプリとして様々な機能を試しながら開発を行なっていました。
そして2020年の4月に本格的にデリバリー機能も追加され、この1年でユーザが急激に拡大しました。
それに伴いチームに様々な変化があり、その変化に対応すべく業務改善を行ってきました。
主にタスク管理とサーバエンジニアとしてのツール導入などの改善のお話をしようと思います。

プロジェクト進行について

menuチームではプロジェクトのタスク管理にJIRAを活用しています。
タスク管理にJIRA、wikiとしてConfluenceを利用している会社やプロジェクトは多いかと思います。

JIRAでタスク管理をする中でよく問題となるのが、プロダクトマネージャーやタスクを管理するリーダー層が求めるUIがないということがあります。
タスク管理のサポートとして自前で課題を整形したWeb画面を作ってPMのサポートを行なっております。
また課題の作成方法が統一されておらず、QAチームと実装を行うエンジニアチームで認識の齟齬が発生していました。
こちら課題作成のルールを作り、この課題ではこの項目をチェックするということを明示化しました。
またエンジニアは作業の課題を作るのですが、その内容をQAチームやPMの人が見ても理解できないという課題も発生しました。
エンジニアとPMの両方の経験がないとなかなか両者の気持ちがわからないと思うので、そこの間に自分が入って整理しました。
こちらはラベルや課題タイプでエンジニアの作業タスクとチェックするアウトプットがあるものに分けました。

f:id:SatoshiTomokane:20210818142822p:plain
課題のサマリをslackに通知

負荷対策について

menuチームのサーバ負荷のプロファイリングツールとしてNew Relicを使用しています。
急激なユーザ増加でトラフィックも何倍にも増加しました。
余計な処理の削除など現在動いている処理のリファクタリングをするのは勇気のいる行為でしたが、負荷でアプリケーションが重くなるというのはUX的に見てもかなりマイナスだったので優先的に対応しました。
SQLのチューニングや責務を持ちすぎて重くなったクラスの細分化などいくつかの対応をして今ではピーク時でも平均100msほどでレスポンスが返せるようになりました。
一時はPush通知などのアクセスがスパイクするタイミングでAPIが重くなってタイムアウトして施策が思うように実施できない時期もありました。
これからも機能追加のたびにボトルネックが移動するというリスクがあるので、日々リリース後のプロファイリングは継続しています。

f:id:SatoshiTomokane:20210816102523p:plain
NewRelic

安定運用するためのツール導入

当初はユニットテストを書いておらず、デグレがよく発生していました。
途中からAPIのIFなどから書くようにして、いまはクラス単位でも書いております。
テストの粒度や外部通信など他のプロダクトでも課題になりそうな箇所は都度相談しながら対応しています。
APIのIF仕様書も当初はオレオレフォーマットの仕様書となっていました。
現在はSwaggerにリプレイスしてフォーマットの統一を図っています。
人による差異がなくなったのでクライアントエンジニアとのIFの意識疎通も齟齬がなくなりました。

データベースへのDDLの同期処理も当初は各自でSQLを共有して行っていました。
ただ定義の差異で動かなくなることが多くてマイグレーションを導入して現在の開発人数がカバーできています。

今後の課題について

今回はプロジェクトメンバーや人数のスケールによって様々な改善があったという事象を簡単に説明させていただきました。
ただフェーズによって開発方法の最適な手順があるので、ツールを入れれば解決ではないというのが難しいなと思いました。
的確に課題を理解して、適切なソリューションを適応することこそが改善業務としてやっていくべきことかと思っています。
現在も様々な課題を抱えており、通常の機能開発や運用と並行して改善を行っております。
過去の経験やスキルを活かして、この課題を一緒に解決してくれる仲間を随時募集しております。

reazon.jp