それでも気分は高専生

元高専生が自分のやってきたことを記事として残すためのてきとーなブログ

チームで補完しあうということ @アドテクコンペ優勝しました

先日,CyberAgentさんのアドテクコンペに参加させていただいた.
記事にするのどんだけ遅いんだよ!って感じだけど,直後から始まった就活や研究のテーマ策定,その他プライベートでゴタゴタがあり,なかなか時間がとれないでいたので赦して.

アドテクコンペってなにするの?
アドテクコンペこんなんだったよー!
みたいなことは終わって直ぐに書いてくれた偉大な参加者の方々がいるので,詳しくはそちらの記事を参照されたし.
(みんな解説記事めっちゃ良く出来てるし,技術的解説もしゅごいのでそちらを見てもらったほうが絶対にいい)

ここでは優勝してしまったチームのメンバーとして,「参加したら実際はこんな感じで進んだよ」「なんで優勝できたんやろ?」「技術力があんまりないやつはこういうところでどう動けばいい?」ということを中心に書いてきまふ.

(申し訳程度な)アドテクコンペの紹介

いいか?広告業界では3つの会社がある...それは
A:「 広告の枠を提供する会社」
B:「 広告の枠に表示させたい会社」
C:「 みんながハッピーになれるよう効率よく橋渡しする会社」
だ.

サービスを利用してもらってなんぼのもんだ...そのためにはまず訪れてもらわなきゃ始まんねぇ.
そこでBが広告を打ちたいとするだろ?
でもよ,あんまり無駄玉撃ってちゃ素寒貧へ急降下ってもんよ.
しかも誰も自分のサービスに来てくれねぇならただの無駄遣いさ.
それはAも一緒でさあ.
全くクリックされねぇ広告ばっかり表示されてちゃ全く金になんねぇ.
こんなんじゃAもBもおまんまの食いっぱぐれで誰も幸せになれやしねぇ.

そこで俺達Cが入って来るわけさ.
やりたいことは至って簡単.
広告を見るユーザを解析して,B1からBnまでどの会社の広告をAに渡せばいいか...みんながハッピーになれるよう橋渡しする.
それが俺らのお仕事ってわけさ.

しかしまあ,世の中そうも上手くいかねぇもんでよ.
同業者なんていくらでもいる...
そこでお金がほしいAは俺達をオークンションにかけるんだよ.
しかしBも予算が無尽蔵にあるわけじゃない.

そう,俺達が開発するDSPの仕事ってのは
「濁流のように流れてくるアクセス(広告枠のオークション)」に対して
「クリックされやすさを予測」しながら,
「Bが損をしにくく,Aが得をしやすい金額を提示」することなんだよ.

そんな綱渡りみたいなことを3日間でどこまで上手くやってのけるのか,それがアドテクコンペってわけさ.

チーム構成

チーム構成は以下のとおり.
データサイドはよく分からなかったけど...
サーバサイドはO君がとにかくすごく,自分はそのサポートに終始徹していた感じだった.

サーバサイド

  • O君 : N高等学校 2年生
    • 某C社でアルバイトをしてるスーパー高校生!
    • Docker, Go, k8s, Redis, GCPを一通り触り慣れてる感
  • わし : 徳島大学大学院 修士1年
    • 研究テーマが認証とかネットワークとか
    • Goとか2ヶ月ほど触ってない,KVSとか触るの初めて
    • 直前のインターンではPHPとかDockerfile,YAML書いてた人

データサイド

スケジュール(サーバサイド)

アドテクコンペ全体としてのスケジュールは,全体で3日間.

  • 初日
    • 午前はアイスブレイクとレギュレーション説明
    • ランチからの即プロジェクトスタート.
  • 二日目
    • 一日をフルで使える実質唯一の日
    • ここでどこまで完成形に近づけるかが勝負
  • 三日目
    • 午前中が開発(ここまで来ると調整やバグ修正ぐらいしかできない)
    • 午後からDSPを使ってオークション(4時間),同時並行的に成果発表会

といった感じになる.

ちなみに自分のいたチームのサーバサイドはスケジュールを細かく見ると,以下のような感じ.

  • 初日
    • 共通のタスク
      • 自己紹介,レギュレーション説明
      • ランチ(豪華な弁当)!
      • アーキテクチャ設計
      • 技術選定
    • 自分のタスク
      • エンドポイントをローカルで構築 (win, bid)
        • 戦略は全て入札
        • 動くことを最優先 (トラフィック負荷を確かめたかった)
    • O君のタスク
      • インフラ整備 (LB, k8sクラスタ, Redisサーバ)
      • Redisサーバを用いた資金管理の実装
  • 二日目
    • 共通のタスク
      • メトリクスをダンプするエンドポイントの設計
    • 自分のタスク
      • メトリクスをダンプするエンドポイントの設計と構築
      • メトリクスをRedisで管理するよう実装
      • 仮の入札ロジックを簡単に実装
    • O君のタスク
      • Prometheusの導入
      • 負荷に合わせてインフラ設計の見直し (クラスタの増強)
  • 三日目
    • 自分のタスク
      • データサイエンス側のモデルを用いてCRC予測を行うロジックを構築
      • 早朝,データサイエンス側から間に合せのモデルをもらい動作することを確認
      • モデルを入れ替えやすいようにコードを整備
      • バグ修正
      • データサイエンス側が更新したモデルを即座にサーバに反映しPush
      • プレゼン資料作成
    • O君のタスク
      • Prometheusで取得するメトリクスの調整
      • Prometheusのダッシュボード整備
      • 更新したサーバのデプロイ
      • 本番中の監視とAPIを通じてパラメタ調整

優勝の要因

自分が思うに,チームの優勝要因は連携やパワーバランス,担当などの総合的な「チーム力の強さ」にあったと思う.
そしてチーム力を発揮できるよう「優勝する」という明確な目標を立てたことがこれを引き出させた.

技術力でみれば,O君は本当に強かったけど,自分はこういった短時間でものをつくるのに慣れていないし,使用言語やツールについても深い知見などは全然なかった.
他のチームには全員がすごい技術力を持ったチームとか結構あったし,それこそテータサイエンスと実装の両方ができる強者もいた.
みんな技術スタックが強い.
自分のチームはPrometheus + Grafana を使って監視環境を整備したのも強かった(実際メンターの方にもすごく褒められた)が,他にも似たようなことをしているチームはあった.

でも他のチームを見ていたり,メンターの方々からの話を聴く限り,

  • チームの雰囲気
  • コミュニケーションの活発さ

この2つだけはどこのチームにも負けていないなと思った.

雰囲気がよかった理由

一番の理由は,「みんないい人」だったこと.
そんな人たちだからこそ, お互いを尊重しあいながら話し合いが進み,
根を詰めすぎることなく,趣味や大学の話をしながらデスマにありがちなギスギスした雰囲気を避けることができ,
迷わず「優勝」を目指せた.

加えてコミュニケーションのとり方が良かったように思う.
異なる人間なので必然的に技術力や領域に差が出てしまう.
そんなときに素直に相談や質問をしていたし,それを受ける側も邪険にせず快く相談にのっていた.
デスマしていると,どうしてもイライラしたりしてそうできないときがあると思う.
「遠慮しないで配慮しよう」これは初日にCAの社員の方がおっしゃっていたことだけど,これを実践できていたお陰で建設的な議論や仕事の割り振りができたし,最後まで雰囲気が崩れなかったのだと思う.
相手の立場(考え方や技術力の差)を意識して,ちゃんと質問する,或いは答える,これは本当に大切だった.

あとアドテクコンペ終了後のデスマはとあるカフェを利用していた.
ご飯食べながらだし,会話もそこそこしていたし,営業時間が23:00までなので,作業がすごく捗ったわけではない.
でもあのリラックスした空間での作業が打ち解ける一因になったかも.

チーム内での立ち回り

自分はO君に比べれば技術力がすごくある!というわけでもなく,ましてやデータ側に参戦できるような知見があるわけでもない.
またリーダーとして引っ張っていくようなマネジメント力もリーダーシップもない.
そこで自分はO君が実装に集中できるよう,

  • データサイドの予測モデルの受け渡しを策定
  • 予測モデルの実装
  • O君の実装のリファクタリング
  • O君が今後実装で必要になりそうな箇所の実装

に集中して努めた.

感想

自分が目立ってチームを優勝に導いた!みたいな感覚は得られなかったが,確実にチームを優勝へ近づけたという感触はあった.
「最初,アドテクコンペは技術力がものをいう!」みたいなイメージがあったが,案外こういったチーム力の影響も大きいんだなと思った.
自分ができることを活かして,お互いを補完し合うってすごく大事.
そんなアドテクコンペでした.

チームのみんな!開催してくださったCAのメンターの方々,素晴らしい3日間をありがとうございました!