この国では犬が

本と芝居とソフトウェア

「全員常時ペアプログラミング」は「チーム開発初心者」向けなのではないか

週 40 時間ペアプロ

ここ 3 ヶ月ほど、所属しているチームの開発者全員が常時ペアプログラミングしている。

今やっている開発は、ほぼ、「ケント・ベックの本に書かれている XP」そのまんまのスタイル。*1

プロダクトマネージャが書いたユーザーストーリーを、プロダクトバックログの上から順に、4 人の開発者が週 40 時間労働で、毎日朝から夕方まで常時ペアプログラミング、TDD で開発している。*2

このように日常動作がペアプロなので、自然、ペアプロについてメタ的に考えることがある。
そんな折、ふと「この常時ペアプロするスタイルって初心者向けなのでは?」という考えに至った。

守破離の守

守破離」という言葉がある。

以下に Wikipedia の記述を引用する。

まずは師匠に言われたこと、型を「守る」ところから修行が始まる。その後、その型を自分と照らし合わせて研究することにより、自分に合った、より良いと思われる型をつくることにより既存の型を「破る」。最終的には師匠の型、そして自分自身が造り出した型の上に立脚した個人は、自分自身と技についてよく理解しているため、型から自由になり、型から「離れ」て自在になることができる。
守破離 - Wikipedia

この「守破離」でいうと、チーム開発において「常時ペアプロする」というのは「守」なのではないか。

言い換えると、チームで生産性の高いソフトウェア開発をしようと思ったときに、「まずは常時ペアプロする」のがいいのではないか? ということ。
「できるところから」とか「必要なときに」ではなく、いきなり「常時」やる。

逆に言うと、「常時ペアプロする」のはあくまで「初心者の動作」であって、チーム開発が上達するにつれて、やがて「常時ペアプロ」ではない形態に転換していくのではないか? ということ。
チーム開発に熟達すると、必要なときにペアプロし、そうでないときにはそれ以外のスタイルを取れるようになるのではないか。

XP におけるペアプロ

ところで、ペアプロというプラクティスは、「ケント・ベックの本に書かれている XP」の肝だと思う。
ここのところ、「週 40 時間ペアプロ」する日々のなか、ペアプロを日常動作の中心に据えることで、XP の価値・原則・プラクティスが、美しく統合されることを実感している。

XP の価値である「コミュニケーション」も、「フィードバック」も、「勇気」も、「リスペクト」も、ペアプログラミングというプラクティスからなめらかに導かれるし、ソロであればついつい設計や実装に不要な複雑さを持ち込みがちなところ、ペアで作業していれば「シンプリシティ」も保たれる。

「経済性」という原則については結論を(直感的には)即断できないとしても、「人間性」「多様性」「流れ」「機会」「冗長性」「品質」「責任の引き受け」といった大半の原則が、ペアプログラミングからほとんど直接の効果を得られる。

多くのプラクティスについても、同様のことがいえる。

「常時ペアプログラミング」することで、XP の価値・原則・プラクティスに則ったチーム開発が格段にやりやすくなる。

ペアプロのペイン

ここまで、ペアプロをほとんどべた褒めしてきた。僕はペアプロが好きだ。
でも実は、ペアプロには苦手なところもある。

コードを書くのが速すぎて、ペアの相手がついてきてくれないのである。

これは、僕のプログラミング能力が(チーム内で相対的に)高すぎるのか……そんなことって……、とか考えていたら、実はそうではないようだ、ということに気づいた。

僕は、コードを書くときに「トップスピードで試行錯誤しまくることで最短時間で正解にたどり着く」ようなスタイルを取るのが好きだ。マシンにできることは、マシンにやらせたい。*3

でも、ペアプロのときにこれをやると、実質「ペアの相手はマシン」という状態にになってしまう。僕とマシンのペア。
すると、人間のペアが置いてきぼりになる。

それではまずいので、常に思考を発話し、相手の理解を確かめながら進める。ところが、相手の理解を待っていたら、トップスピードではなくなってしまう。*4
理解を待たないわけにはいかないので、結果として、ソロでやったときよりも、その場の開発スピードは落ちることになる。

もちろん、ペアの相手が僕の知らないことを知っていて、ペアの力で速く進めることもある。これは、ペアプログラミングの重要な利点でもある。
だとしても、その場の開発スピード(の平均値)はソロのときよりも落ちる、というのが偽らざる実感で、そこがペアプロのちょっとだけ苦手なところ。*5

ペアプロの生産性

では、僕がいるチームでは、ペアプロしないほうがいいのか?
「しない」とは言わないまでも、「ペアプロしたり、しなかったり」するほうがいいのか?

そう考えてみても、やっぱり、今は「常時ペアプロする」方がいいと思う。

それは、ペアプロがもたらす価値が、「今コードを書く速さの低下」を補って余りあるから。
定量的に説明するのはちょっと難しいけど、「XP におけるペアプロ」のところで並べ立てた、XP の価値や原則、言い換えると「チーム開発の生産性を高めるための道」をペアプロが導く、ということが、説明になっていると思う。

プログラミングはコミュニケーション

関連する話題をもう一つ。

プログラミングは、コミュニケーションだと思う。

もちろんプログラミングの第一義は機能の実装、価値を届けるために動作するコードを生産することなんだけど、その生産性を高めるためには、「プログラミングはコミュニケーションだ」ということを理解している必要がある。

読みやすいコードも、整然としたアーキテクチャも、チームのメンバーや、将来の自分、そして将来そのコードを読み、使い、変更する人とのコミュニケーションのためにある。
テスト駆動開発によって設計を導くのも、チームメンバーとのコミュニケーションのためであり、理解しやすく変更しやすい設計による将来のコミュニケーションを導くためだ。

なぜコミュニケーションが重要かというと、コミュニケーションのなめらかさが、製品の品質や、生産性に跳ね返ってくるから。

そして、XP は「コミュニケーションとしてのプログラミング」の「先生」であって、ペアプログラミングこそがそれを導くものだと思う。
ペアプログラミングがそれを導くなら、常時やればいい。

プログラミングがコミュニケーションであることが、「今コードを書く速さが落ちるとしても、ペアプログラミングをした方がいい」ことの説明になる。

ペアプロの「破」「離」

ということで、「常時ペアプロ」がチーム開発の「守」にあたる、という話に戻ってくる。

やや乱暴な言い方をすると、常時ペアプロすれば、チームとしての生産性が上がる、とも言える。
「すれば」→「上がる」というのは、まさに「守」だ。いつペアプロすべきか、とか、何をどう工夫すれば、とか、考えなくていいのだ。*6

では「破」「離」はなにか。
それが「いつペアプロすべきか」考えること、そして選ぶこと、なのだと思う。

まだその域に至っていないので、何が「破」で何が「離」にあたるのかはわからないけど、いずれにせよ、ペアプロするとき、しないとき」を使い分けるのは「上級スキル」だ、という感覚が今はある。
下手に「一人でやったほうが速いから」ということでソロ作業を取り入れると、「速さ」以外の、コミュニケーションにかかわる価値を損なって、結果としてチームとしての生産性(要するに、中長期的な「速さ」!)が低下しかねない。

だから、初心者のうちは、常にペアプロした方がいい。
そうすれば、ペアプロのメリットもデメリットも余さず体感できるし、経験が少ないうちは、下手な工夫でやったりやらなかったりするよりも、チームとしての生産性の平均値は高くなるはず。

とはいえ、いつまでもずっとペアプロを盲信するのではなく、いつか「破」に移行して、また「離」にいけるといいな、と思う。

それはモブプログラミングのような形かもしれないし、もしかしたら、全員がソロに戻るという可能性もある。
結局、常時ペアがいいということになるかもしれないし、それらの間になるかもしれない。

結論

僕は、今いるチームで「全員常時ペアプログラミング」することで、チームの生産性向上を感じている。
チーム開発の初心者や、集まったばかりのチームは、「少しずつ導入」するよりも、むしろ「全員常時ペアプログラミング」を試してみるといいのではないか。

ペアプログラミングは、「コードを書くスピード」が落ちることもあるけど、「コミュニケーションとしてのプログラミング」を強力に推進する。
それはチームとしての生産性の向上を導き、中長期的な生産性にもつながる。だから、やる価値がある。

はじめは「常時ペアプログラミング」して、慣れてきたら、「ペアプログラミングしないとき」について考え始めるといいのではないか、と思う。

補遺

ペアプログラミングには、「誰もが好むわけじゃない」という課題がある。

ペアプログラミングの研究者が書いた本にも書かれていることだし、僕の周りにもペアプログラミングが苦手な人はいる。(もちろん、それは責められるべきことではない)

僕の場合、今のチームには、少なくともペアプログラミングが「すごく苦手」「大嫌い」という人はいなそう。(直接面と向かって「大嫌いですか?」と聞いたことはないけど……)
だから、成り立っている。

もし、チームの中にそういう人がいそうだったら、導入は慎重に。
強制すると、みんな幸せになりません。

*1:ブログ購読者の方向け: 今は、以前スクラムをやっていたチームとは別のチームにいます。以前のチームは、形を変えながらもスクラムによる開発を続けています。ちなみに、モブプログラミングを実践しているみたいです

*2:なお見出しにはわかりやすいように「週 40 時間ペアプロ」と書いたけど、定時が週 37.5 時間なのと、プログラミング以外の時間もあるので、実質は 30 時間くらいだと思う

*3:コンパイル言語でテストも書いてれば、考える時間ってあんまり必要なくて、書かれたストーリーを見て、上からいくか下からいくかだけ仮決めして、あとはIDEとテストの導きに従ってひたすらキーボードを叩いてたら、コードはできあがる。立ち止まって考えるのは、最初と、打鍵しながらと、機能が一通り動いて少し大きめにリファクタリングしようと思ったときだけで十分。

*4:これは能力差の問題というより、非対称性の問題。マシンは人間より桁違いに速いので、正しい入力も間違った入力も、瞬時にフィードバックしてくれる。でも、人間はそうはいかない。相手が僕の 2 倍くらい速い人じゃないと、トップスピードは出せないと思う

*5:これに気づいて(つまり、「僕の開発スタイル」が原因で、「ペアとしての生産性」が最大化できていないようだ、ということに気づいて)、自分の開発スタイルを「ペア用」にチューニングすることを考え始めたのだけど、この記事の本旨とはずれるので、ここでは議論しません

*6:「考えなくていい」というのはもちろん言いすぎで、考えるのはいいことだし、考えたほうがいい。でも、考えながらも、基本動作としては「常にペアプロする」。

2017 年のふりかえり

2017 年をふりかえります。

年間目標のレビューから。

目標 : 月に 1 冊以上技術書を読む

今年は、以下 15 冊の技術書を読みました。

  • みんなのGo言語
  • M2M/IoTシステム入門
  • レガシーソフトウェア改善ガイド
  • [改訂第3版]Jenkins実践入門
  • The DevOps ハンドブック
  • ユーザーストーリマッピング
  • Lean UX
  • The Nature of Software Development
  • Running Lean
  • リーン顧客開発
  • 初めての自動テスト
  • テスト駆動開発
  • 継続的デリバリー
  • エリック・エヴァンスのドメイン駆動設計
  • おうちで学べる人工知能のきほん

年間 15 冊ということで月 1 冊以上のペースなので、目標達成ということになります。

総括

前半はチームとか組織のことをやってたので、どうしても興味がそっちにいきがちでした。
9 月から異動で役割が開発者になったため、そこから一気に稼いだ感じです。

もともとこの目標は、今年の前半みたいなマネジメント的役割にあっても技術のキャッチアップを続ける……という意味での「月 1 冊」だったので、開発者になった今となっては微妙っちゃ微妙な数字です。
ただ最近は入門書・技術ハウツー本というよりは第一人者が書いた鈍器系の本をしっかり読み込むことが増えてきたので、月 1 冊ペースでも十分着実に学んでいるとも言えます。

とにかく達成してめでたい。

開発職に戻った(しかも新製品開発!)ので最近は開発本をビシバシ読んでいるのですが、なかでも『エリック・エヴァンスのドメイン駆動設計』を読んだのは収穫でした。
自分で言うのもなんですが、今所属している組織にあって「Java で適切なコードをすばやく書くスキル」は割と限界付近まで高まってて、それでもイマイチ価値を出しきれてない感じがしたのでチーム/組織とかプロダクトマネジメントの方に関心が向いていたのですが、コードのレベルでも(あるいは、コードのレベル「から」)まだまだやれることがたくさんあるのだと気付かされました。

関連書籍

技術書かは微妙なところだけどソフトウェア開発関連の本というところでは、以下の 10 冊あたり。

  • アジャイルコーチン
  • 変革の軌跡 世界で戦える会社に変わる "アジャイル・DevOps" 導入の原則
  • カンバン ソフトウェア開発の変革
  • 今すぐ実践! カンバンによるアジャイルプロジェクトマネジメント
  • The DevOps 逆転だ!
  • The Great ScrumMaster
  • スクラム 仕事が 4 倍速くなる "世界標準" のチーム戦略
  • Mob Programming: A Whole Team Approach
  • リーン・スタートアップ
  • IntelliJ IDEA ハンズオン

スクラムやらカンバンやらの本をほとんど片っ端から読んでる感じで、なんかひどいですね。

以下は再読。

実践していると、再読からも得るものがたくさんあります。

今読んでる本。*1

実践の中にいないと学べないタチなので、開発者やってる今のうちにこの辺のところにどっぷり浸かっておきたい。

近いうち読みたい本。

最近はとにかく買う本を減らしていて、というのは買っても読めてない本がいい加減積み上がりすぎているからなのですが、「買わない」という選択を続けていると、本は世の中に一生かけても読めないくらいたくさんあるのだ、ということを実感して、寂しい気持ちになります。

ただ寂しいというだけではなくて、今読んでいる本は、選んでそれに(時間を)投資しているのだ、ということもひしひしと感じます。

何を選んで、何を選ばないのか、ということに意識的になります。
意識していようがいまいが選んではいるのだから、意識できるようになったのはきっといいことです。

目標 : 月に 5 回以上演技クラスに通う

年間延べ 56 回。

月 5 回ペースだと 60 回になるので、4 回不足でした。
海外出張とか劇団の本公演とかで休んだ分をリカバリできなかった。

とはいえ、一年通してコンスタントに通い続けることができました。
このペースだとさすがに劇的な成長みたいなのを感じることはないのですが、少しずつ色々なことができるようになってきています。

少しずつ。

目標 : 本は月 8 冊、観劇は月 6 回程度(まで)にする

本は、92 冊。

月 8 冊ペースだと年間 96 冊なので、ほぼぴったりです。

観劇は、47 本。

月 6 回ペースだと 72 本なので、だいぶ下回っています。
だいたい月 4 本ペースですね。

なんか、これくらいがちょうどいいんじゃないか、という感じがします。

かわりに何をしたか

この目標には、去年まで時間の大半を注ぎ込んでいたアクティビティを減らして、減らすことで他のことができるようになるはず、という含みがありました。

かわりに何ができたかというと、

  • 演技クラスに通う
  • 鈍器系や英語の技術書を読む
  • 映画を観る

この辺でしょうか。

演技クラスについては、前述の通り。

技術書については、

あたりの(物理的に)重い本を読んだり、

  • The Great ScrumMaster
  • The Nature of Software Development
  • Developer Testing

あたりの英語の(翻訳されていない)本を読んだりすることができました。

一日の中で本を読む時間はある程度確保されているので、冊数を減らすためには、一冊にかかる時間を増やす必要があります。(妙な理路ですが……)
結果として、この辺の読むのに時間がかかる本を読むことが増えました。

というか、実はこれは偶然の結果ではなくて、その辺が狙いの一つだったので、狙いが的中しました。

映画は年間で 20 本弱くらい見ました。
前半よく観たのですが、後半あまり観なくなってしまいました。

どうもやっぱりどこかで映画を信じてないところがあるっぽくて、映画はメジャーエンタメなので仲良くなりたいのですが(ぼくもメジャーになりたい)、なかなか仲良くなれません……。

月 8 冊 / 6 本ってぶっちゃけどうなのか

月 8 冊という読書ペースは、はっきり言ってしんどいです。
読みたい本の多さに対して、スループットが低すぎて。

とはいえ、人としてこれくらいがまともなペース、という感覚もあります。
だから、選んでいく、厳選していく必要があるのだと思います。

ちょっと仕事に傾倒しすぎて、詩とか小説とかをほとんど読めなかったのが大いに反省ポイントです。もっと読みたかった。
来年はバランス取っていきたい。ただ、詩とか小説とかって計画的に読むものでもないので、悩ましいところでもあります。

観劇については、結果として月 4 本ペースでも何となく満足してしまいました。
もっと観たかったかと聞かれれば観たかったのですが、観なけりゃ観ないでなんとかなってしまうというか……。ちょっと意外でした。

といっても、年間 100 本(近く)も観たのは去年だけなので、去年が異常だっただけなのかもしれません。

月 4 ≒ 週 1 というのはわかりやすい数字で、これだけあればそれなりに色々観られるので、来年もこれくらいを目安に観ていけるといいのかなと思います。

目標 : 毎月計画してふりかえる

8 月までやってました。

7 月あたりから仕事とプライベートの計画を統合してやっていたのですが、9 月に異動になって、仕事のスタイルが大きく変わったのにともない、気がつくと個人の計画をやらなくなってしまっていました。
7 月の時点では統合しないメリットがない、と思っていましたが、統合するとこういう事故も起こるのですね……。

目標もおおむね達成できているし、結果オーライかな? という気もしますが、これは 8 月まできっちりやっていたおかげ(その慣性で達成した)という気もするので、やはりあんまりいいことではないかな。

来年 1 月からは仕事の様子がまた少し変わるということもあるので、新しい計画とふりかえりのやり方を模索していきたい。

目標 : 丁寧に暮らす

会社の移転に合わせて、11 月に引っ越しました。

そして、荒れてます。

ものが多いというのは一因。
右のものを左にやると左が埋まるだけ、みたいな状況なので。

引っ越しに際して本と CD を段ボール 2 箱分減らしたのですが、引越し先で棚に詰め込めるだけ詰め込んだら段ボール 4 箱分残りました。
なんということでしょう。

やるべきことは見えていて、この 4 箱分を何らかの形で部屋から出すことです。
まあ、処分するべきなんだろうな。

既に処分する対象は選定していて、でも全然 4 箱分に至らないので途方に暮れています。
たぶんこのままでは埒があかないので、まずは選んだ分だけでも売ろう。

そうしよう。

まとめ

2017 年も色々なことがあったにはあったのですが、総じて言うと、今いる場所でやることをきっちりやっていたら終わった一年、という感じがします。
悪いことではないのですが、よくもないですね。

いい面を見るなら、やることをきっちりやるのはもう当然のようにできる、ということです。

でも、やることって、なんだ?

かれこれ 10 年近く前からずっと、最大の課題が「自分がどこに行きたいのかよくわからない」ということで、ごまかしごまかしやってきたものの、いい加減年貢の納め時なのでは、という気がしてきています。
世の中誰もが「自分がどこに行きたいのか」わかってるわけでもないのだとは思うのですが、ずっと引っかかっていることなので、何らかのかたちで折り合いをつけたいと、いう気持ちがあります。

たぶん「解決した!」という状態には一生ならないのだろうなとは薄々思いつつも、一歩でいいから先に進みたい。

*1:読みかけは技術書以外も含めると 100 冊以上ありますが近いうちに読了予定のものだけピックアップ……

2017 年上半期のふりかえり

2017 年の上半期をふりかえります。

まず年間目標を一つ一つレビューしてみて、必要なところでは転換できればと思います。

目標 : 月に 1 冊以上技術書を読む

上半期には、以下の 4 冊の技術書を読みました。

  • みんなのGo言語
  • M2M/IoTシステム入門
  • レガシーソフトウェア改善ガイド
  • [改訂第3版]Jenkins実践入門

目標に対しては、ビハインドゲームですが、去年(年間通して 4 冊)に比べると、進歩ではあります。(ちょうど 2 倍のペース)

一方で、プロジェクトとか、組織的なマネジメント、リーダーシップとか、そういう本を 25 冊ほど読んでいました。
去年は、年間通して 19 冊だったので、2 倍以上のペースです。

びっくり。

技術書を読むのは継続、ただし努力目標として

月 1 冊というのは決して高い目標ではなく、目標を下げたくはありません。

一方で、4 月から組織のチームリーダー、プロジェクトのスクラムマスターという役割になって、興味・関心だけでなく、責任という面でもよりチーム・組織的なところの比重が高まっています。そのことが読書数にも反映されています。

なので、技術書を月 1 冊読むのは「努力目標」にします。
今後も月 1 冊以上を目指します。ただし、現時点で存在している 2 冊のビハインドをぜひとも挽回して年間目標達成死守、みたいなことはしない。

チーム・組織的なところへの取り組みが今まさに急務であり続けていて、そちらに取り組む方が現時点では優先だと考えるためです。

目標 : 月に 5 回以上演技クラスに通う

上半期の 6 ヶ月で、延べ 31 回。

31 / 6 = 5 余り 1 で、悪くないペースです。
多少の波はありますが、おおむねコンスタントに通えています。

これは、続ける。

もっとペースを上げたいとか、家での練習ができていないのではとか、気になることもありますが、まずは通い続けることを大切にしたい。

目標 : 本は月 8 冊、観劇は月 6 回程度(まで)にする

まず本は、6 月までで 52 冊、みたいです。(一部読書メーターに記録できないものがあるので、イマイチ正確ではないのですが)

52 / 6 = 8 余り 4 なので、若干はみ出しています。
とはいえ、「程度」を斟酌するなら、おおむね約束を守れているといえます。

他方、観劇はなんと、わずか 27 本、みたいです。(わずか?)

27 / 6 = 4 余り 3 なので、とにかく、上限をだいぶ下回っています。
目標は 6 回「までにする」なので、数値目標の達成度としては、申し分ないです。

では何をしているか

さて、本を減らした、観劇を減らした、そこまではよくて、問題は、減らしたことで何を失い、何を得たか。

まず本については、小説や詩、エッセイなどを読むことがほとんどなくなりました。
仕事の本は「必要」に迫られているので、減らせるのは、そのへんになってしまうのですね。

これは結構寂しいことで、長く続けることではないな、という感じがします。
とはいえ、耐えられないほどではないので、年末までは続けてみようかな。

観劇については、減らしたことで演技クラスに通えているという面もありますし、それから、減らしたことでやや熱が冷めた感もあります。全部観るのはどっちみち無理だしな、というか……。

あと面白いのは、映画を観るようになりました、映画館でも、ビデオでも。
これは、演技クラスに映画好きの人が多いということの影響も大きい。

上半期で 16 本。
映画を好きになると生活の楽しみの幅が広がりそうなので、映画を観るのは続けてみたいなと思います。

目標 : 毎月計画してふりかえる

これはやってます。

目論見どおりで、おおむね目標達成のペースで 6 ヶ月続けてこられています。
検査と適応。

あえて改善点をあげるなら、仕事上の計画と、プライベートの計画を、うまいこと統合できないかな、と思います。
仕事とプライベートをごちゃまぜにしたいということではないんですが、今は仕事は仕事、プライベートはプライベートでそれぞれ計画とふりかえりをしていて、かといってプライベートの中でも仕事に関わることも結構やっているので、トータルで考えたほうが色々とバランスを取りやすくて、両方とももっと充実するのでは、という気がします。

ぼやぼや考えていきます。

目標 : 丁寧に暮らす

正直言って、生活は荒れ気味です。
やや荒れ。

とはいえ、この目標を置いていることで、なんとか健全といえるレベルの生活を保てているともいえます。
相対的に丁寧な暮らし……。

とりあえず、もうすぐ引っ越すかもしれないので、ものを減らしていこうかな。
そろそろ減らしてもよい頃合い。

で、そうやってどこへ行きたいのか

どこへ行きたいのでしょうか。

自分で言うのも何ですが、実行は結構、だいぶうまくなってきていて、あとは目的がともなえば……。

目的を探そうかなあ。

モダンアジャイルに対するざっくりした理解

パターン指向リファクタリング入門』の著者である Joshua Kerievsky が昨年の Agile 2016 の基調講演で発表した、「モダンアジャイル」というコンセプトがあります。

modernagile.org

InfoQ で紹介されていたり、

www.infoq.com

永和システムマネジメントの平鍋さんがまとめ記事を書かれたりしています。

Modern Agile JPanagileway.wordpress.com

ダンアジャイルに対するざっくりした理解

Agile 2016 の基調講演については、transcript 付き(ありがたい!)で全編のビデオが公開されています。

www.agilealliance.org

これを通して見たので、記憶が新しいうちに、「モダンアジャイル」がどのようなものか、現時点での僕なりの理解をごくざっくりとまとめてみます。

ダンアジャイルの 4 つの指導原則

まず、全体像です。

f:id:enk_enk:20170210190050p:plain

ダンアジャイルは、上の図に示された 4 つの指導原則(guiding principles)によって定義されます。

これで全部です。

とても簡潔で、シンプルです。

あえてプロセスを定めない

ダンアジャイルでは、4 つの原則が掲げられている一方で、具体的なプラクティスは一切定められていません。

公式トップページで Joshua Kerievsky の発言として引用されてもいるように、「framework free」です。

Joshua は、スクラムに代表される従来のアジャイルメソッドを、「補助輪だ」と言います。

そして、彼の娘が自転車に乗れるようになった過程を引き合いに、補助輪を使っていると、なかなかうまくならない、と主張します。
彼の娘は、補助輪を外して、「ペダルを漕がずに、まずバランスを取る」ことから始めて、たったの一日で自転車に乗れるようになった。

さて、いきなりですが、これが何を意味するのか、よく理解できていません。

定められたアジャイルメソッド(たとえばスクラム)が、一種の補助輪だ、というのは同意できます。
アジャイルメソッドを使うことによって、アジャイルになることを始めることができます。

あまりにもうまく始められるので、びっくりしてしまうほどです。
そのことは、先日記事にも書きました。

enk.hatenablog.com

さて、アジャイルメソッドが補助輪だとして、はじめからそれを使わないほうがいい、というのがどういうことかがわかりません。

今はスクラムを使っていますが、いずれ、(そのままの形では)使わなくなっていくのかも、という気はしています。
補助輪から始めて、徐々に本物に近づいていけばいいじゃないか、と思います。

ところが、Joshua は、そもそも補助輪は必要ない、と言います。

補助輪なしで指導できる優秀なコーチがいればいい、ということでしょうか……。(Joshua の娘の場合は、それが Joshua でした)

「ソフトウェア」ではなく「結果」にフォーカスする

アジャイルマニフェストは、その日本語訳が「アジャイルソフトウェア開発宣言」であることからもわかるように、よりよい「ソフトウェア開発」の方法を求めて定められたものでした。

agilemanifesto.org

一方、モダンアジャイルは、「結果」にフォーカスすると言います。

これを、僕は「枠を広げて考えよう」ということだと理解します。

「よいソフトウェアを作ろう」とすれば、よいソフトウェアができるでしょう。
しかし、ソフトウェアは作られることがゴールではありません。

ソフトウェアは使われるために作られるのであり、もともとそのソフトウェアで実現したいことがあったはずです。
そして、それはもしかしたら、そもそもソフトウェアで実現する必要のないことかもしれません。

それに、よいソフトウェアができても、ユーザが使うに至らなければ意味がありません。
存在に気づいてもらえなければ。買ってもらえなければ。使ってもらえなければ。せっかく入れた機能に気づいてもらえなければ。必要なときに間に合わなければ。

最高の開発者と最高の開発プロセスで、完璧に構築されたそのソフトウェアの価値はゼロです。

アジャイルとは「作らない」ことだ、とも言われるように、この考え方自体はもともとアジャイルマニフェストにも根付いているものですが、それをより推し進めたのがモダンアジャイルだと言えると思います。

「ユーザを喜ばせる」だけでは足りない

さて、4 つある原則のうちの 1 つめは、「人々を最高に輝かせる(Make People Awesome)」です。

これは、先ほど書いた「ソフトウェアではなく、結果(ユーザの満足)にフォーカスする」ということももちろんですが、それだけではありません。

ダンアジャイルでは、ユーザはもちろんのこと、開発者をはじめとした同僚(営業、マーケティング、……)、見込み顧客、購入の決裁者(えらい人)、などなど、ソフトウェアを取り巻くエコシステムのすべての「人々」を対象として考えます。

Done の定義でも、ベロシティでもなく、それどころか「顧客満足度」でさえなく、「人々を輝かせる」ことにフォーカスすることが本物の成功を導く、という考え方です。

論理的に説明するのはなかなか難しいものの、この考え方には個人的にとても共感できます。

「必須条件」としての安全

2 つめの原則は、「安全を必須条件にする(Make Safety a Prerequisite)」。

心理的安全」については、昨年あたりからソフトウェア業界で頻繁に耳にするようになりました。

なので、「ここでも、出てくるか」という感覚です。
もしかしたら、この Agile 2016 の基調講演自体も流行のきっかけの一つだったのかもしれません。

心理的安全はさまざまなところで話題になっており、『チームが機能するとはどういうことか』をはじめとして書籍でも大きく取り上げられるような考え方なので、目新しいことはありません。

個人的にも、こうして数少ない 4 つの原則のうちの 1 つとして取り上げられることに、一定の納得感があります。

「必須条件」という言い方はさすがに伊達ではなくて、講演では、従業員の心理的安全、および顧客の心理的安全について、さまざまな角度からその重要性を強調しています。

Slack が、有料契約をしているのに未使用になっているユーザを見つけたら自動的に返金してくれる、という例には感心しました。
顧客の心理的安全。そうあるべきだ、そうありたい、と感じます。

これでもかというくらい失敗する

3 つめの原則は、「高速に実験&学習する(Experiment & Learn Rapidly)」。

これは、少し想像すればすぐにわかるように、「安全」と密接な関係があります。
「安全」が「必須条件」として確保されていれば、実験し、失敗し、学習することができます。

Joshua は、失敗しよう、と言っています。本気で。

たとえば、IMVU の例。

3D のシミュレーションゲームthe Sims みたいなもの)をリリースするにあたって、「移動する」機能をつけずに出してしまう。

するとユーザから「移動したい」という要望が出る。

ならば、ということで、「クリックするとその場所にアバターが(瞬間)移動する」という機能をリリースする。2 日で。
the Sims みたいに「ちゃんと」移動する機能じゃなくて、アバターの位置がひょいと変わるだけの機能なら、2 日でリリースできるわけです。

そしてその「瞬間移動」が大人気になった、というストーリーです。

たまたまじゃないか、という気もしますが、「高速にリリースする」ことがいかに価値を生み出しうるか、ということを、僕はこの例で強烈に感じました。

あるいは、Amazon.com の CEO である Jeff Bezos の例。

Fire Phone は大失敗に終わったわけですが、そのことについてインタビューされた Jeff は、「すぐにもっとずっと大きな失敗をするよ」「失敗が起こることなんてわかっている。むしろ、Amazon が失敗できる場所であることが誇りだ」と(たぶん笑顔で)答えます。

これが強がりではないことは、Amazon の大躍進を見ていればわかります。

ダンアジャイルでは、短期的な成否にとらわれず、長期的に考えて、「積極的に失敗する」ことの価値を強調しています。

届いた価値だけが価値だ

最後の原則は、「継続的に価値を届ける(Deliver Value Continuously)」。

これもフレーズだけ聞けば「そらそうよね」と感じますが、たった 4 つの原則のうちの 1 つであるからには、これこそが極めて重要、ということになります。

たとえば、より多くの機能を開発することよりも。
あるいは、開発計画を予測可能にすることよりも重要かもしれません。

機能の多さや、中長期の見通しを犠牲にしてでも、継続的に価値を届けよ、と言っているのだと理解しています。

なぜかといえば、届けない限りは、それが価値かどうかもわからないからです。

最先端の技術と残業も辞さない努力で、丁寧に開発され、入念にテストされ、(幸運にも)出荷され、さっぱり使われない機能のいかに多いことか。

おわりに

「モダンアジャイル」について、Agile 2016 の基調講演のビデオを見た現時点での僕なりの理解を書いてみました。

あくまでも、これは一個人のざっくりした理解です。
「これがモダンアジャイルだ」というつもりはないので、ご了承ください。

「そうではなく、こういうことでは?」というツッコミは大歓迎です。
何かあれば、コメントでも、ブコメでも、ツイッターでも、ぜひ、お寄せください。

いずれにせよ、このモダンアジャイルというコンセプトをきっかけに、これからのソフトウェア開発(および、価値を生み出す集団の活動すべて!)をよりよくする方法について、議論が深まっていくといいなと思っています。

スクラムで半年開発やってみた感想

開発者として、スクラムチームでの開発を去年の 8 月半ばから始めたのですが、この 1 月いっぱいでいったんチームから抜けるので、ざっくりざっくり感想をまとめてみます。

前提として、スクラムには 3 つの役割*1があり、それぞれの役割から見たとき、それぞれの感想があるものと思います。
この感想は、ある一人の開発者から見たものです。

本当によくできたフレームワーク

スクラムは、本当によくできたフレームワークです。

スクラムがそのはじまりからそうだったのか、どうかは知りませんが、少なくとも、2016 年 8 月に認定スクラムマスター研修で教わったスクラムは、

  • 人間という生き物の心理的特性をよく理解し、活用している
  • 薄すぎず、厚すぎず、絶妙なバランスのところでフル活用できるフレームワーク

でした。

スクラムを知ってから、興味を持った関連分野の書籍(主に心理学の研究に根ざしたもの)を読めば読むほど、スクラムがその特性を活かしながら人間の集まりの活動をサポートするように設計されていることを思い知ります。

たとえば、こういった本です。

半年で遠くまで来た

また、この(たったの)半年で進んだ距離を思うと、めまいがします。

  • 本物の「チーム」ができた
  • チームメンバーのさまざまな知見を学んだ
  • チームメンバーにたくさんの知見を共有した
  • 安全を感じながら、敬意を持って意見を交換し合う文化ができた
  • 精神的に健やかになった
  • 残業が減った
  • (おそらく)前回のプロジェクトよりも速いスピードで、前回のプロジェクトよりも価値の高いものを、前回のプロジェクトよりも高い品質で開発した

等々。

自覚していなかったり、覚えていなかったりするだけで、実際には、もっともっとたくさんのことを学習し、達成したのだと思います。

組み合って進むということ

スクラムは、まさにその名前にも表れているように、チーム全員で組み合って一緒に進むシステムです。

スクラムを、崩さずに、まじめに取り組むと、「チーム内で突出したプレイヤー」は足かせをはめられたように感じることがあると思います。

僕は自分が「突出したプレイヤー」だと言うつもりは微塵もありません。ただ事実として、チームメンバーの中では会社および製品との付き合いが長い方に属しています。そのこともあり、個人の開発生産性という点では、(おそらく)高い方に位置していたと思います。

正直にフラットに言うと、一人でやったほうが(局所的な)生産性/アウトプットの量は大きい、と感じる瞬間は何度もありました。特に最初の頃は。

それでも、スクラムというシステムは、組み合って一緒に進むことをゴリゴリ推してきます。
オーケー、そう言うならそうしよう。

そして結果としては、「チームとしての」生産性が高まった、のだと思います。
さらにその結果として、かつて「一人でやったほうが(局所的には)速い」と感じて、多少のフラストレーションも感じていた僕は、今や満足しています。

スクラムが問うこと

ここに二つの問いが存在しています。

  • 本当に(文字通り)「突出した」プレイヤーは、スクラムのシステムのなかでうまくやっていけるのか
  • 平均より上のプレイヤーが、いよいよスクラムに慣れたとして、「チームの生産性」で満足できるのか

前者については、正直なところ、わかりません。
少なくとも自分はそうではないし、チームの中にもそういう人はいないので。

これについて考えるのは、別の機会に譲ります。

後者については、難しい問題です。
僕は以前から「チームの生産性」に強い関心があって、それが達成された(されようとしており、また、これからさらにそうなっていくであろう)ことに、深い満足を覚えます。*2

しかし、そうでない人はどうか。
僕の考えでは、「チームの生産性」に(深いところで)興味がない人は、原則として「いない」と思います。しかし、(少なくとも、表面的なところでは)「チームの生産性もいいが、個人の生産性の方が大事だ」という人なら、いると思います。

ここで大事なこととして、人の考え方や表明する意見というのは決して「生まれつき」の「絶対的」なものではなく、環境によって変化する、ということがあります。
スクラムによる開発では、メンバーが「チームの生産性」にフォーカスするように組織の文化を育て、評価・報酬を含む周辺制度も設計していくことが重要になるのかもしれません。

スクラムの先はあるのか

さて、たかが半年、されど半年、スクラムで開発をやってきました。

当然、我々のスクラムの活用はまだまだ道半ばなわけですが、ここで少しだけ、「スクラムの外」あるいは「スクラムの先」のことを考えてみます。

「マネジメント」のフレームワーク

白状すると、8 月に誘われて研修を受けるまで、僕はずっと(5 年くらい)スクラムは「マネジメント」のフレームワークだと思い、なんとなく避けていました。
また、ガチガチのシステムであり、融通が利かない、よって、開発者にとってはつまらない、とも。

結果としては、間違っていました。

スクラムは、「チームの」フレームワークです。
そして、たしかに厳格なルールはあるものの、フレームワークとしてはとても薄く、人をサポートするもので、これを守りながらも、十分な主体性が発揮できます。「楽しい」システムだと言ってしまってもいいと思います。*3

スクラムの外には

スクラムのほかにも、世の中にはさまざまな開発スタイルがあります。

最近活発なのは、リーンスタートアップの基礎ともなっているリーンの考え方、具体的な手法の代表としては、カンバンでしょうか。

余談ですが、2014 年に出た『エッセンシャルスクラム』では、スクラムフレームワークそのものの説明だけではなく、かなりリーン/カンバン的な考え方・手法も紹介されていて、なるほど、と思った記憶があります。

カンバンがスクラムと異なるところは色々ありますが、その大きな部分の一つは、「スプリント(イテレーション)のベロシティ」ではなく「リードタイム」(あるいは、バリューストリーム)に注目する、というところでしょうか。*4
本旨から逸れるので詳細な比較はしませんが、「どちらを採用するのがよいか」という議論がとりあえず可能な程度には、異なっている手法だと思います。

カンバンが注目されるようになったのは、スクラムより後です。
してみると、カンバンがスクラムより優れていたとしても、不思議ではありません。

スクラムの先へ

このとき、自然と「スクラムの先」を考えることになります。

スクラムは本当によくできたフレームワークで、一方、課題もあります。

スクラムをやっていなかったら、ここにいなかった」と断言できるくらい、スクラムに助けられてここまで来ました。

一方で、このまま「スクラム」を続けた先に何があるのか、いいことか、よくないことか、不透明な部分もあります。

他の選択肢もあります。

『エッセンシャルスクラム』が示したように、スクラムに「スクラムそのもの」には含まれない要素や考え方を組み込むこともできるでしょう。

スクラムは「ルール通り」にやるのがおすすめ

ところで、これまでの話の流れに反するようですが、もし新しくスクラムに取り組むチームがいるとしたら、僕はまずは「ルール通り」にやることを強くおすすめします。

「カスタマイズしたスクラム」ではなく、「スクラムフレームワークで定められたルールを厳格に適用したスクラム」です。

なぜなら、スクラムのよくできた設計、その効果が最大限に発揮されるのが、「ルール通りにやったとき」だと思うからです。

Daily Scrum を毎日同じ時間・同じ場所で欠かさず 15 分以内でやり、
Product Backlog Refinement をスプリントの 10% 以内の時間を使ってやり、
Sprint Planning では PBI を「ロック」し(Sprint 中の PBI 追加はしない)、
スプリント中は Sprint Backlog の上から順に着手・完了させていき(Sprint Backlog に載っていない作業はしない)、
毎スプリントの終わりには Sprint Review と Sprint Retrospective をやって、製品とチームの状態にすばやく適応します。

これをやった感想は、これまでに書いた通りです。

もし、ルールを「都合よく崩して」運用したとすると、スクラムのメリットを引き出せないまま「うまくいかないからやめる」となってしまう危険性がかなり高いのでは、という感覚が、半年やってみての実感としてあります。
なお、研修講師の江端さんという方は、「まずはルール通り 3 ヶ月やってみてから判断すべし」と言っていました。*5

ただ、これは一種の理想論で(我々は実際にやっているわけですが)、「ルール通りにやろうとしたらクビになる」とか「法律が許さない」といった場合もあるかもしれません。

本当に?

以下のナイスなプレゼンテーションにも示されたように、やり方は色々あります。
「ルール通り」にやるのがおすすめですが、「ルール通りにやろうとする」とき、「ルール通りにやろうと言う」だけが方法ではありません。

ルールを「より厳しく」捉える必要もありません。

スクラムは薄いフレームワークで、ルールの遵守は求めますが、定められていない部分には柔軟に適応してかまいません。

もちろん、より厳しくすることでうまくいきそうだと思えれば、そうしてもかまいません。
僕が所属するチームは、どちらかというとこちらのやり方でうまくいってきたように思います。少なくとも、これまでは。

そして、スクラムの先へ

ルール通りにやった結果、スクラムのいいところがビシバシわかります。

そして同時に、スクラムのイマイチに思えるところも見えてきます。

それは、チームのイマイチなところかもしれません。
その可能性の方が高いと思います。

チームのイマイチなところは、継続的に改善していきます。
するとまたイマイチなところが出てきて……以下繰り返し。

繰り返していくと、いよいよ「ルール通りの」スクラムのイマイチなところが浮かび上がってくるのかもしれません。
その時が、「スクラムの先」を考えるタイミングなのだろうと想像しています。

まとめ

ざっくりざっくりと言いながら、やや語りすぎてしまったようです。

改めてざっくりまとめると、以下の 3 点に集約されるかなと思います。

  • スクラムは本当によくできたフレームワーク
  • 「チームとして組み合って」進むのは楽しいことも多いが、課題も投げかける
  • スクラムははじめはルール通りにやるのがおすすめ、とはいえ、その先もあるのかもしれない

補足 : ここに書かれていないこと

この記事では、あえて触れなかったことや、語り落としたこともそれなりにあります。
気づいていないこともあると思います。

取り上げなかったけれども、とても重要だと考えているトピックの一例を上げておきます。

  • チーム内でのスキルセットの違いについて(特に、テストエンジニアについて)
  • チーム内で平均よりも経験が少ない開発者がどう感じているか
  • 開発者以外の役割(プロダクトオーナー、スクラムマスター)の人がどう感じているか
  • スクラムチーム外との関係について

これらのことについては、また折をみて考えていけたらと思っています。

*1:プロダクトオーナー、スクラムマスター、開発者

*2:一方で、にもかかわらず、当初は「個人の生産性が最大限発揮されないことへの不満」も持っていた、という興味深い事実もあります

*3:これはややセールストーク的で、実際には、楽しいかどうかは、どう取り組むかによる、というのがフェアな言い方だと思います

*4:なお、前出の『エッセンシャルスクラム』でも関連する概念である「WIP」や「作業の手待ち」は紹介されており、相反する考え方というわけではありません

*5:ただここに一つだけ物言いがついて、僕が所属するチームでは Sprint Planning の時間はスクラムガイドに示されたタイムボックスをはみ出しています。詳細が気になる方は わたしたちがスクラムのスプリント期間を 1 週間にし、タスクを 1 時間以下の単位に分割するのはなぜか - Appresso Engineer Blog を見ていただけると幸いです