不確実さを受け入れる — A17Y (1)

Hajime Morrita
To Phantasien
Published in
5 min readDec 27, 2016

--

ソフトウェア開発に関する認識で大きく変化したもののひとつは不確実性の扱いではなかろうか。古いソフトウェア開発が「複雑さ」を、Agile が「変化」を主要な難しさ、戦うべき敵とみなしたように、今日のソフトウェア開発は「不確実性」との戦いを大きなテーマに据えていると思う。プログラマが不確実性に向ける眼差しは開発プロセスに大小様々な影響を与えている。「達人プログラマー」とその世代は、この変化を捉えていない。

ソフトウェア開発には昔から不確実性がつきものだった。たとえば見積もりでは The Cone of Uncertainty なんて話をする。現代的なソフトウェア開発が昔と違うのは「不確実さは放っておいてもなくならない」ことを認めたことだと思う。The Cone of Uncertainty が象徴する昔のソフトウェア開発では、不確実性は一時的なもので目の前の嵐をやりすごせばいいと考える。極端にいうと、最終的にソフトウェアが出来上がればなんとかなると暗に期待している。

今日のソフトウェア開発はこう考える: 不確実性はいつまでもそこにあり、場合によっては増え続ける。だからできるだけ不確実性を取り払わなければと相応の労を割く。ソフトウェアのリリースは不確実性の終わりではなく、不確実性との戦いの始まりだ。

この戦線には大きく二つの軸がある。ひとつは Lean 学派に代表される仮説実験主義。ソフトウェアは実際にユーザの反応をみるまで良し悪しがわからない。ここに不確実性がある。なるべく早くリリースして自分のアイデア、仮説の正しさを確かめたい。アイデアの正しさを突き詰めるためのメトリクスを定義し、絶え間ない実験を通じてその指標を改善したい。不確実性を押し返し、ソフトウェアの価値を確かなものにしたい。そんななか MVP や A/B テストのような手法が受け入れられ、まわりに様々な方法論やツールが発達した。機械学習に至っては実験がアイデアを追い越している。

もうひとつの軸は、ソフトウェア開発と Ops の接近。いくら事前にテストをしても実際の production 環境で起こるバグは防ぎきれない。ユーザの挙動は予測を超えているし、クラウドやサードパーティの API に outage はつきもの。挙句の果てに DoS がやってくる。ここに不確実性がある。インターネットに丸腰でソフトウェアを晒すのは自殺行為だと人々は気づき、各種モニタリングや機能フラグ、段階的ロールアウトやカオス工学などの手法が発達した。

Ops の台頭と仮説実験主義は、インターネット的な今日のソフトウェアが持つ性質の裏と表。互いに影響を及ぼし合っているし、距離も昔より近づいた。ソフトウェアをばんばんリリースして実験を走らせる土台としての Ops が発達する。モニタリングに使われていたデータ基盤が実験結果の収集分析に転用される。開発と運用の境目が曖昧になり Devops のような結論に至る人々が現れる。

生きたソフトウェアとソフトウェア開発者が繋がるインターネットだからこそ運用がソフトウェア開発の一部になり、同時に実験が可能になった。そう考えると Ops と仮説実験主義の関係も自然なものに見えてくる。

不確実性が大きな関心の的になったからといって、「複雑さ」や「変化」といった従来からの課題がなくなったわけではない。不確実性があるからこそ実験という絶え間ない変化に耐えるソフトウェアが必要だし、不確実性が招く予期せぬ複雑さにも備えが必要だ。けれど変化を受け入れた Agile 世代の開発方法論が複雑さの立ち位置を変えたように、不確実性を受け入れる今日のソフトウェア開発は変化や複雑さへの見方を変えた。機械学習をめぐる技術的負債の議論なんて直交性も何もない。

今やプログラマはコードだけでなく、生きたソフトウェアの身体や環境に大きな関心を払っている。それは AWS で動くソフトウェアの心電図かもしれないし、スマホから飛んでくる行動履歴やクラッシュの亡骸かもしれない。ソーシャルメディアでの悲喜かもしれないし、App Store に煌めく星の数かもしれない。達人プログラマーは、このダイナミクスの中で生き延びる指針を示していない。

Lean も Devops も広くは Agile の末裔なんだからがんばって類推しろと言い張ることはできる。けれどその相似を声高に訴えたところで詮ない。テキストエディタに熱くなるヒマがあったらチャートの描き方おしえてくれよと言いたくなる。まあ黙って Lean と Ops の本でも読んでろと言われたらそうなのかもしれないけど。

不確実性と戦う今日のプログラマの姿は、変化と戦ったかつてのプログラマの姿と被る。そこには間違いなく pragmatism が生きている。荒ぶるソフトウェアたちの身体に目を向け、不確実性を中心とした新しい現実を描き出す達人プログラマーの登場を私達は待っている。

--

--