Skip to content

Instantly share code, notes, and snippets.

@shoito
Last active May 12, 2021 07:16
Show Gist options
  • Save shoito/3c76dcb2916d58cce019 to your computer and use it in GitHub Desktop.
Save shoito/3c76dcb2916d58cce019 to your computer and use it in GitHub Desktop.
eureka Go ~pairsのGo言語フルスクラッチの舞台裏〜 http://eure.connpass.com/event/22873/

eureka Go 〜pairsのGo言語フルスクラッチの舞台裏のメモ

タイムテーブル

  • 14:30 キーノートスピーチ(石橋)
  • 14:50 pairs.goのアーキテクチャと運用を考慮したプロジェクト基盤の整備について(金子)
  • 15:10 Go言語周辺ライブラリの活用(森川)
  • 15:30 休憩
  • 15:45 Go言語アプリケーションを実現したインフラ(松尾)
  • 16:05 大規模プロジェクトマネジメントの勘所(石橋&泉森)
  • 16:25 休憩(会場配置変更)
  • 16:50 分科会
  • 18:30 懇親会
  • 20:00 終了

キーノート・スピーチ

couples

  • ユーザー数310万人

eureka

  • 社員数95人
  • 半数がエンジニア
  • 2015年5月にIACに買収された

IAC Groupでのミッション

  • アジア市場を制覇すること

pairs

  • PHP(CodeIgniter) -> Go
  • 売上数十億/年
  • DBテーブル数158
  • サービスのKPIとか数値はめっちゃ取ってる

フルスクラッチ

  • 設計をイチから
  • DBの再設計
  • スケールしない設計だった
  • join前提
  • シャーディングできない
  • インフラの再設計
  • MPA -> SPA
  • Native appsのアップグレード

規模感

  • 1年1ヶ月(はじめは6ヶ月、6月リリース予定だった)
  • 30人
  • 2億 (人件費、サーバ構築費等々含む)

スケジュール1年1ヶ月

2014年末

  • 技術調査
  • 基本設計

2015/1-2

  • 基盤構築
  • 開発環境構築
  • 全体スケジューリング

2015/3-7

  • ソフトウェア開発
  • インフラ設計・構築
  • (ここまでPHP版の開発も平行)

2015/8-10

  • 品質
  • データの整合性
  • セキュリティ
  • パフォーマンス

2015/11

  • リハーサル&リリース(台湾版)

2016/1-2

  • リリース(日本語版)

人員

...

コスト

  • 人件費
  • サーバコスト
  • ソフトウェアテスト(外部会社)
  • セキュリティテスト 2億 + 機会損失コスト

なぜフルスクラッチしたか

背景

  • pairsは元々外注で開発されていて、技術負債の塊になっていた
  • スケールしないDB設計
  • クソコード

※ 元々外注でクソDB、クソコードになってしまったという点はOmiaiと同じ

なぜGoか

  • Safe Lang
  • High Performance Lang
  • Breakthrough Tech

pairs.goのアーキテクチャと運用を考慮したプロジェクト基盤の整備について

https://speakerdeck.com/kaneshin/eureka-go-our-designing-of-a-microservices-architecture

Go言語周辺ライブラリの活用

  • (ライブラリ紹介諸々)

Go言語アプリケーションを実現したインフラ

http://www.slideshare.net/yokoninaritai/eureka-go-20151212

大規模プロジェクトマネジメントの勘所

  • iOS/Androidのフロント-フロント以外はすべて破壊して、作りなおした

Goフルスクラッチの今のところの感想

  • 技術負債の返済ができた

  • 良いエンジニアを採用できた

  • この1年間で66人社員増(エンジニア38人)

  • 6ヶ月計画(6月)

  • 2015/04くらいにテストしてログインできないなどの欠陥だらけ

  • 6月リリース予定 -> 8月リリース予定 -> 11月リリース

大規模なプロジェクトに特有な問題

  • 1年という長い期間なので、チームをしっかり組めないときつい
  • スタープレイヤーのパワープレイに負荷が集中すると、そこがボトルネックになる
  • 属人化問題を防ぐ
  • チーム全体の状態がわかるものを作った
  • ガントチャートでもなく、バックログでもなく...
  • Google Spread Sheetで作った
  • クリティカル・パスを見える化

リリースした後に不具合とか出ましたか?どう対処しました?

  • 旧DB -> 新DBへの移行については入念にテストして事故らなかった
  • 既読が付く、付かないのような不具合はあった

どんな開発体制でプロジェクトを進めましたか?

  • 最初は石橋さんの方でガチガチのWF
  • WebやAPI、管理ツールの開発が始まった段階でカオスになり、5月に泉森さんに、それっぽくマネジメントを委譲
  • 泉森さんが全体のスケジューリングをし直した
  • WFをやめて、状況状況に合わせて進めた
    • 2チームに分かれて、1チームはなんちゃってスクラムだった(もう続けてない)
  • テストケース作成にディレクター陣だけを集めてなんちゃってスクラムを実施した
  • どこのテストケースを作るかバックログをまとめた
  • 結局はパワープレイでスクラムじゃなく、かんばんと朝会だけ

フルスクラッチをやってる間に、どうやってサービス運用してました?

  • 2015/06リリース予定で、6月まではガッツリとコードを書いてた(4人だけ)

  • 検証に入ってリリースするぞ、という段階で、検証チームと第2開発チームを作った

  • 最終的なリリース直前で、pairsチームの8割がGoに関わってた

  • 残りはガーディアンチームとして、旧pairsを運用していた

  • ガーディアンチームはなんちゃってスクラムで進めてた

フルスクラッチをやって当初の目的は達成できましたか?

  • 想定よりコンパイル速度が長かった(Revelのせい)
  • Revelをやめる大きな理由
  • Go言語はシンプルなので、新メンバーの立ち上がりが速い

最後に今後フルスクラッチをする人に「これだけは言っておきたい」ことありますか?

フルスクラッチプロジェクトで押さえとく3つのこと(石橋)

  • 品質保証
  • データの整合性
  • 負荷に耐えるパフォーマンス

反省点(石橋)

  • プロジェクト管理はしっかりやっとこう

悪いことはすべて起こると思うこと(泉森)

  • 最悪の事態をすべて洗い出しておく
  • 開発に半年、検証に半年
  • 開発と同等のコストが検証にかかると思っておくこと

分科会

  • 「スクラム」としてはやらず、なんちゃってスクラム
  • メンバーに「スクラム」とは言ってなかった
  • リニューアルは計画と実際でどの程度ずれた?軌道修正は?
  • 当初6ヶ月の6月リリース予定、4月時点の品質で無理と分かって、8月にズラしたがそれでもダメで、11月リリースに
  • 旧 -> 新で機能の削除、追加はなかった
  • レビュー&マージルールはどうしてた?
  • インターン生が多いので、その人たち(ジュニア)の分はレビューしてる
  • MTGみたいなのはどうしてた?
  • 少なめ
  • スタープレイヤーには集中してもらうために、Syncでの質問も避け、スプレッドシートに記載して、夜に答えてもらってた
  • リニューアルのための障壁になったのは何かある?
  • Microservicesの結合テストが遅くて、ログインできない、いいねできないとか基本的な部分の不具合が多すぎた
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment