そーだいなるらくがき帳

そーだいが自由気侭に更新します。

予選敗退から学ぶISUCON10の正しい歩き方

 チームメンバーの感想エントリーはこちら。

blog.kamipo.net

memo.sugyan.com

 良い問題だった。 それだけに悔しくて、悔しくて、この2日間ずっと考えてたけど、どこかで区切りをつけなきゃいけないので筆を取る。

去年の失敗から学んだこと

 先によかったことを書く。 まずギリギリまで手を動かせるほど力を出し切った。 兎に角みんな id:kamipo さんの 感想戦を見てほしいのだけどやりたいことはまだまだ沢山あった。 けど時間が全然足りなかった。 昨年のような手詰まりにならなかったのは成長だと思う。

github.com

 また初動の対応やNewRericを試す、愚直なprintデバッグを用意するなど反省を活かせたところも沢山あった。 こういうのは「去年と同じチームで出たメリット」だったなと思う。

 だからこそ、去年よりも悔しさは大きかった。 そしてそれだけ力を出し切って負けたのだから反省するところも多い。

チームリーダーとしての反省

 細かい反省点はすぎゃーんさんやkamipoさんの記事を読んでほしいけど、自分の視点から見ると大きく3つある。

  • チームではなく、強い個の集まり
  • 根拠を持った改善が弱かった
  • リスクを覚悟したアクションが取れなかった

これらを少し掘り下げていく。

チームではなく、強い個の集まり

 これは昨日、今日とチームで感想戦をやってて感じた。 僕らは個の強さをお互いがリスペクトしているが故に、それぞれに対してディスカッションできてなかったように思うし、良くも悪くも頼りっきりになっていた。 それは間違って無くて上手くいくこともある。

 しかし、ハマってしまったときにリカバリに時間がかかってしまう。 それが今回露見してしまった。

 例えば僕は「ちゃんと丁寧に読み解くのは得意じゃないがざっくりと全容を理解するのは早い」タイプで逆にkamipoさんは「丁寧に読み解くので全体を把握するのに時間がかかる」という特性があることを昨日初めて認識した。

 その結果、情報の不一致があってなかなか話をするタイミングを持てずにそのまま進むことになってしまった。 やり方としては特性を生かして、僕が読んだ上でkamipoさんにフィードバックする、アルゴリズムを考えてもらうところをすぎゃーんさんに依頼するなどをもっとすればよかったし、逆に手を動かすところに集中してもらえるように準備すべきだった。 また自分がざっくり把握した内容をブラッシュアップすることなく進んでしまったことで見落としなどからUNIONのチューニングの失敗など無駄な時間を掛けたことも多かった。

 タスクの整理にもついても似たような課題は多くて、まるでみんながよーいドンで勝手に走り始めて、そして走りきったという感じがある。 チームとして取り組む仕組み、そして僕のリーダーシップみたいなのが弱かったなと思う。

根拠を持った改善が弱かった

 全く根拠を持ってなかったわけではないけど、もっとできることはあったなと思う。 これはチームのコミュニケーションの失敗の部分でもあるのだけど、僕が「検索パターンのクエリが見たいです」って話を最初にしたときに、まだkamipoさんは手元の実行環境とかの整備の段階で*1その話が埋もれてしまい、効果の低い方から着手してしまった。

 特徴の組み合わせの検索が遅いことは明らかだったのでついそちらに着手してしまったが、ここでちゃんとクエリのパターンを見れていたらインデックスチューニングを先にできたかもしれない。 タラレバだけどそしたらkamipoさんの強みがより発揮されてたなーと反省が大きい。

 ちなみに僕らのチームはスロークエリログを全く出力してない*2。 こういうところに正直に僕の怠慢というか傲慢みたいなところがあったと思う。 これによってチームの貴重な時間を消費してしまって、時間が足りないとなってしまった。

リスクを覚悟したアクションを取れなかった

 残り1時間で出たアイディアはDBをレプリケーションして参照を負荷分散する、だった。 残り1時間でここからこの変更はちょっと怖いね、ってことでチャレンジすることができなかった。 勿論自分の準備不足も大きいがどうせ予選落ちなのだからチャレンジしてよかった。

 同じように最初にDBをテーブル単位でシャーディングするのはどうか?というアイディアもあった。 これは初手でやるには根拠が不十分過ぎるから怖いね、ということで採用しなかった。

 他にも結構大きな分岐点は何個があったがチャレンジができなかった。 これはISUCONという限られた時間で多くの制約の中で決断するには心技体、揃っていないとできないということを強く感じた。

 根拠を示し、しっかりとコミュニケーションを取れていれば違ったのかもしれない。 けどそういうのも含めて自分のリーダーシップが足りなかったなぁと反省している。

個としてSoudaiとしての反省

 リーダーシップとしての能力不足以上に技術力不足は強く感じた。 特にMySQL。 nginxの正規表現も苦労したが、それ以上にMySQLで「知っててもできなかったこと」がたくさんある。

 仮想列、空間インデックス、レプリケーション、関数インデックス。 全部使えれば全然違う結果になったのにそこにたどり着くだけの時間と胆力がなかった。 これはつまり技術力の中でも筋力のような力不足である。

 筋力は日々の鍛錬からしか鍛えられない。 独立してマルチスレッド力は上がったように思うが東京に出てきて筋力は日々低下しているように感じる。

 そういう点でも自分を見つめ直すいいきっかけになった。

まとめ

 最後に本当に良い問題だったし、心の底から楽しい8時間だった。 ISUCONの運営の皆さんには感謝しています。

 そして、その最高の8時間を一緒に過ごせた id:kamipo さんと id:sugyan さんの二人のおかげです。 本当にありがとうございました。 悔しいけど、本当に悔しいけど最高の一日でした。

 打ち上げできなかったから、今度はみんなでリモート飲み会しましょう!

*1:僕はインフラ担当だから実行環境を作らず、まずコードを読んでた

*2:ちなみに去年もしてない