高速で無駄のないソフトウェア開発を実現するための7つのポイント

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

どうすれば小規模なチームでも大きな成果を出せるのか。大きな組織で沢山の量をこなすのは当たり前のことで、あまりクールではありません。少ない人数でも大きな成果を出すには、スピードをあげることと、そのためにも無駄をなくすことがポイントになってきます。

Ferrari F1 -  Fernando AlonsoFerrari F1 – Fernando Alonso / JiteshJagadish

ソフトウェアをつくるための3つの役割で書いた通り、ソフトウェア開発をクラウドのようなサービス提供で続けていくには、プロダクトオーナーとプログラマーがキャッチボールのような形で、仕様と実装をずっと繰り返しながら作っていくのが自然です。

SonicGardenで使っているツールと開発の流れの全体は以下のようになります。大事なことは「動くソフトウェア」の状態を保ったまま、どれだけ回転数をあげていけるか、ということです。そのために、プロダクトオーナーとプログラマの間で待ち時間を減らすために並行して進めるようにするなど工夫しています。

ホワイトボードとMVP

実際の開発の流れとしては、まずはホワイトボードを使って最大でも1ヶ月ほどで完成できる範囲の設計をします。この際は細部や例外に拘るのではなく、最小限だけれども全体の流れを一通り実現できるような機能を設計します。こうした必要最小限の機能をリーンスタートアップでは「MVP」と呼ばれています。そして、MVPが決まれば、すぐにプログラミングに取りかかります。わざわざドキュメントにする必要はありません。

Pivotal Trackerとチケット駆動開発

実際にプログラミングをする前に、ユーザから見て意味のある機能単位のユーザストーリーと呼ばれる単位に分割し、Pivotal Trackerというツールに登録していきます。ユーザストーリーの追加はプロダクトオーナーの仕事です。プログラマは登録されたユーザストーリーを優先順位の順に並んでいるので上から順に対応していきます。こうしたやり方を「チケット駆動開発」と呼びます。

実際にはプロダクトオーナーがどんどんと勝手に追加していくのではなくて、プログラマとのディスカッションを行ってから合意がとれてから追加していくことになります。その時のポイントは、プロダクトオーナーは解決したい課題から話し始めることです。解決するための機能をどう実現するかは、色々なプログラムのつくり方によって変わってくるので、機能の実現方法についてはプログラマと話あって決めます。そうすると、余計な機能を作り込んだり、技術的に無駄に頑張るといったことがなくなります。

youRoomと顧客同室

最初の設計で詳細まで決めないので、プログラミング中に不明な点などが出てきたら、youRoomというツールを使ってコミュニケーションを図ります。youRoomはグループ毎にコミュニケーションがとれるツールで、メーリングリストよりも気軽に投稿できるので、何かあればすぐに確認ができます。チャットと違い非同期に書き込めるのでお互いの集中時間も妨げません。youRoomを使えば仮想的に「顧客同室」を実現できます。

メールだとついつい一度に沢山の情報を誤解のないように伝えようと一通のメールが長くなってしまいがちです。そうすると、気軽な返信ができなくなってしまい、また返事も長くなるという悪循環に陥ることで結果コミュニケーションの総量が減ってしまうという問題がありますが、youRoomだとそんなことは起こりません。一つの情報量を制限することで、総量としてのコミュニケーション量を増やすことができます。

Githubとコードの共同所有、コードレビュー、リファクタリング

開発中のソースコードはGithubで共有することで「コードの共同所有」を行いますし、Githubのソースコードにコメントが出来る機能を使って、プログラマ同士で「コードレビュー」を行います。コードレビューで知識と知恵の補完をすることができ、その指摘をもとに「リファクタリング」を行うことで保守性が高まります。ソニックガーデンでは外部のデザイナーともGithubを使って共有しています。

RSpec、Cucumberとテスト駆動開発、ペアプログラミング

プログラミング時には、RSpecCucumberを使って「テスト駆動開発」を行うことで、繰り返し開発をしてもデグレしないようにしています。また実装上で難しい箇所を開発する際や、本番環境を触る際は必ず2名以上で作業にあたるようにしており「ペアプログラミング」と呼ばれています。ソニックガーデンではペアプログラミングをしやすいように、フリーアドレス制にしているのと、机を向かい合わせでなく背中あわせになるようにレイアウトしています。

Herokuとステージング環境、継続的デリバリ

プログラマ側で完成したら、HerokuというRubyのPaaS上に作った「ステージング環境」にアップロードします。プロダクトオーナーはいつでもこのステージング環境を見ることで動くソフトウェアを確認することができます。「継続的デリバリ」をする対象がステージング環境になります。プロダクトオーナーは動作確認が出来れば、Pivotal Tracker上でアクセプトすることで、そのユーザストーリーが終了します。

Skypeとイテレーション

1週間単位くらいでSkypeを使ったリアルタイムのミーティングも実施します。このミーティングは進捗の確認というよりも、次の1〜2週間で何を作るのかといった認識あわせをする場になります。なぜならば進捗状況は、毎日Pivotal TrackerとyouRoomで確認出来ているからです。ここは「イテレーション」とよばれるタイムボックスを意識する場でもあります。期間をきることで、決めるべきことを決めて進めていく感覚になります。日々の情報共有さえできていれば、30分もかからずに終わることも多いです。

なぜ対面の会議でなくてSkypeなのかというと、会議のための移動には無駄なコストが沢山ついてくるからです。移動する人数分の移動コストは無駄ですし、会議が始まるまでの待ち時間も無駄です。人数が増えると日程調整もままならなくなります。なので、会議は必要な時間だけ繋ぐSkypeがベストです。また、SonicGardenにはアイルランド在住のプログラマもいるので、必然的にSkypeにならざるを得ません。

このようにして、実際に動くソフトウェアを中心にして、徹底的に無駄を省きながら、繰り返して開発を続けて改善していっています。紹介したツールはすべてクラウドから利用でき、無料で試すことができますよ。

ご質問などあれば、お気軽にTwitter( @kuranuki )などで聞いて下さい。

コメント

Remotty - リモートワークのためのバーチャルオフィス