さっさと動くものをつくって、小さく素早く失敗して学ぼう
今回は、前回紹介した『UNIXという考え方』の続きで、定理の一つのご紹介です。「初期から動くものをつくってフィードバックをもらって、軌道修正しながら、ゴール見つけて達成しましょう」は、アジャイルな開発でも指摘していますが、Unixの哲学でもその重要さが語られています。
定理3:できるだけ早く試作を作成する
ソフトウェアを使って、誰向けに何の問題を解けばよいか、どう解けばよいか、予めはっきりと分かっているのであれば、わざわざトライアンドエラーで失敗しながら学ばなくても、一度立てた計画通りにものごとをすすめることができるでしょう。例えば半年間の開発の初期段階で仕様・設計を作成して固定し、実装・テストして完成させる計画を立てても実現できるはずです。
ところが、終盤に実際に動くものを見てもらうと、ユーザや営業などから「欲しいのはこれじゃない」「これの何が嬉しい・便利なのか解らない」「そんなことより〇〇が切実に困っているんだけど」「こんなの買ってくれないよ」などなどのシステムに対する不満や新たな要望が、続出する場合があります。この忌憚ない意見を終盤でもらっても手遅れで途方にくれてしまいます。「何を作ればよいか」だけでなく「どう作れば良いか」も同様に、初期の計画段階では気づかなかった技術課題が後期に発覚しても対応に困ります。
そこで、この定理「できるだけ早く試作を作成する」です。
開発の初期段階のときに「何をつくれば良いか実はわかっていない」「どうつくれば良いか探索が必要」の前提に立ち、早い段階から動くソフトウェアを作りフィードバックを得て軌道修正することで、ユーザが本当に欲しかったものを実現します。書籍『UNIXという考え方』では、開発者とエンドユーザの協力関係の様子、動くソフトウェアとドキュメントの作成の過程の様子が描かれています。
「できるだけ素早く試作を作成する」の類似する考えは、表現を変えて一般に広まっています。
書籍『達人プログラマー』では「曳光弾(エイコウダン)」として知られています。書籍では曳光弾の利点として、1.早いうちからユーザーに見せることでフィードバックや協力が得られる、2.早い段階から開発者が活躍できる舞台が用意できる、3.エンドツーエンドで動作するプラットフォームが手に入る、4.ステークホルダーにいつでもデモ可能である、5.進捗が明確になる をあげています。
開発ではなく営業やマーケティングの分野では、書籍『Ready,Fire,Aim』をきっかけに「構え、撃て、狙え」が広まっています。プロダクトやサービスを、さっさと市場に出し反応をみて対応する過程の重要さを「構え、撃て、狙え」の言葉で端的に表しています。
Rated 4.4/5: Buy Ready, Fire, Aim: Zero to $100 Million in No Time Flat (Agora Series) by Michael Masterson: ISBN…www.amazon.com
Facebookが大切にしていることとして、「Done is better than Perfect(完璧を目指すよりまず終わらせろ)」の言葉が有名です。これも、完璧を目指して作成に時間をかけすぎてユーザからの学びの機会を損失するよりも、早い段階で出してユーザの反応を観察して学びを得ることの大切さをあげています。
Hackers try to build the best services over the long term by quickly releasing and learning from smaller iterations rather than trying to get everything right all at once. To support this, we have built a testing framework that at any given time can try out thousands of versions of Facebook. We have the words “Done is better than perfect” painted on our walls to remind ourselves to always keep shipping.
「何を作ればよいか」「なぜそれが必要とされているか」「どう作ればよいか」に確信が得られず、堂々めぐり議論を続けたり、ドキュメントと格闘を続けてもなお決めきれないのであれば、1日〜1ヶ月程度の期間で、さっさと動くものをつくって観てもらってはどうでしょうか。小さく素早く失敗してフィードバックを得てはいかがでしょうか。大きな失敗を恐れて完璧に仕上げようと長期間に抱え込んでしまうと、かえって大事な学びの機会を損失してしまいます。
フィードバックを初期段階だけではなく、継続してフィードバックをもらい、コードとビジネスが共に成長し続けるためには、「Emergent Design」を実戦し「技術的負債」を小さく抑えることが重要になってきますが、これは別の機会に紹介します。