この知恵で考えられること
「設計ができない。」という状態について、多くの人は「一つの形にまとめられない」「全体像が描けない」という状態を思い浮かべます。
「一つにまとめられない」
「設計ができない。」という状態について、多くの人は「一つの形にまとめられない」「全体像が描けない」という状態を思い浮かべます。
それは出来てない事としてはあっていて、具体的な症状ではないです。
なので、「上手く一つにまとめよう」と頑張っても意味無いです。
設計が完成するというのは、最後に全体を一つへ収束させる行為であって、その前には整理しておかなければならない要素がいくつもあるからです。
設計できないとは、
一つへ落とし込めないことではなく、
一つへ落とし込める状態がまだ作られていないということ。
だから、設計に迷ったときは、「どうまとめればいいか」を考え続けるよりも、一歩手前へ戻る方が早いことが多いです。
設計とは、突然ひらめいて全体像を描く天才的な能力ではなく、具体的な労働です。
全体が自然とまとまるように、手前の材料を一つずつ整理していく営み。
“設計ができる人”は、何をしていなくて、何をしているのか
設計では、考えなければならないことが多くあります。
目的、範囲、単位、区分、階層、関係、状態、連動、順序、例外、成立条件、品質、環境。
これらをすべて同時に考えようとすれば、誰でも動けなくなります。
設計できる人は、すべてを一度に考えられる人ではありません。
むしろ、今考えなくてよいものを切り分け、少ない情報だけで判断できる状態を作ることに長けています。
設計を進めるとは、複雑な全体を抱え続けることではありません。
複雑さを失わないまま、考えられる大きさへ分け、必要な順番で扱っていくことです。
一度に扱う情報量を減らす
設計できる人は、全体を設計していても、常に全体を考えているわけではありません。
- 今は単位だけを考える
- 今は状態推移だけを見る
- 今は通常の流れだけを通す
- 今は成立条件だけを決める
- 今はこの一人の利用者だけを扱う
というように、考える範囲を限定します。
これは、他の要素を忘れているわけではありません。
今の判断に必要のない情報を、一時的に背景へ下げています。
例えば、状態推移を考えている途中で、画面の見た目や将来の拡張性まで考え始めると、判断に必要な情報が急激に増えます。
そこで、
「その論点は後で扱う」
と切り離し、今決めるべきことだけを残します。
設計できる人は、頭の中に多くの情報を保持できるのではなく、一度に保持しなければならない情報を減らしています。
また、決めたことを外へ出すことも重要です。
- 名前を付ける
- 図にする
- 表へ置く
- ルールとして書く
- 決定済みと記録する
一度決めたことを頭の中に置き続けると、その論点は何度も思考へ戻ってきます。
記録することは、他者へ説明するためだけではありません。
一度考えたことを、もう考えなくてよい状態にするための操作でもあります。
具体的な一例を、最初から最後まで通す
設計は、要素を静止した状態で並べるだけでは成立しません。
実際に使われるときには、誰かが何かを始め、途中で情報や状態が変わり、最後に何らかの結果へたどり着きます。
そのため、設計できる人は具体的な一件を置き、最初から最後まで順番に通します。
例えば、
- 初めて利用する一人の人
- 一件の注文
- 一つの申請
- ある一日の業務
- 一つの問題が発生して解決するまで
を選びます。
そして、
- 最初に何が見えているのか
- 誰が何を始めるのか
- 何を入力し、何を受け取るのか
- どの状態へ変化するのか
- 次に誰へ渡るのか
- どこで終わるのか
を、出来事の順番に沿って追っていきます。
これは、例として説明することとは少し違います。
設計した世界の中を、実際に一度歩いてみることです。
具体的な一件を通すと、抽象的な構造だけを見ているときには気づかなかった問題が現れます。
- 途中で必要な情報が存在しない
- 誰が行うのか決まっていない
- 次へ進むための条件がない
- 状態が変わるきっかけがない
- 受け渡す相手がいない
- 最後まで進んでも何をもって終了か分からない
設計できる人は、最初からすべてのケースを同時に扱いません。
まず一つの代表的なケースを最後まで通し、次のケースはそこからの差分として考えます。
全員、全場面、全条件を並列に考えるのではなく、一つの具体例を軸にして、必要な違いだけを追加していきます。
今使わない論点を保管する
設計を進めていると、次々に新しい論点が出てきます。
「この場合はどうするのか」
「将来こう変わる可能性もある」
「ここは誰かに確認しなければならない」
「この例外にも対応した方がよいかもしれない」
どれも無視できないように見えます。
しかし、出てきた問いをその場ですべて解こうとすると、本来進めていた設計が何度も中断されます。
設計できる人は、
そこは考える必要がある。
ただし、今考える必要はない。
という扱いができます。
論点を、
- 今決めるもの
- 後で決めるもの
- 誰かに確認するもの
- 別の前提が決まるまで答えられないもの
- 今回は扱わないもの
に分けて保管します。
論点を保管するとは、問題を先送りにすることではありません。
忘れない場所へ残した上で、現在の思考から外すことです。
未解決の問いを頭の中に置き続けると、その問いは他の判断にも影響し続けます。
一方で、適切に保管できれば、今の設計を進めながら、必要な時点で問いを取り出せます。
設計できる人は、問いに答える能力だけでなく、問いを安全に未解決のまま置いておく能力を持っています。
言葉の意味を固定する
設計では、同じ言葉を何度も使います。
しかし、その言葉が場面ごとに異なる意味を持つと、設計の各部分が少しずつずれていきます。
例えば「完了」という言葉でも、
- 入力が終わった
- 提出が終わった
- 確認が終わった
- 承認が終わった
- 後続の処理まで終わった
という複数の意味がありえます。
「ユーザー」も、
- 契約した人
- 実際に操作する人
- 情報を受け取る人
- 管理する人
のどれを指すかによって、設計が変わります。
言葉の意味が固定されていないと、その言葉が現れるたびに、
「ここではどの意味なのか」
を考え直さなければなりません。
さらに、人ごとに異なる意味で理解すれば、同じ設計について話しているようで、別のものを考えることになります。
そこで、設計できる人は、
- 異なるものには異なる名前を付ける
- 同じ名前を使うなら同じ意味にそろえる
- 曖昧な言葉は、何を指すかを具体化する
- 状態や行為の違いが重要なら、別の言葉に分ける
ということを行います。
名前を付けることは、単なる整理ではありません。
複数の条件や意味を一つの言葉へまとめ、以降はその言葉だけで扱えるようにすることです。
つまり言葉は、設計における情報圧縮の道具です。
「承認済み」という言葉の意味が固定されていれば、そのたびに、
「必要な確認が終わり、承認者による決定が行われ、以後は編集できない状態」
と考え直す必要はありません。
言葉を固定することで、複雑な条件の束を一つの単位として扱えるようになります。
いかに全体を考え続けないか。
ここまでの四つは、設計対象そのものの要素ではありません。
多くの設計要素を、思考できる状態に保つための技術です。
- 一度に扱う情報量を減らす
- 具体的な一件を最初から最後まで通す
- 今使わない論点を保管する
- 言葉の意味を固定する
設計できる人は、これらを繰り返しながら設計を進めています。
つまり、設計ができない人とは自ら自分では全体が見えない状態を作ってしまったまま全体を眺めている人です。
能力の話ではなく、思考や作業の順番の問題です。
1つにまとめる。その前に行う事柄
ここでは、設計が成立するために必要な要素を一つずつ見ていきます。
大切なのは、一つにまとめられないときに、どの設計がまだ足りていないのかを確認できる様にするために並べています。
創造物の役割を定める
目的の設計
最初に必要なのは、何を成り立たせるための設計なのかを定めることです。
「予約システムを作る」「新しい組織を作る」といった、作るものの名前だけでは足りません。
- 誰が何をできるようになるのか
- 現在の何が変わるのか
- 何が実現すれば、この設計に意味があるのか
を明らかにします。
目的が曖昧だと、それぞれの要素を良くすることはできても、全体として何を目指せばよいかを判断できません。
範囲の整理
次に、今回どこまでを設計するのかを定めます。
- どの人を対象にするのか
- どの場面を扱うのか
- どこからどこまでを一つの仕組みに含めるのか
- 何を別の仕組みや人の判断へ委ねるのか
現実にあるものをすべて設計対象にしようとすれば、設計は終わりません。
範囲を定めるとは、問題を無視することではなく、今回責任を持って成立させる部分を決めることです。
成立条件の整理
何が満たされれば、その対象や仕組みが成立していると言えるのかを定めます。
- 必ず必要なものは何か
- どれか一つあればよいものは何か
- 何が欠けると成立しないのか
- どの状態になれば次へ進めるのか
を整理します。
成立条件がなければ、「まだ足りない気がする」という感覚が永遠に残ります。
また、成立条件と理想的な品質を分けることも重要です。
最初から理想まで満たそうとすると、設計の最低限の形すら閉じられなくなります。
品質の整理
成立した上で、どのような良し悪しを目指すのかを定めます。
- 速い
- 分かりやすい
- 安全である
- 柔軟に変更できる
- 間違いが起きにくい
- 負担が偏らない
といった観点です。
ただし、「使いやすい」「質が高い」と言うだけでは設計できません。
- 誰にとっての品質か
- どのような状態を良いと呼ぶのか
- 何と比較するのか
- 複数の品質が衝突したとき、何を優先するのか
まで定める必要があります。
品質の設計とは、良いものを目指すことではなく、何を良いと判断するのかを固定することです。
環境の整理
設計されたものは、何もない空間で使われるわけではありません。
- 利用する人数
- 使用する場所
- 利用者の知識
- 予算
- 法律やルール
- 既存の設備やシステム
- 通信環境
- 将来起こりうる変化
の中で使われます。
すべての環境に対応しようとすれば、設計は閉じられません。
そこで、
- 今回は何を前提とするのか
- 何は変わらないものとして扱うのか
- 何は変化する可能性があるのか
- 前提が変わったとき、どこへ影響するのか
を定めます。
前提は、永久に正しい必要はありません。
一つの設計を成立させるために、一時的に固定できればよいのです。
これらは、すべてを検討し終えなければ設計できない、というチェックリストではありません。
設計を一つの形へまとめられないときに、どこまで戻ればよいかを知るための視点です。
単位が切れていないのか。
行為が混ざっているのか。
状態が定義されていないのか。
通常の流れがイレギュラーに侵食されているのか。
成立条件と理想が混同されているのか。
「設計できない」という一つの問題に見えても、実際に不足している設計は異なります。
全体へ戻せないときに、無理に全体を考え続けない。
不足している設計まで戻り、そこだけを整える。
そうすることで初めて、個別の要素を一つの形へ収束させられるようになります。
登場人物を扱える状態にする
行為の整理
その仕組みの中で、誰が何をするのかを区分します。
「システムを利用する」だけでは、設計に必要な情報が足りません。
実際には、
- 初めて登録する
- 日常的に入力する
- 内容を確認する
- 修正を依頼する
- 他者の作業を引き継ぐ
- 誤った操作を取り消す
など、異なる行為があります。
行為が違えば、必要な情報、権限、画面、状態も変わります。
ユースケースを洗い出すとは、あらゆる可能性を列挙することではなく、異なる設計が必要になる行為を区分することです。
単位の整理
設計対象の中にあるものを、何を一つとして扱うか決めます。
家であれば、
- 家
- 部屋
- 壁
- ドア
は、それぞれ異なる単位です。
業務システムであれば、
- 顧客
- 契約
- 注文
- 商品
- 請求
などが考えられます。
単位は、単なる名称ではありません。
一つのものとして、
- 情報を持つ
- 状態が変わる
- 操作される
- 他のものと関係する
対象を切り出すことです。
単位が曖昧だと、異なる性質を持つものを同じものとして扱ったり、同じものを複数の場所で別々に管理したりすることになります。
区分の整理
同じ種類に見えるものの中でも、振る舞いが異なるものを分けます。
例えば利用者であっても、
- 初めて利用する人
- 日常的に利用する人
- 管理する人
では、必要な行為や情報が異なります。
申請であっても、
- 通常申請
- 緊急申請
- 再申請
を同じものとして扱えるとは限りません。
ただし、違いがあるたびに分ければよいわけでもありません。
細かく分けすぎれば、すべてが個別設計になります。
区分の設計とは、異なるルールが必要になる差を見つけることです。
階層の整理
設計対象は、一つの粒度だけでは扱えません。
家の中には部屋があり、部屋は壁や床によって構成されています。
組織の中にはチームがあり、チームの中には役割や個人があります。
設計では、
- 全体
- まとまり
- 個別の要素
を行き来する必要があります。
細部だけを見れば全体の意味を失い、全体だけを見れば具体的な構造を作れません。
どの場面でどの粒度を使うかを定めることも、設計の一部です。
物事の流れを捉える
関係の整理
単位を切り出しただけでは、まだ一つの仕組みにはなりません。
それぞれが、どのような関係にあるかを定義します。
- 所属する
- 所有する
- 参照する
- 共有する
- 依存する
- 順番を持つ
- 代替する
- 排他的である
例えば、「顧客」「注文」「商品」が存在しても、
- 一人の顧客が複数の注文を持てるのか
- 一つの注文に複数の商品を含められるのか
- 顧客が削除されたら注文はどうなるのか
が分からなければ、構造は成立しません。
状態推移の整理
設計対象となる単位が、時間の中でどのような状態を取るかを定めます。
申請であれば、
- 下書き
- 提出済み
- 確認中
- 差し戻し
- 承認済み
などが考えられます。
さらに、
- 何を契機に状態が変わるのか
- 誰が変えられるのか
- どの状態からどの状態へ進めるのか
- 前の状態へ戻れるのか
- 同時に成立できない状態は何か
を決めます。
ステートの設計がないと、現在何が可能なのか、次に何が起きるのかを判断できません。
設計とは、完成した姿だけでなく、時間の中でのあり方を決めることでもあります。
連動性の整理
関係があることと、連動することは同じではありません。
連動性の設計では、
- 何が変わると、何が変わるのか
- 何が成立すると、何が可能になるのか
- 何が失われると、何が成立しなくなるのか
を定めます。
例えば、
- 注文が確定すると在庫が減る
- 承認されると公開できる
- 子タスクがすべて完了すると親タスクが完了する
といったものです。
連動させすぎれば、一か所の変更が全体へ波及します。
連動させなければ、それぞれがバラバラに動きます。
設計では、連動させる場所と独立させる場所の両方を決める必要があります。
順序の整理
個々の行為が分かっていても、それらがどの順序で行われるかが分からなければ、実際の利用は成立しません。
- 最初に何が起きるのか
- 次に誰が何をするのか
- その結果、何が渡されるのか
- どこで処理が終わるのか
を時間順に並べます。
設計を静止した構造としてではなく、最初から最後まで続く出来事として考えるための設計です。
シーケンスを通すことで、途中で必要になる情報、担当者の不在、受け渡しの抜け、行き止まりなどが見つかります。
過剰構築を避ける意思決定をする
イレギュラーの整理
現実には、通常どおり進まないことが必ず起こります。
しかし、考えられるすべての事象を基本設計に含めようとすると、通常の流れそのものが複雑になります。
そこで、
- 原則として通るレギュラーな流れ
- 通常設計の中で扱う条件分岐
- 通常設計から外し、別の判断や処理へ渡すイレギュラー
を分けます。
イレギュラーを無視するのではありません。
基本設計には、イレギュラーが起きたことを検知し、別のルートへ渡す出口を用意します。
これは、基本設計を例外から守るための設計です。
使用期間の整理
創造物を、どれくらいの期間使うものとして設計するのかを定めます。
- 一度だけ使うものなのか
- 一定期間だけ使うものなのか
- 何度も繰り返し使うものなのか
- 長く残し、更新しながら使うものなのか
によって、必要な設計は変わります。
使い捨てるものに、長期運用を前提とした拡張性や保守性を持たせれば、作りすぎになります。
反対に、長く使い続けるものを、その場しのぎの構造で作れば、更新や変更のたびに作り直すことになります。
また、長く使うものであれば、
- 誰が維持するのか
- 何が変わる可能性があるのか
- どの部分を交換できるようにするのか
- いつ役目を終えるのか
も考える必要があります。
すべてを永続的なものとして作るのではなく、必要な寿命に合わせて構築の重さを決めることが大切です。
外部接続の整理
創造物の中ですべてを完結させる必要はありません。
- 他の仕組みから何を受け取るのか
- 他の仕組みへ何を渡すのか
- どの判断を人に任せるのか
- どの処理を既存の道具やサービスへ委ねるのか
- どこから先を自分たちの責任範囲としないのか
を定めます。
他と接続する場所が曖昧だと、同じ情報を重複して持ったり、本来は外部へ任せられる処理まで内側に作ったりすることになります。
一方で、外部へ依存する部分が増えれば、相手の変更や停止による影響も受けます。
外部接続の整理とは、単に連携先を決めることではありません。
何を自分たちで持ち、何を他へ任せ、どこで責任を受け渡すかを決めることです。
設計力とは、「世界を扱える大きさに縮めていく技術」である
これらを一言でまとめるなら、**設計力とは、「世界を扱える大きさに縮めていく技術」である。**と言えると思います。
現実は、そのままでは複雑すぎます。
登場人物も多い。状態も変わる。関係も絡み合う。例外もある。未来もある。
その全体を、一度に理解して一つに落とし込む行為が出来ている人はいません。
だから設計という仕事があります。
それらはすべて、複雑な世界を、人間が扱える大きさまで少しずつ縮めていくための操作。
設計とは、
複雑さを消すことでも、現実を単純化することでもなく、複雑なまま扱える形へ整理し、一つずつ決定できる状態を作ることです。
そして設計ができる人とは、
答えを知っている人ではなく、世界を少しずつ扱える大きさへ縮めながら、一つずつ決めていける人だと考えています。