アジリティの本質
和田さんは、ある一冊の本を引用しながらアジャイルという言葉について解説していきます。「アラフォー世代のプログラマーに強い影響を与えた名著『達人プログラマー』という本があります。20年ぶりに改訂され、さらに洗練されたこの本において『Agile』という言葉がさすものについて言及されています」
![Agileという言葉](http://cz-cdn.shoeisha.jp/static/images/article/14671/14671_010.png)
アジャイルという言葉は名詞ではなく、物事の進め方を形容する形容詞。そしてアジャイルな方法で仕事をするためのレシピは以下のようなものになります。
- 自らの現在地点を見つけ出す
- 目的地点に向けて、最も意味のある最小単位の1歩を踏み出す
- 現在地点を評価し、問題があれば修正する
「そしてこれを、あなたが取り組んでいるあらゆるレベルの作業に対して再帰的に適用します」達人プログラマーを引用しながら、この点が重要であることが強調されます。
スクラム、TDD、XP、DevOps、リーンスタートアップ。「よくみたら輪っかばっかじゃんか!」という和田さんの言葉には思わず笑ってしまいましたが、自己相似形のループで改善していく、それがアジャイルの本質なのです。
![よくみたら輪っかばっかのアジャイル](http://cz-cdn.shoeisha.jp/static/images/article/14671/14671_011.png)
Two-way Door:決定を可逆にする
Amazonの創業者であるジェフ・ベゾスが株主へ宛てた手紙にあったという言葉、「ほとんどの決定は不可逆ではない」。
決定を可逆にしておけば、最適でない決定をしたとしても扉を開けてまた戻ればいいだけです。
例えば、我々が使うエディタもGitも決定は可逆です。あらゆるレベルで、決定を可逆にすることは可能なのです。そしてこの可逆にする技術こそがAgilityを支えていきます。
![言われてみればエディタも決定は可逆だということがわかる](http://cz-cdn.shoeisha.jp/static/images/article/14671/14671_012.png)
「戻る技術は、安全に進む技術。安全に進めるとわかっているから、我々は安心してスピーディに動くことができるのです」――これは、近年耳にすることが多い「心理的安全性の高さ」にも通ずる重要なポイントであると感じました。我々に心理的安全性をもたらすのは、何も人間関係や職場環境だけではない。安全に進めるという自信を持てるテクノロジーも、心理的安全性の担保には欠かせない要素なのです。
エディタのUndo、Inline Method リファクタリング、git reset/rebase/revert、Re-architecting、Continuous Deliveryといった「戻る技術」。手元のコードだけでなくアーキテクチャレベルで戻す技術があるのならば、Agilityは上がっていきます。
アジャイルからDevOpsへ
「ここでポイントになってくるのはテスト容易性とデプロイ容易性です」書籍『LeanとDevOpsの科学』を引用しながら、和田さんはそう解説します。デプロイ容易性は移植性と考えることができる。安全なデプロイと安全なリアーキテクティングを追求していくことで、自己相似形のループの中で、より大きなループで2way doorの戦略を取ることができるのです。
![アジャイルからDevOpsへ](http://cz-cdn.shoeisha.jp/static/images/article/14671/14671_013.png)
リアーキテクティングというものは難しいものですが、ここで和田さんは「橋」、現実世界で川の両端を結ぶ橋を「リアーキテクト」する方法を引き合いに出し、安全なリアーキテクティングについて一例を示しています。Parallel Change。橋を作り直す時は、横にもうひとつ橋をかけて作り直しています。これに相当するものが、実はエンジニアの世界にはすでに存在しています。
- ブルーグリーンデプロイメント
- カナリアリリース
- フィーチャートグル
こういったDevOpsのプラクティスをモノにすることで、我々は安全なリアーキテクティングを実現し、大きなレベルでのアジリティを手中におさめることができます。
One more thing……アジリティの本質とは
改めて、アジリティの本質とは何なのでしょうか。ここで再度『達人プログラマー』の言葉が引用されます。
![『達人プログラマー』におけるアジリティの本質](http://cz-cdn.shoeisha.jp/static/images/article/14671/14671_014.png)
「すべてをアジャイルな形で機能させるには、優れた設計に向けたプラクティスを実践する必要があります。というのも、優れた設計によって変更が容易になるためです。そして変更が容易である場合、あらゆるレベルで躊躇なく調整が可能になるのです。それこそがアジリティというものなのです」
良い設計の本質とは、Easier To Change(ETC)であること(こちらも『達人プログラマー』からの引用)。
誰も答えがわからないものを作る時代だから、アジリティが求められる。アジリティを支えるのは変更容易性と理解容易性であり、それを実現するのはETCな設計。疎結合であり、凝集度が高いコード。言葉にするとベーシックなこれらの本質を、今、あらためて大切にするべきではないか。そんな問いを投げかけ、「アジリティを支える品質特性」の初演は幕を閉じました。
Twitterや書籍からの引用がふんだんに散りばめられ、この講演をつくりあげたエッセンスから自分の興味を軸に掘り下げていくことができる巧みなスライド作り。講演中に鳴り響いた雷さえも味方につける巧みな話術。なにより、言葉にするとベーシックなエンジニアリングの本質を、改めて大切にしなければならないと感じさせる説得力。おそらく「質とスピード」のように改良を重ねながら再演されていくであろう本講演は、初演でもアジリティと品質に対してエンジニアの価値観をゆさぶる力強さに溢れたものでした。