スクラムは新しいウォータフォールだ

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

   

スクラムは新しいウォータフォールだ

スクラムというものは、理論的には素晴らしい。だが、実際のソフトウェア開発においては、実に欠陥のあるプロセスだ。スクラムは反復型のウォータフォールだし、プロセス地獄だ。こんなことを言えば、敬遠されてアジャイル・クラブから追い出されるかもしれない。だが、我々の業界を悩ませているのは、この「スクラム」と呼ばれるプロセス管理であると、自信を持って言える。

スクラムはアジャイルだ

いや、違う。スクラムは反アジャイルなのだ。スクラムは、自身をアジャイル的アプローチ、またはアジャイル的手法であると謳っているが、アジャイルソフトウェア開発宣言を読めば、スクラムがその定義からしてアジャイルになり得ないことがわかる。アジャイル開発プロセスは、プロセスやツールよりも、人や、やり取りを優先するものだからだ。

スクラムには、数多くの「儀式」がある。それはまるで、おばあちゃんに古い教会の礼拝に連れて行かれるような感じだ。そこでは皆、「スクラムマスター」の言葉をしきりに繰り返していて、「スプリント計画」、「(バックログの)グルーミング」、「スタンドアップミーティング」で出されるアイデアを聞いている…。このいわゆる「儀式」は、退屈で、古臭い。そして、ソフトウェアを書いていない人とか、ソフトウェアを書く背景にある技術的なプロセスが分かっていない人とか、あまり物事を深く考えない人によって開かれる無意味な会議につながる。

たとえ残業することになっても、スプリントのコミットメントに忠実に従う。コミットしたのだから、デリバリーしなければ。人間は、一体いつから物事を正確に見積もるようになったのだろう。そんなこと、超高層ビルを建設する時ですらできないのに、500万ドルのソフトウェア開発プロジェクトでなんてなおさら不可能だ。

どうしたらアジャイルになるのか

何よりもまず、アジャイルは人のための開発手法だということを認めよう。私たちを目標へ最速に導いてくれるものは何だろうか?実務的に考えるのだ。計画やグルーミングなどの無意味な会議が仕事を早く進めてくれるのだろうか?そうでないなら、そんなことで時間を無駄にしないことだ。

スタンドアップミーティングは、意図された目的のために使おう。スタンドアップミーティングは、あなたの状態を上司に逐一報告するためのものではなく、チームの障害を迅速に取り除き、仕事の取り掛かりをスムーズにするためのものだ。毎朝9時の朝会はやめるべきだ。不具合があれば何度でもミーティングをする。必要な人を部屋に集め、立ち上がって、取り組んでいる障害を取り除くのだ。

アジャイルは、迅速に取り掛かり、動くソフトウェアを今日構築し、要件の変更をデリバリーするためのものだ。スクラムだとスプリント期間中での変更はできないため、変更してすぐさま次へ取り掛かることができなくなる。昨日の要件ではXだっものが、今日の今になってXとYになったとしたら?次のスプリントを待つよりも、今日両方デリバリーできるとしたら?次のスプリントで、ではなく、今日中に取り組んだほうがいいかもしれない。

もっと素早く行動せよ

テストケースを書くべきだ。UIがきちんとレンダリングして、思い通りのパスで正しく動くだろうか?データが悪かったらどうなる?APIをテストしてみてほしい。コントラクトは正確だろうか?正しくフォーマットされ、正しく設計されているデータを確実に返すように、そして、含まれるデータは確実に正確でなければならない。また、パフォーマンスとセキュリティもテストすること。

masterに上がっているものを今すぐに出荷できるだろうか?もしできないなら、やるべきことはたくさんある。masterはいつでも製品にできる状態でなければならない。もしできないのであれば、あなたがやっているのはアジャイル開発ではないということだ。

テストを書くことで、リスクは減らせる。リファクタリングや再設計をすれば、システムが確実に壊れないことを保証できる。

ユニットテストなんてどうでもいいから、コントラクトをテストすべし

あなたのコードは、90%の確率で、障害や様々な心の問題を抱えた5人家族の費用を計算するとか、そんなユニークなことはしていないだろう。テストは、理にかなった場所でするべきだ。ユニットテストには優れた点もあるが、テストとコードを密結合させて、コードを壊れやすくするだけでなく反アジャイルにしてしまう。

ここで、コントラクトのテストが活躍する。クラス間のコントラクトをテストするのだ。publicインタフェースは何か?これが、悪いデータでも常にまっとうな動きをするようにしなければならない。そして、APIコントラクトをテストすべきだ!APIが確実に有効なデータを返すようにして、JSONスキーマでもXML WISDALでも、あなたのAPIに使えるスキーマを有効にしよう。

そして、UIコントラクトをテストしよう。メインとなる成功シナリオはなんだろうか?何が共通パスなのか?デザインや配置ではなく、機能性をテストすること。

必要なら、「かんばん」を使え

僕は、ほとんどのプロセスは時間の無駄だと思っている。だが「かんばん」は別だ。簡単なカラムをいくつか挙げてみよう。

  • Undefined(未定義):誰かが詳細を追加する必要がある
  • Defined(定義済):取り掛かるのに十分な詳細が決まっている
  • Working on it(作業中):開発者が作業中
  • Done(完了):完了し、作成者からの承認待ち
  • Approved(承認済):これはカラムではなくステータスで、完了したら、ボードから外す

カード1枚では情報が足りない!だから、Undefined(未定義)に差し戻すか、席を立って、そのカードを書いた人と話そう!

「かんばん」には、タスク時間というものはない。人間は、見積もりがヘタな生き物だ。タスク時間より、実働時間が重視されるのであれば(コンサルティング会社など)、そちらを記録したほうがいい。

原文:http://www.adambourg.com/2015/11/10/scrum-is-the-new-waterfall/ (2016-1-7)
※元記事の筆者には直接翻訳の許可を頂いて、翻訳・公開しております。

Photo by William Warby

あとがき

Hacker News でも賛否両論の意見が飛び交った、スクラム開発に対する刺激的な記事です。
全ての組織に有効な銀の弾丸などないのでしょうが、それぞれの環境に合わせて変化させて行くプロセスもスクラムなんじゃないかなと思います。
— 1つとして同じスクラムは無い

 -Tech,

FAworksではプロのコンサルタントが案件をお探しします

  関連記事

コスパ最強ラップトップ

エンジニア的コスパ最強laptop3選

どうもどうも。 「3度の飯より価格コム」で同じみの私です。 PC買う時ってすごい迷うよね。 CPUの

待ち遠しい次の祝日がコマンドラインでわかる!‐cal‐ 端末にカレンダーを表示しよう

待ち遠しい次の祝日がコマンドラインでわかる!‐cal‐ 端末にカレンダーを表示しよう

これは“コマンドライン・マンデー”シリーズの最初の投稿です。このシリーズでは、毎週月曜日に使えるコマ

フルスタックエンジニアを目指すには。

フルスタックエンジニアを目指すには。

by Shunsuke Kobayashi 習うより慣れろと言うことわざがありますが、 エンジニアで

Twitterはどうやって1秒に3,000もの画像を処理しているのか

Twitterはどうやって1秒に3,000もの画像を処理しているのか

現在、Twitter は1秒間あたり3,000枚の画像(約200GB)を作成し持続している。 しかし

何が彼女をボットづくりに没頭させるのか?ボットの魅力と可能性/Emma Winston氏インタビュー

ボット初心者の方ですか?私たちは、今度主催するイベント「The Art of Bots」に先駆けて、

エンジニア向け!!新しいプログラミング言語を学ぶ時のサイト一覧

エンジニア向け!!新しいプログラミング言語を学ぶ時のサイト一覧

最近ではプログラミングスキルが世界で注目されており、就職や転職においても十分なスキルの一つとなってい

Lispをあなたの言語にも取り入れる方法

僕はプログラミング言語Lispのファンだ。だが、多くの不慣れなプログラマにとって、その素晴らしいまで

V8はどうやってJavaScriptコードを最適化しているのか?

僕の過去記事で、NodeJSがなぜ速いかについて話した。今日は、V8について話したいと思う。 多分、

node.js における stream の歴史とそれぞれの問題点

node.js における stream の歴史とそれぞれの問題点

内容 前史(stream API以前のstream) stream1 stream全盛期、ユーザラン

Criteoにおける大規模機械学習の仕組み

Criteoの事業の核を担うのは、機械学習です。当社は、広告を表示させたいときの選択や、個別の製品レ