全章連続表示(印刷用)

付録サイクルを1本通す ── 「変更可能とする」の一文が育つまで

仕様書に書かれた一文が、【たたく】→【深める】→【広げる】→【確かめる】の4ステップを1周すると何が起きるのか。それを、1件の記述で最後まで追います。

題材は、「なぜ今このメソッドか」の章で挙げた失敗です。

仕様書に「送料無料の閾値は、変更可能とする」とだけ書かれていた。AIは「変更可能」を素直に解釈し、定数ファイルに値を切り出した。技術的には正しい。しかし発注側が考えていたのは別のことだった——キャンペーンによって送料を無料にするケースがある。期間を区切って閾値を下げる、対象商品を絞って無料にする。それを業務部門が自分で切り替えたい。管理画面も、誰が切り替えてよいかの権限も、いつ・誰が・何を変えたかの履歴も要る。食い違いが発覚したのは本番2週間前だった。

以下はすべて架空の例です。例の決定が生まれる業務(発生箇所)は「販売業務」、成果物の名前は一般的なものを使います。


【たたく】── 叩き台に、その一文が書かれた

叩き台は、AIに執筆をサポートさせて書き、人が直します。書かれた要求事項はこうです。

送料無料の閾値は、変更可能とする。

要求事項を書き終えたら、書き手が自分で見直します。身だしなみ(体裁・命名・記載漏れ)を整え、IDと参照が張れているかを確かめます。

この見直しでは、この一文に問題は見つかりません。表記は揺れておらず、IDも振られ、記載欄も埋まっています。「変更可能とする」があいまいだと気づくには、誰が変えるのか(主体の一覧)や、何のために変えるのか(業務ルール)と比べる必要があります。どちらも、この要求事項の外にあります。1つの文書を見直すだけでは、複数の成果物にまたがる抜けは見えないので、【たたく】では拾えません。

ひとつだけ、ここで効きうる手立てがあります。AIに叩き台を書かせるとき、最初に「根拠が見当たらなかった箇所を挙げよ」と指示を立てておきます。AIは根拠のない箇所も黙って埋めるので、埋めたところを埋めたと言わせるのです。「変更可能とする」がそこに挙がれば、この一文は次のステップの議題になります。ただし、挙がる保証はありません。この段階で頼りになるのは、検査ではなく、次のステップで人が理由を書こうとすることのほうです。


【深める】── 議論で、何が決まり、何が決まらないか

議論のしかたは、これまでのままでかまいません。本メソッドが足すのは、議論の出口を記録として残すことだけです。出口は2つしかありません。決まったか、決まらなかったかです。

AIに議論をサポートさせてできるのは、論点の候補を並べ、同じことを指している論点をまとめ、決まっていない箇所を指し示すところまでです。どれを論点に立てるか、どう決めるかは人が決めます。業務の判断は発注者側の責任者が負います。この一文からは、3つの論点が立ちます。

  1. 誰が変えるのか。 開発側か、業務部門か。
  2. 何のために変えるのか。 恒久的な料金条件の見直しか、期間を区切った売り方か。
  3. 何をもって「変更可能になった」と言えるのか。 定数を外に出せば済むのか、業務部門が自分で切り替えられて初めてそう言えるのか。

議論の結果、決まったことと決まらなかったことに割れます。

決まったこと:閾値の変更はキャンペーンの実施手段であり、業務部門が自分で切り替える。開発側のリリースを伴う形にはしない。変更の履歴は残す。

決まらなかったこと:誰に変更を許すか(役割の細かさ)。期間を指定して予約できる必要があるか、即時切り替えでよいか。対象商品を絞る要否。

決まったことは、ADRへ

決定は、なぜそう決めたか(WHY)と、判断した人の証跡とともに記録します。ADRの記述形式は、本書が一案として推奨する形で書きます。Nygard 形式に「この決定から生じる制約」節を足したもので、ADRの扱いの章で見たものです。制約節は「影響範囲 × 満たすべき状態」の2項で書き、決定を受け止める成果物に着地させます。ここが、後で検算の問いそのものになります。

順序は議論 → 決定 → 記録です。記録するのは決定が下された後であって、記録しながら決めるのではありません。

# ADR-0231:送料無料の閾値は、業務部門が自分で切り替える

## ステータス
- 状態:仮決定
- 発生工程:要件定義
- 確定者:発注者側の販売業務責任者
- 発生箇所:販売業務
- 置換:なし
- 前提とする決定:なし

## 背景
閾値の変更は、恒久的な料金改定ではなく、期間を区切ったキャンペーンの
実施手段である。売り方を決めるのは業務部門であり、実施の判断から
反映までの間に開発側の作業が挟まると、打ちたいときに打てない。
履歴を残すのは、過去の受注がどの条件で成立したかを後から説明する
必要があるためである。

## 決定
送料無料の閾値は、業務部門が自分で切り替えられる形で提供する。
開発側のリリースを伴う変更手段は採らない。変更の履歴を残す。

## 結果
### 良い結果
キャンペーンの実施が、開発側の作業計画から切り離される。
### トレードオフ(悪い結果)
変更の手段・権限・履歴の分だけ、作るものが増える。

### この決定から生じる制約(後続成果物が満たすべき状態)
- 販売業務の要求事項:閾値は業務部門が変更し、変更に開発側のリリースを
  必要としないことが記述されている。
- 販売業務の要求事項:閾値の変更履歴(変更日時・変更者・変更前後の値)を
  保持することが記述されている。
- 販売業務の業務の定義:閾値の変更が、開発側のリリースを伴う作業として
  記述されていない。
- 販売業務のユースケース:業務部門の担当者が閾値を変更する手順(システムの
  ふるまいを含む)が記述されている。

制約節の各行は「〜が記述されている」「〜として記述されていない」という、成果物が満たしている状態の形で書いてあります。満たしているかどうかを、人もAIも判断できる形です。影響範囲は、この決定を受け止める成果物(要求事項・業務の定義・ユースケース)であり、できるだけ名指しで書いてあります。権限や業務イベントへの反映は、要求事項から成果物どうしの辿りで広がり、【広げる】がそれを見ます。影響範囲は成果物の種別と業務のまとまりの名前で書いており、成果物のID(UC-0012 など)では書いていません。だから、起票後に生まれる成果物も、生まれた瞬間に同じ制約の下に入ります。

名指しているのは、いずれもこの決定が生まれた工程(要件定義)の成果物です。外部設計はこの要件定義の成果物を読んで書くので、この決定は成果物に乗って次の工程へ届きます。

決まらなかったことは、未決型ISSUEへ

決まらなかった3つは、未決型ISSUEとして台帳に残します。未決の明示は敗北ではありません。未決と書かれた箇所を、AIは勝手に補完できないからです。

そして、成果物の側にも、未決であることとISSUEのIDを書きます。台帳に書いただけでは足りません。成果物を読む側、とりわけ実装するAIは台帳を見ないので、成果物に書かれていない空白は「埋めてよい空白」に見えるからです。

制約節が「業務部門が変更する」と言い、どの役割まで許すかが未決になっているのは矛盾ではありません。書き方は決まっており、中身が決まっていないのです。

決まったことは、この時点ではまだ成果物に入っていない

決定が下されたことと、成果物がそれに合わせて書き直されていることは、別です。反映は反映型ISSUEの作業として行われ、この例では節目でまとめて行います。


【広げる】── シナリオを歩かせると、何が立つか

【広げる】は、俯瞰して「足りているか」を見る低頻度の巡回です。やることはシミュレーションです。AIが業務シナリオを創作し、成果物群に照らして時系列に歩かせ、空白を4つのレンズ(業務との整合/境界・責任範囲/検証可能性/正常系偏重)で見ます。

シナリオの種は、「長さと期限の衝突」(想定より長引いたら/先に期限が来たら)と「人・役割の入れ替わり」(担当者が替わったとき、その人に紐づいていた権限はどうなるか)を渡すとよいでしょう。たとえば、期間限定のキャンペーンを開始し、途中で担当者が異動し、期間終了をまたいで受注が残る、という時間の流れを歩かせます。

立つのは2つのレンズです。

レンズ何が読み取れなかったか
業務との整合「変更可能とする」が、どの業務ルールに繋がるのかが読み取れない。逆に、キャンペーンという業務ルールの側も、どの要件に反映されているのかが読み取れない(双方向に見る)
境界・責任範囲閾値を変更するタスクの開始条件を満たす状態を用意するタスクが、どこにも見当たらない。あわせて、閾値が変わったことを後続の担当者がどうやって知るかも読み取れない

正常系偏重も、つなぎ目にひとつ立ちます。キャンペーン期間が終わった後、期間中に受け付けた受注をどう扱うのかが、どの成果物にも見当たりません。

歯止めにより、問わないこと

レンズには、それぞれ何を問わないかの歯止めがあります。この例では、次のことは問いません。

どのレンズでも、指摘への対応のしかた(管理画面を作るのか、業務部門が扱えるファイルにするのか)は、AIが書きません。「ない」とも言い切らず、「確認した範囲では見当たらない」とし、どの成果物をどんな言葉で探したかを添えます。出た指摘を、未決型ISSUEにするのか、成果物をそのまま直すのか、採らないのかは、人が振り分けます。

【広げる】でも、拾えるとは限らない

シナリオを思いついた順に作らせると、この一文の周りを1本も歩かないことがあります。種を渡すかどうかで、当たり外れが大きく変わります。拾えたとしても、返ってくるのは「読み取れない」までで、空白の在処は分かっても、埋め方は分かりません。


【確かめる】── 後から出た決定が、先に書かれた成果物に当たる

【確かめる】は、ADRの制約節と成果物を突き合わせ、決定に合っているかを見る検算です。この例は、回すきっかけのうち「決定が増えたとき」にあたります。「変更可能とする」と書かれた要求事項も、業務の定義も、ADR-0231 より先に書かれていました。

ADR-0231 の制約節は、販売業務の要求事項・業務の定義・ユースケースを影響範囲にしています。そこで、この3つの成果物に、ADR-0231 の制約を1行ずつ当てます。返ってくるのは、たとえば次の指摘です。

ADR-0231 の制約見た成果物と記載指摘
業務の定義:閾値の変更が、開発側のリリースを伴う作業として記述されていない販売業務の業務の定義「送料無料の閾値はシステムの設定値として保持し、変更時は開発側で反映する」食い違っている。記載をそのまま引いて指摘する
要求事項:閾値は業務部門が変更し、変更に開発側のリリースを必要としないことが記述されている販売業務の要求事項「送料無料の閾値は、変更可能とする」判断できない。誰が変えるのか、リリースが要るのかが読み取れない
要求事項:閾値の変更履歴(変更日時・変更者・変更前後の値)を保持することが記述されている販売業務の要求事項の全体どこにも書かれていない。まとめて見ても見当たらない
ユースケース:業務部門の担当者が閾値を変更する手順が記述されている販売業務のユースケースどこにも書かれていない。ユースケースがまだ1本もない

ここでは、成果物を直すと決め、反映型ISSUEを起こします。直してから、もう一度【確かめる】を回し、指摘が出なくなったら、人が反映型ISSUEを閉じます。

この検算に使ったADRは、まだ仮決定です。この例は、仮決定から検査に載せ、根拠にしたADRの状態を指摘に添えるプラクティス(7章)に従っています。


本番2週間前に発覚するはずだったものは、どこで拾われたか

「なぜ今このメソッドか」の章の問題提起に戻ります。あの一文が開けていた空白は、1周のどこで表に出たでしょうか。

空白表に出た場所
誰が変えるのか【深める】——理由を書こうとした時点で問いになった。【広げる】の境界・責任範囲は、そこを通り抜けた場合の保険である
何のために変えるのか(キャンペーン)【深める】——決定の背景として書かれ、記録として残った
何をもって「変更可能になった」と言えるのか【深める】で論点になった
いつ・誰が・何を変えたか(履歴)【確かめる】——後から出た決定と、先に書かれていた要求事項の突き合わせで「どこにも書かれていない」として出た
期間終了と、期間中の受注の扱い【広げる】の正常系偏重。ただし、種を渡していなければ出ない
変更手段(管理画面か否か)検査では決まらない。検査が問うのは存在と検討の跡までで、手段そのものは人が決める

最も効いたのは検査ではありません。ADRの背景を書こうとして、手が止まったことです。決定の理由を書こうとすると、書けない箇所が出ます。それが空白の在処であり、埋まれば仕様に穴は残らず、埋まらなければ未決として明示されます。どちらにせよ、AIが推測で埋める場面は来ません。検査は、その網をすり抜けたものを拾います。

そして、1周では終わりません。役割の細かさも、予約切り替えの要否も、対象商品を絞るかも、未決型ISSUEのまま残っています。それでかまいません。上流で全部決まるとは考えません。決まらなかったものが未決と分かる形で残り、次の議論の議題として自動的に揃っていること自体が、この1周の成果です。

本番2週間前との違いは、誰も気づかないまま流れたか、気づいた上で持ち越したかの違いです。


2周目 ── 未決がひとつ決まると、何が動くか

1周目で残った未決型ISSUEのうち、「対象商品を絞る要否」が決まる、という筋で、もう一度だけ通します。道筋は変更管理の章と同じなので、違うところだけを見ます。

議題は、もう揃っている

変更が外から来たなら、まず未決型ISSUEを起こします。今回は、起こす必要がありません。1周目の【深める】で、すでに未決として台帳に載っているからです。することは、その未決を、決める場の議題に載せることだけです。議題が揃っていたのは、1周目が、空白を空白のまま書き残したからです。

影響を調べるところは、変更管理の章と同じです。参照の照合と影響範囲で、閾値に触れている成果物とADRを洗い出し、【確かめる】と【広げる】で、絞った後の姿が既存の決定と食い違わないかを見ます。

覆らないので、新しいADRを並べて起こす

議論の結果、対象商品は絞ると決まりました。確定するのは、発注者側の責任者です。ここで、1周目のADRを直すのか、新しく起こすのかで、手が止まります。

1周目の決定は、覆っていません。業務部門が自分で切り替える、という決定は、そのまま生きています。覆っていないものは、置き換えません。かといって、1周目のADRに「対象商品も絞れる」を書き足すこともしません。書き足すと、いま有効な決定を読むのに、本体と書き足しの両方を突き合わせることになるからです。小さな追加の決定は、新しいADRとして並べて起こします。

# ADR-0248:送料無料の対象は、商品の範囲を絞って指定できる

## ステータス
- 状態:仮決定
- 発生工程:要件定義
- 確定者:発注者側の販売業務責任者
- 発生箇所:販売業務
- 置換:なし
- 前提とする決定:ADR-0231

## 背景
キャンペーンは特定の商品群を押し出すために打つものであり、全商品を対象に
すると原資が合わない。先の議論で決めきれなかったのは、絞る単位(商品の分類
か、個々の商品か)が業務部門の側でも定まっていなかったためである。今回、
分類の単位で足りることを確認した上で決めた。

## 決定
送料無料を適用する対象は、扱う商品の全体ではなく、指定した範囲に絞れる形と
する。範囲の指定は、閾値を切り替えるのと同じ主体が行う。

## 結果
### 良い結果
キャンペーンの原資を、押し出したい商品に寄せられる。
### トレードオフ(悪い結果)
対象商品の外の商品が同じ受注に混ざったときの送料の扱いを、別に決める必要が出る。

### この決定から生じる制約(後続成果物が満たすべき状態)
- 販売業務の要求事項:送料無料の適用条件が、金額の閾値だけで判定する
  ものとして記述されていない。
- 販売業務の業務の定義:送料の扱いが、対象商品の内と外を区別せずに
  記述されていない。
- 販売業務の要求事項:対象商品の範囲の変更履歴(変更日時・変更者・
  変更前後の値)を保持することが記述されている。

範囲を指定するのは「閾値を切り替えるのと同じ主体」なので、このADRは ADR-0231 を前提にしています。ADR-0231 が置き換わったら、このADRも見直す対象に挙がります。

反映して、閉じる

1周目のADRは、そのまま現役です。2件は並んで立ち、どちらも販売業務の要求事項に当たります。反映の作業は、影響を受ける成果物ごとに反映型ISSUEとして起こし、次の節目で反映します。反映したら、もう一度【確かめる】を回します。指摘が出なくなったら、人が反映型ISSUEを閉じます。

2周目でも、片付かないもの

AI-Trusted Spec method 初版
© INTRAMART CORPORATION