無謀な負債、慎重な負債
優れたアーキテクチャがあれば、システムを容易に理解・開発・保守・デプロイできる。(Kindle の位置No.2209)
ソフトなソフトウェア、振る舞いの変更が容易
構造の価値を構成する主な特性(slide=44、割愛)
ソフトウェアデザインに関する深い知識・理解が必要
開発者皆が構造の価値を正しく評価できるとは限らない
ビジネスサイドの不理解ではないという主張
2軸
意図的/無自覚
無謀/慎重
無謀な開発の説明となっている
(1)無謀かつ無自覚=知識不足・スキル不足
開発者としての未熟さ(知識不足・スキル不足)により抱える
すぐれたデザインプラクティスに関する知識の不在
テストコードを書いたりリファクタリングしたりできない
優れたアーキテクトがいても、理解されずに破壊されていく
負債の存在に気付いていない
(2)無謀かつ意図的=クイック&ダーティ
品質とスピードを天秤にかけてスピードを選ぶ
no design(=クイック&ダーティ)はgood designに1ヶ月で追い抜かれる
優れたデザインとコードがスピードを早める(slide=57)
引き換えじゃない。品質を重視すればスピードを得られる
本来やるべきことをやらずに突き進むので、それが技術的負債になっている
負債への対応も消極的
後回し
返済するモチベーションを失ってしまう
背景:トレードオフスライダーが壊れている
チームは期日もスコープも動かせない
(ref: 荒ぶる四天王。残りの予算も動かせない。品質が落ちる) ここまでは構造の価値を正しく理解できていない。そのために技術的負債を生んでいる(slide=64)
悪い負債:いつまでも返済されない
良い負債:できて1週間未満
負債はこまめに返済していくべき
(1)と(2)は、返済が滞る悪い負債
「悪い技術的負債は開発者体験を悪化させる」
(3)慎重&意図的な負債はほぼ良い負債=実験や試行錯誤
実験の過程で招く一時的な負債
ユーザからのフィードバックを得ることを優先した短期間の負債
優れた振る舞いや構造を生み出すための過程で一時的に生まれる負債
早期に負債は返済される
が、蓄積していく(見逃しもある)
(4)慎重かつ無自覚=知識との大きな乖離
ウォード・カニンガムの定義に近い領域
「今になって設計がどうあるべきか悟った」
後から気付く
開発チームの理解が進んだ結果、現状のアーキテクチャが最適でない
現状のアーキテクチャは負債になる
解消にはリアーキテクティング
大きなビジネス判断となる
開発者はステークホルダーに返済の重要性を解く
ステークホルダーに理解が得られない
開発者は構造が「見えない」ままにしている
(3)(4)(自覚している負債)は、学びによる負債
負債が生じる4つの原因を見てきた
(1)知識不足・スキル不足と(2)クイック&ダーティーはすぐに脱却すべき
(4)知識との大きな乖離は取り除かないといけない