Eureka Engineering
Published in

Eureka Engineering

2021-eureka Backend Team振り返り

この記事は「Eureka Advent Calendar 2021」の11日目の記事です。

初めまして。こんにちは。
来年の2月でエウレカに入社して丸9年となりこのままクビにならなければ10年目に突入しそうな山下です。
私が入社した頃はPairsをリリースして半年ほど経った時期で、今とはサービス規模も会社の規模も段違い。私自身も受託のエンジニアから始まりインフラチーム(一人)→Pairsのグローバルプロダクトチームの立ち上げ→Pairsエンゲージの立ち上げ等々変遷していき、そして今年はBackendチームのマネージャーを務めることとなりメンバー及び経営陣と力を合わせてなんとか良い年を越せそうな今日この頃です。

本記事では今年1年間のチームの活動を振り返っていきたいと思います。

目次

  • チーム体制の変化
  • チームイベントの紹介
  • プロダクト開発に関して
  • システム改善の取り組み
  • 今後の話

チーム体制の変化

昨年までは一つのチームだったのですが、今年はCTO直下のUnder the hoodチームが爆誕しました。とはいえ並行で動いている開発が多くある中でなかなかチームを二つに分けるのは難しく、元の一つのチーム体制から大きく変わることはありませんでした。しかしUnder the hoodのメンバーの中でプロジェクトのアサインを回避し、100%技術的な改善をしていくメンバーを1人置くことに成功しました。このスーパーエンジニア daisuzu の活躍は後ほど紹介します。

また、同じサーバサイドエンジニアでありながらPairsに限らず他グループのサービスやグループ間でのブリッジの役割を担っている特質系のエンジニアが1人いました(Architect)。私はこのエンジニアもBackendチームに巻き込んでいくことでチームの成果を最大化することを目論んでいました。

Backendチームのメンバーは基本的に各プロジェクトにアサインされて、それぞれ機能開発を行っていきます。現在私も含めてサーバサイドエンジニアは12人ですが、全てのメンバーと週次で1on1を行いそれぞれの役割を全うできるようにコミュニケーションをとっていきました。

チームイベントの紹介

先に説明したように各メンバーがそれぞれ役割を持ってそれぞれのプロジェクトで活躍していくために、Backendチーム全体で日々より良い開発ができるようにチームで取り組んでいきました。

Daily MTG

毎日11時から15~30分ほどでタスクカンバンをみながらそれぞれ今日やることを確認します。

主に困っていることや、他プロジェクトに影響がある事柄などを確認し、問題があればチームで解決していくようにコミュニケーションをとっていきます。

また、SREチームが作成したシステムダッシュボードを見ながら日々システムに異常がないか、改善しているか全員で確認をします

さらに、毎日お問い合わせの一時受けをする担当を決めており、抜け漏れのないシステム運用をしています。
上記のシステムメトリクス等で異常が見られた場合や、何か気になるエラーログ等を見つけた場合などはチーム専用のカンバンボードにタスクを追加し、これもDaily MTGで進捗等を確認していきます。

レビュー会

2週間に一度その間に作成されたプルリクエストで学びのあった部分や良いディスカッションなどを見直します。日々コードレビューは行っていますがこれだけのメンバーが全員のコードを全て確認していくのは難しいので、この会があることは非常に良いナレッジシェアの場になっています。

振り返り会

2週間に一度KPTで振り返り会を行います。ここででたTryが技術的な改善タスクに繋がったり、ワーキングアグリーメントとしてチームの文化になっていったりします。

直近ではこの会がある日をチームの出社推奨日としており、この日は会社でメンバーと直接会って話せる楽しい日でもあります。

Go勉強会

毎週1時間程度特にアジェンダを定めずに各々気になったものや、日々垂れ流しているGoに関するトピックをざっくばらんにディスカッションしたりシェアしたりする会です。直近ではみんなでモブプロしながらOSSにコミットしたり、静的解析ツールを作ったりしています。ここでの話だけでたくさん技術ブログが書けてしまうのでまたの機会に是非アウトプットできればなと思います。

チームランチ

週1で会社の補助(1人1500円)が出るのでリモートでチームランチが開催されます。この会は一人一人持ち回りでコンテンツを用意しているのですが、ワーキングアグリーメントしたり英語でトークしてみたりゲームをしたりとその時々でとてもリフレッシュできる良い時間になっています。

基本的に仕事の話はしたくない時間ではありますが、ついついGoのエラーハンドリングの仕方やAPI仕様書の管理等で議論がヒートアップしたことも良い思い出です(笑)

Backend/SRE Sync

SREチームと一緒にシステムの課題点や開発環境の最適化などについて話し合う場です。今年はSLOの設定やビルドデプロイの高速化等、高品質で安定したシステム開発および運用をしていくために様々なディスカッションをしてきました。

プロダクト開発に関して

今年もコミュニティチャットプリペイドカードなど多くの新しい機能や仕組みがリリースされました。

それぞれ主に担当しているメンバーがいる中でもチームでシステム設計のレビューをしたり、時にはヘルプに入ったりとチームで課題解決していける部分が多くありました。

また、Backendチームのメンバーの多くが各プロジェクトでTechLeadの役割を担っています。プロジェクトの推進をしていく上で1人の力ではもちろん限界がありますし、PdMやデザイナー等他の職種の課題も様々です。これらの課題もBackendチームの中で何か解決できることはないかを考えアクションしていくことができた良い年でした。例えばAPI仕様書やPRDの整備・プロジェクトチームの振り返り会の開催やデバッグ機能の拡充などを行うことができました。

システム改善の取り組み

プロファイラーの活用

今年の中頃からモニタリングツールでプロファイラーを見れるようにし課題を見つけて解決していく取り組みも進めていきました。

特にインパクトがあったのはスケジューラの改善です。インメモリキャッシュに使用していたライブラリーがTTLの管理にtimerを利用しており、その様子がプロファイラーで可視化されたことにより課題に気づくことができました。そしてその部分を改善することで、CPU使用率を大幅に削減することができ、サーバの稼働台数を減らし大幅なコスト削減を実現しました。

技術改善全振りのスーパーエンジニアとUnder the hoodチーム

先に説明したプロジェクトにアサインされていないメンバーを1人置くことで、今まで取り組めなかったシステムの改善を推進する役割を担ってもらい、多くの負債の返済と改善を協力して進めていくことができました。

  • ORMのアップグレード
  • DBコネクションの一本化
  • E2Eテストの拡充
  • AWS SDKのバージョンアップ
  • Go mod cacheを利用したBuild時間の高速化
  • データ不整合によるオペレーション発生箇所の修正
  • エラーログの整備および改善

などなどあげ出したらキリが無いのでこの辺りで

また、Under the hoodのメンバーと週次でMTGを開き技術的な取り組みに関してざっくばらんにディスカッションすることで、上記のような改善を進めていく上で最適な進め方を選択できたと思います。例えばPairsエンゲージのシステムはPairsとは別にあるのですが、GoであることはもちろんORMが共通だったりもするので、Pairsエンゲージで先に改善できたものをPairsに移植する等の取り組みもすることができました。

さらに一日一善という文化を根強く推進してくれたメンバーもいて、日々の細かい改善も前年とは比べ物にならないほど進めることができました。

今後の話

Backendチームは現在でも新しいメンバーと構ってくれる外部のエンジニアを鋭意募集中です。
今年は多くの改善ができたしチームとしてまとまってきたなという印象ですが、まだまだやるべきことはたくさんあります。

ビジネスを最適な技術で爆速成長させられるチームとしてさらなる飛躍をしていきたいです。

最後になりますが、私はこの一年「自分がやらねば」という強い気持ちと「自分は何者でもない」という相反する2軸を持って仕事を進めていきました。結果自分は特に何をしたでもないですがチームとして多くの成果を出せたことは本当にチームメンバー並びにCTOや他チームのメンバーの協力があったからです。今年も一年誠にありがとうございました。

--

--

--

Learn about Eureka’s engineering efforts, product developments and more.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Kento Yamashita

Kento Yamashita

More from Medium

Building a real-time serverless chat application on AWS with Go and Vue 3: Part 1

Writing a custom matcher for testing with gomock

What I Learned This Week (15-Feb-2021 to 21-Feb-2021)

DynamoDb with AWS SDK Go v2 — Part 1