クラウド時代のソフトウェア開発 - Developers Summit 2011

デブサミエントリのインデックスはこちら。

【18-B-5】クラウド時代のソフトウェア開発 及川卓也
Google 及川( id:takoratta / [twitter:@takoratta] )さんのセッション。
togetterはこちら

大規模なソフトウェア開発(一般的な話)

デザイン インプリメンテーション スタビライゼーション リリース プラン を回す。
もともとwindowsの開発をやっていた。

  • Windows NT
    • いつリリースできるかわからなかった
    • トップがブライアン バレンタインに変わって開発にリズムができた
    • "Brian Valentine(ブライアン バレンタイン)" "Ian Mcdonald(イアン マクドナルド)" で検索すると面白い話がいろいろある
大規模なソフトウェアはmoduleやcomponentやfeatureに分割する

各チームへ権限委譲し、全体でリズムを作っておく。
Themeをしっかりと共有してバラバラにならないようにする。
例えば chrome のテーマ(原則)

  • シンプル スピード セキュリティ 3つのS
  • テーマは簡潔に 覚えておけるように
  • 実現できないこともある。それは次に回す
ソースリポジトリ
  • メインブランチ
  • component a ブランチ
  • component b ブランチ

適当なところでインテグレーションする。これはすごく大変、だけど仕方ない。

  • 厳密な check in window
    (ここの時間までにできたらチェックインしていいよ)
  • 毎日定時に開始されるbuild
テスト
  • 一定のテスト期間を確保 bug bash / find it
  • バグの減少傾向をモニター

全員がテストに参加し、チームで製品を作っていることを意識させる。

リリース
  • 失敗が許されない
  • 高いデプロイメントコスト / 更新コスト

クラウドコンピューティング

直ぐに適用はできないかもしれないけど、役には立つと思う

  • 低いデプロイメントコスト / 更新コスト
  • 高いサービス連携
  • 品質基準が全然違う
    • windowsなどの場合はリリースすることで開発完了
    • クラウドはリリースしてからが本番 避けるべきは サービスダウン
agility 迅速さ
  • launch & iterate
  • 時間をかけてマーケティングしたい、アンケートを取ったりはしない
  • 早く作って、早く出して、実際のユーザーからフィードバックをもらう
scale

とんでもない数のプロジェクト、ビルド、更新があり、それを支えるインフラが必要。
cloudの開発手法を取り入れる(低いデプロイメントコスト)

  • chrome 日本語入力
    • バージョンを意識しない
    • 自動更新出来るように頑張った
open

基本的にオープン 自信がある なぜオープンにしないのか?
コードレビューは色々なエンジニアがやる googleのエンジニアとは限らない。

  • 大事なこと
    • 一気にパッチを送らない
    • ircを利用する
    • 他に人が忙しければ、その人の別の作業をやってあげる
mozc 日本語入力
  • 空気のような存在になりたい
  • ストレスフリー
  • 素早い入力
  • Web時代に即した
  • セキュリティ

まとめ

  • 短いリリースサイクル
  • スケールする
  • 可視化にこだわる