一番不確実なところを最初に確認する
一番不確実なところを最初に確認する
hiroki_daichi: アジャイル等の原理がその言葉の意味から「速さ、敏捷性」に関連づいて説明されることでわかりにくくなっている。ソフトウェア開発における重要な原理は「Fail-Fast」であり、静的型付けも自動テストもカオスエンジニアリングもスクラム開発もプロダクトマネジメントも原理は「早期失敗」することだ。 早期に失敗するには、仮説検証のリードタイム思考になる。何が1番ボラティリティの高いリスクかを同定する思考が求められる。 hiroki_daichi: しかし、このことは人間の認知コストが非常に高い。人は不確実性から逃れたがるという本能があるからだ。この本能を飼い慣らすし早期失敗を実現する文化資本が極めて重要で、そういったものがソフトウェアやプロセスの実践の中で体得、結晶化されていく。 hiroki_daichi: ドメイン駆動設計もドメインの理解と対話というプロジェクトリスクの中心に立ち向かう話であるが、それと同時に理解し、蒸留されたドメインが無矛盾であるように早期失敗される形で型やアサーション、テストに組み込まれるようにする実装方法についての話でもある。 nishio: 「仮説検証のリードタイムを縮めることが大事、そのためには何が1番ボラティリティの高いリスクかを同定する思考が求められる」って話、完全に同意なのだけどこれをこの表現で中高生に伝えても伝わらないので噛み砕いた説明を考えてる nishio: 「AからBを作って、BからCを作ったら顧客がハッピーになる」という提案において「AからBを作る方法がうまくいくか不明確」なのに「BからCを作るところをプロトタイプとして作りました」と言われても、それAB間が予定通りに行かなかったら無意味になる作業では?という気持ち https://gyazo.com/e4a07f6c3868f0e67aa05b0cdeddad2c
nishio: つまりプロトタイプを作って検証すべきなのは一番不確実な矢印。矢印のつながりの中で、一番弱い矢印がどこなのかを特定して、それが切れてないかどうか確認するためのプロトタイプを作る必要がある。「もし切れてるなら早く気づいた方が得」だから。「早く失敗することが大事」とはこういうこと。 nishio: 多分だけどもABの矢印が不安だから採択された後でメンターに教えてもらおうと思ってるのだろうけど、アドバイスをもらうにしても「何もやってないです、教えて」という状態よりは「これをやったらいいかなと思ってやってみたけど期待と違うこういう結果になった」の方がフィードバックしやすい nishio: 「夏休みの宿題、得意なところからやると苦手なものが残って気が重い。苦手なものからやった方がいい」という例えは雰囲気的にはいいけど、タスク間に依存関係がないんだよなぁ。苦手な自由研究を後回しにして夏休み中に終わらなかったとしても先にやった得意な漢字ドリルが無効になったりしない nishio: 「AからBを作って、BからCを作る」みたいに矢印が直列に並んでいる時は、矢印が一つ壊れてると全部ダメになる。だから一番弱い矢印を真っ先に確認する必要がある。