365日24時間稼働するサービスをアグレッシブに開発/運用し続ける方法

どうやったら、アグレッシブさを維持しつつ、世界で戦える開発が出来るかな?って、 年末にまとまった時間が取れたので妄想がてら考えてみました。   ■ 結局はスキルあるヤツがそこにいなきゃはじまらない   分かります。手順書とか、リカバリ自動化とか、アウトソーシングとか。 でも、このご時世、完璧な手順書作って、引継ぎして、、、 とかやってる時間あったら、前に進める為に使わないと競合にあっさり出し抜かれちゃう。 #少なくともこの数年の間に俺らのアレは事業ごと撤退して、 #彼らのアレは順調に業績伸ばしてるっていうのは経験しました。   世の中には、それこそポール・グレアムRamen Profitableみたいに 若くてデキるヤツらだけで集まって、本気でパイをかっさらおうとしてる 目ギラつかせたヤツらがいて。   今までは、性能いいサーバーとか、商用のミドルウエアとか使わなきゃ 実現できなかったような事が、クリックひとつでクラウド上に調達出来ちゃう時代。 設備投資に対するコストの下がりっぷりは本当に半端ない。   そういった意味でアジャイル開発とか継続的デリバリーとか当たり前っていうか、 とにかく毎日コードにガツガツ手いれて、一日何回もリリースするようなノリでやらないと。   ただし、どんな方法論を用いたところで、アグレッシブに開発&リリース繰り返してたら、 そりゃトラブルも起きるでしょう。ソフトウエアやサービスは人が作るっていうのは紛れもない事実。 Facebookとかでさえ、使ってて"アレちょっとおかしくね?"って時ありますよね。   受託開発してた頃からも踏まえると、本当にいろんな現場みてきたけど、 最後はスキルフルなエンジニアが24時間対応でなんとかヤツけてきて、 安定稼働してきたらようやく安眠できるようになりました的な。どこ行っても。   そのノリでやってたら、アグレッシブな開発&リリースなんて続けられないし、 続けられなきゃ世界で戦えない。   ただ、逆に言えば、現実的な勤務時間で睡眠時間がキチンと確保デキるのであれば、 なんとかなるんじゃないかな?なんて思ったりしたのが、こんなブログ書き始めたきっかけ。     ■ んじゃ、どうしましょうね?   常に世界のどこかで、スキルフルな誰かが、10時〜18時に対応可能な状態にする  コレ。日本語で1行で書けるんだから、実現出来ない事はないよなー、と。   ここからは、妄想兼ねて自分とこの状況も踏まえてツラツラと。     ■ 拠点について   アジア、アメリカ、ヨーロッパに時差がそれぞれ8時間の拠点を作る。 どこの都市がイイとかそういうのは置いておいて、常に誰かが日中〜って観点だと、 これしか方法は無いわけで、当然現地の人をHiringすることも考えたら、 英語公用語なんて当たり前のようにやっとかないと実現出来ないんだなぁ。     ■ チームの構成について   信頼出来るスキルフルなヤツだけ何十人も一気に集めるのって現実的ではなくて。 ただ、経験値は少ないがアグレッシブな若者はゴロゴロしてる。 彼らをどうやって育成してフックアップしてくか?ってのはいつも大事なテーマだった。   シリコンバレーみたいにコンピューターサイエンスの学位持って、 ガツガツやってきたヤツだけがエンジニアになれて、且つ、そういうヤツがゴロゴロしてる ところとは状況が違うし、そんなに高いお給料払うの難しいでしょって話もある。   サンフランシスコでガチでスクラムなプロジェクトやってた時に、 こりゃーデキないヤツが入ってきたら回らなくなっちゃって日本持ち帰って導入するの辛いかな? って思ったんだけど、よくよく考えれば、自分は新人の頃、文系卒で全くNULLな状態で、 ガチなeXtreme Programmingなプロジェクトでペアプロで頑張ってたなぁと。   スキルフルなエンジニアと、見習いレベルのエンジニアを組ませてやれば、 そのうち追いついてくるし、技術的なボトムラインが分かってる人を ビジネスサイドに送り出すなんていう意味でもアツいよね、と。   ノートパソコン持ち歩いて土日でも対応〜ってやってたけど、 TOEICの試験を受けている最中にノートパソコン持ちだして トラブルシュートするわけにも行きませんし、それを繰り返してると、 モチベーションもパフォーマンスも維持するのが難しくなってくる。 そう考えると1組でもペアが土日に出勤もしくはWork From Homeする必要があるんだな、と。   5ペアあれば、1月に一回は週末出勤があります〜くらいで現実的かな、と。 前後に振替休日+有休1日使って〜なんて事が出来れば無理なさそう。   そうすると、世界の3拠点にそれぞれ、 ・スキルフルなエンジニア5名 ・見習いエンジニア5名 が、在籍することになって、総勢で30人の組織になります、と。   ガチで大事なサービスをアグレッシブに開発し続けるって考えるとどうなんでしょう?   例えば、先日見かけたマイクロアドさんの↓によると、開発部は総勢20名弱だそうです。 第1回 マイクロアドに聞く,職人集団が支える広告プラットフォームの世界 ただ、中国に拠点〜とか、京都でR&D〜とかって記事も 見かけたりもしますので、実際開発に関わってる人は何人くらいなのでしょう?     ■ コミュニケーション的な事   各拠点はXPなノリで毎週ペアが入れ替わったりしてチーム全体でナレッジを共有しつつ、 ライフステージ的に身軽なエンジニアは3ヶ月に1回、拠点間を異動したらイイかな、と。 (1年間で3ヶ国に住めるとか個人的には単純に相当アツいと思うし) いくらSkypeやメールでやり取りしたところで、 一緒に昼飯食ったり飲み行ったりするのとじゃ全然違うしね。   拠点ごとに、バックエント、フロントエンド、みたいに分けるのではなく、 拠点をまたいで同じ機能の開発を担当して、24時間止まらない開発なんていうのも 憧れちゃいますよね。会社きたらバグがキレーに無くなってる!とか。 でも、Googleとか既にグローバル化した先駆者は普通にソレやってるんだろうし。   とは言え、難しい事もあって。 例えば、スクラム的な感じで進めるとして、振り返りミーティングや、 プランニングミーティングどうしましょ?と。   今までの感じだとxxリーダー以上は参加〜みたいな感じだったけど、 極力組織はフラットな方がイイから、そういうのはイヤなのと、 現実的な時間に出勤って形にしたいから世界に拠点分けてるのに、、って思いもあるわけです。   そう考えると、ビジネス側の部隊と一緒の拠点の人たちでプランニングポーカーとかやって、 チケットを割り振る的な感じにしたらどうかな?とか。 でも、そうすると別拠点にいる人はちょっと寂しいすよね…。 その時は、家から出れる範囲でSkypeでプランニングポーカー参加してーとかってなるのかな? それとも、毎週各拠点持ち回りでプランニングミーティングする?     ■ 終わりに   取りとめもなくブワって書いちゃったけど、激務が原因で、 スッゲー優秀なのに潰れちゃった人とか何人も見てきたら、 なんかうまい方法ないかなーと。   もし、世界3拠点で30人体制でサービスをみるDevOps部みたいの任せてもらえるなら、 今まで毛嫌いしてきたマネージメント職とかやってもイイかなって思ったりもしてきた2012年末。 (いや、やっぱイヤだなぁ、現場のエンジニアの端くれでいたいし…w)   まぁ、上記のようなことやるのに、自分の英語力が不足してるのは目に見えてるけど、 海外のヤツらに日本人の運用に対するマインド舐めんなよってアピールしたい気持ちもある。   2012年はなんとなく、ブラ下がって働いちゃった感が強かったから、 2013年はもっと自分でイニシアチブとってアグレッシブに働きたいな、と。 ↓は何回みてもナイスなスライド。コレ越えたいです。 [slideshare id=1628368?rel=0&w=427&h=356&fb=0&mw=0&mh=0&style=border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px&sc=no]