メアリー/トム・ポッペンディーク著 『リーン開発の本質』の感想



読んだ本のこと

情報科学:00

ジャーナリズム:00

哲学:10

歴史:20

社会科学:30

自然科学:40

技術,工学:50

文学:90

公開日:2020/8/14    

■本の情報
<作者> メアリー・ポッペンディーク , トム・ポッペンディーク
<発行日> 2008年2月 (日経BP社)

以下黒字が本の要約、緑字が私の感想/補足説明です。リンク先は用語に対する私の解説です。

■リーン開発の背景
リーン開発はトヨタ生産方式(TPS:Toyota Production System)をベースに考えられ、1990年にジェームズ.P.ウォマックら著「リーン生産方式が、世界の自動車産業をこう変える」にて、TPSをリーン生産という呼び名に変えたところから始まります。 その後、本著者がリーン開発をソフトウェア開発に適用した場合の開発手法をまとめております。本書以降もリーン開発に関する書籍は出ており、エリック・リース著「リーンスタートアップ」はベストセラーになっています。

 

■アジャイル開発との違い
アジャイル開発とリーンソフトウェア開発はセットで語られることがありますが、アジャイル開発とリーンソフトウェア開発の違いについて私の理解を説明します。 アジャイル開発とは、要件定義⇒設計⇒検証を小規模な実装とテストを繰り返して開発を進めるプロセスのことで、リーンソフトウェア開発とは、アジャイル開発を進めるための原理や手法の一つであると理解しております。

■要約
<7つの原則>
以下いずれの原則も本著で発見された原則という訳ではなく、仕事の進め方として、あるいはソフトウェア開発においては一般的な事を述べられていると思いました。 この7つの原則は、数ある仕事の進め方あるいはソフトウェア開発において、特に重要だと考える原則をピックアップしたという点、またそれらを解りやすく解説したという点に、本著の素晴らしさがあると私は考えています。

ただし、書かれているのはあくまでも原則であって具体的な手法まで落とし込まれている例は少ないです(事例は多いですが)。具体的な手法は、実際の自分の組織の実情を鑑みて各自で考える必要があると思います。

また本著の中で何回も「神話」という言葉が使われています。ソフトウェア開発において神話とは「迷信(広く信じられているが、合理的根拠のないもの)」という意味合いで使われます。 これはソフトウェア開発に携わっている人に広く読まれている本である、フレデリック・ブルックス著「人月の神話(1975年初版)」をリスペクトしての言葉であると考えます。 もしかして神話を"絶対的に正しいもの"として受け止めたら誤解が生じる可能性があります。

同様に「レガシー」という言葉も使われますが、これは「古臭いもの」というネガティブな意味合いとなります。最近は世間ではポジティブな意味合い(将来に渡っても残すことのできる遺産)もあるので注意が必要です。


① ムダをなくす 神話:早く仕様を固めればムダが減る
普段使われる機能は、フェイルセーフ機能などを除いても全体の2割に過ぎず、残り8割はほとんど使われない(これをパレートの法則という)。 コードをできるだけ書かないという事を念頭に本当に必要なものを初めに入れて、必要ないかもしれないと今思えるものは、よく吟味した上で後から入れる (YAGNI:You Aren't Going to Need it 今必要ない機能はつけるな)。 新たな機能を追加する際はリファクタリングしながらコードをシンプルに保つ。または、必要ないと思えても諸事情で致しかたなく入れた機能で、結果的に必要がないと解った機能は後追いでもその機能を削除する事も重要であると思われる。

② 品質を作りこむ 神話:テストの役目は欠陥の発見だ
本当に品質を高めたいなら、事後の検査で見つけるのではなく最初から欠陥が入らない様にする必要がある。コードを書く前に、それにかかわるユニットテストや受け入れテストを書く。そして、コードもテストもできるだけ頻繁に統合し、テスト一式を走らせて欠陥が入っていないかを確認する。 こういった手法の事を、テスト駆動型開発(Test-Driven Development:TDD)や継続的統合(Continuous Integration:CI)という。

テストや作業など何でも自動化するとそこから新たな発見や気づきが生まれなくなる。探索的テストや特性テストの実施に集中するためなど、技術者の技能向上のサポートに繋がる自動化が良い。 またプロセスの標準化は、その作業をする人に、疑問に思ったり変更したりするための土台を与えるものである。

③ 知識を作り出す 神話:予測が予測可能性を生む
新たに得た知識や、これまで存在していた暗黙知は、組織内で参照できるように文書としてまとめる。ただし大抵ドキュメントの山はほこりをかぶり、学習ツールとしてはあまり役に立たなくなるため、文書のまとめ方を工夫する必要がある。 またプロセスを文書化したり固定化するのは良くない。プロセスは常に改善しなくてはならないからである。プロセス改善のための時間を通常の業務とは分けて、定期的に設けるべき。 そのとおり文書が膨大だと読み手は読む前にお腹一杯になり読もうとしない。読ませるようにする工夫としては、文書をタグ付け分類するか、検索性を向上させるなどが考えられるが、それでも読まない人は読まない。自ら知識を取りに行くという組織の風土づくりが必要と考える。またプロセスを固定化しないのは同意だが文書化は必要で、すぐに改変できるような体制にすべきと考える。

ソフトウェアは予測不可能という点で悪名が高いため、予測可能性を高める努力をするが、かえって逆効果になる場合がある。予測が事実であると思い込み早期に決定を下すことで、後で変更しづらい行動方針にはまりやすくなる為である。 重要なのは、何かが起きたときにレスポンス良く的確な対応ができる事である。

④ 決定を遅らせる 神話:計画は決定である
取り返しのつかない決定は、手遅れにならずに決定を下せる最後のチャンスまでとっておく。重要な決断ほど、それを早く片付け、目の前のリスクに対処したいと多くの人は思うかもしれないが、それは逆で、重要な決断ほど選択肢をオープンにしておく必要がある。 完全に仕様を決定してから開発に着手するのが良い方法である、という考えは捨てる。

私も重要な決断は早く決定した方が、全体としての手戻りが少なくなるので良いと思っていたが、この原則について一理あるなと納得した。この原則を自分の組織で適用しようとした場合、計画は変更されることを前提に動いた方が、結果的には手戻りによる工数をペイできる程価値があると周囲を説得する必要があるので、ここが一番の課題だと思った。

第34代アメリカ大統領 ドワイト・アイゼンハワーの格言に、「戦いに備えるにあたり、計画が役に立たないという事は常にわかっていた。しかし、計画を立てるというプロセスは不可欠なのである」という言葉がある。

⑤ 速く提供する 神話:急がば回れ
高品質のソフトウェアを作るためには「ゆっくり時間を取って、慎重に」と考えれらてきたが「スピードと品質は両立する」。 その為には、安心して決定を任せられ、最後まで助けあえる思考力のある人材が専任で必要である。とあるが、そんな人材を育成するのが難しい。結局は、この原則以外の原則を実践すれば、品質が上がり、結果として速く提供できるのではないか。 また早く提供できれば、顧客に気を変える時間を与えることなく、ソフトウェアを提供できるというメリットも生まれる。

タスクキュー(未着手の仕事)が溜まりすぎている場合は、一度仕事を引き受けるのをストップする。また、常に仕事の負荷率を抑える様にする事で以下メリットがうまれる。

(1) 負荷率が100%を超えると作業効率が急激に悪化する。それを防ぐことができる。
(2) 依頼元は本当に必要な仕事を取捨選択するようになる。
(3) 依頼元は仕事を引き受けてもらえたと判断したら、その仕事が完了するまでの期間が長い分だけ、待ちのストレスがかかるが、そもそも相手が仕事を引き受けていないという状態の方がストレスは少なくなる。 これは混雑中の飲食店でも使われる手法で、接客が回っていない場合は、例えテーブルが空いていても客を店内に案内はせず外で待たせておき、落ち着いていたら案内する方が良いという手法である。 一度店内に案内された客は、その時点で客としての扱いをされるべきという心理が働き、待たされる時間に非常にストレスを感じるが、外で待っている間は、それほどストレスにならない。

⑥ 人を尊重する 神話:唯一最高のやり方が存在する
人を尊重する企業は優秀なリーダーを育て、リーダーシップを発揮する事で更に熱心で思考力に溢れた人材を育てていく。またエキスパートエンジニアへの尊重も必要である。

アメリカの統計学者エドワーズ・デミング(1900-1993)提唱のマネジメント14項目のうち、私が興味深いと思ったものを以下に記す。
 (1) サプライヤは入札額だけで選んではならず、誠実さと信頼に基づいた長期的な関係を確立し、それにより総費用を抑えるべき
 (2) 訓練を制度化する。マネージャーは自分の監督している作業のやり方を把握し、かつ作業者の訓練もできなくてはならない
 (3) 部署間の垣根を壊す。全員がお互いの考え方を理解できる様、部署の枠を超えたチームを作る。個人の成績を評価して、チームの協力関係の土台を崩してはならない。
 (4) 数量的ノルマを無くす。(開発チームへの身勝手な締切を無くす)。技術者の誇りを奪う制度を無くす。
 (5) 欠陥や低生産性を生み出すのは、人ではなくシステム。そしてシステムを変えるのはマネジメント側の責任
 (6) 全員に対して教育と自己改善を奨励する
 (7) 経営トップ層はサポートするだけではなく、実際の行動によって変化を導いていかなくてはならない

(3)について補足
 ・他人を手伝ったら自分が損するだけで、他の人の成績が上がる様なシステムではチームなどできる筈がない
 ・個人の業績や、その作業の技術的な成功に基づいて報酬を受け取るべきではなく、チームの成功への貢献やチーム全体がビジネス的な成功に基づいているかで報酬を受け取るべき
 ・組織に壁があるのは、全体最適化を犠牲にし職務ごとの最適化を促進するべく、職務レベルで査定や報酬を与えている証拠

(4)について
これは私もよく経験がある。与えられた仕事に対して、「どれだけ頑張っても納期はこれくらいになります」とマネジメントに訴えても、マネジメントはできる何の根拠もなく「早出しを検討せよ」とばかり言う。 これは担当者の誇りを奪う行為に他ならないし、担当者は品質を落として納期に間に合わせようとする。これでは悪循環になる。


⑦ 全体を最適化する 神話:分解によって最適化する
個々を最適化すれば全体が最適化される筈と思うが実はそうではない。開発者は納期優先の仕事を求められたら、いい加減な変更をコードに加えざるを得なく、結果コードの複雑さが増して、欠陥が増える。 個別最適化せずに全体最適化を目指することは誰も異論を唱えないと思うが、それをどうやって実現するかがソフトウェアの世界では非常に難しい。




関連記事一覧



読んだ本のこと

情報科学:00

ジャーナリズム:00

哲学:10

歴史:20

社会科学:30

自然科学:40

技術,工学:50

文学:90