仕様に対する振る舞い
SHARES
この記事はnote.comからの転載です。
https://note.com/yamarkz/n/ned663dab1a27
仕様を決めるのは難しい。最近は特に苦しんでいる。
これは技術不足なのか、経験不足なのか、はたまた人としての限界なのか、正直わからない。
苦しんだ中で "なんとなくこうしていく必要がある" という定石的なものが見えてきた気がするので、その心を忘れないように言葉にしておく。
仕様を決めることは考慮することと同義である。 仕様が漏れていることは考慮できていないということだ。
考慮の幅は知識と観点によって決まる。
考慮 = 知識 × 観点
知識がなければ気づけないし、観点がなければ考えることができない。
観点は専門領域で技術を磨くと身につくが、知識は都度キャッチアップしなければいけない。これは料理に例えると、観点は調理法で知識は食材だ。
問題解決において、知識は問題領域に最も詳しい人から仕入れることが定石とされている。それは一般的にドメインエキスパートと呼ばれる人たち。
エキスパートに対してヒアリング (引き出し) とディスカッション (論点整理) を行うことで、ドキュメント (共有知) を作っていく。 これを個人的に ドメインの深掘り と呼んでいる。
深掘りのサイクルを何度も回して知識を蓄えていく。 仕様の絵が見えてくるまで何度も知識を取りに行く。
最も詳しいからといって"正確に全てを把握しているわけではない"という点で注意が必要である。ドメインのエキスパートであってプロではない。
ドメインの深掘りは未知との戦いである。 いかにして未知を既知に変えていくか。
4象限で最も厄介なのは、エキスパートと実装者が共に未知な事象。
これは深掘りのサイクルを回せばある程度はなくすことができるが、0にはできない。なお、未知の量は前提条件や状況によって異なる。
未知 × 未知の減らし方は 未知 × 既知 と 既知 × 未知 を減らすこと。 2つを減らすことで相関して減らすことができる。これは片方の未知を減らす過程で生まれる気づきが、未知を既知に変える場合があるからだ。 (知を使いすぎてのゲシュタルト崩壊)
片方が気づければヒアリング、ディスカッション、ドキュメンテーションの深掘りサイクルに乗せることができる。
では、この4象限でもっとも重要なポイントはどこか。
答えは、未知 × 既知。 なぜなら、未知を既知に変える主導権が実装者側にあるからだ。
未知 × 既知なことは主に実装観点での "ドメインの扱い方" だ。
エキスパートはドメインを知っているが扱い方までは認識していない。 正確には暗黙的にしか認識できていない場合がほとんどだ。
実装者はドメインをいかにして扱うか(捌くか)を決める存在であるため、扱いの観点でどう着地させるのがベターなのかを考え抜く責任がある。
ドメインの扱い方をヒアリングする過程で、必要だったものに気づく可能性がある。「実はこういう扱いがしたかった」「これは外せない要件で、ないと困る」といったケースだ。
この気づきこそが、暗黙的な認識をなくすことであり、未知 × 未知 を 既知 × 未知に変えるものだ。
引き出しの過程で未知に気づき、未知を共有さえすれば、あとは論点を整理して共有知を作るだけだ。
これをドメインの深掘りサイクルと状態遷移 という整理にしている。
仕様を決める際に考慮する3つの観点。
- 抽象化 2. 断片化 3. 捨てる
その仕様は抽象化する価値があるのか。 その仕様は断片化で留まる価値なのか。 その仕様は容易に捨てられるものなのか。
3つのキーワードで説明できる状態にすると良いのかもしれない。
「その仕様は抽象化の価値がありそうだが、将来的に抽象化を目指すタイミングで容易に捨てられるような、断片的な仕様にしておく」
「その仕様は容易に捨てられないコアなものなので、断片化せずに初めから抽象的な仕様にする。やむおえない断片仕様は捨てる」
「その仕様は抽象化する価値が乏しいものだが、外せないものでもあるので断片化させながら将来的に容易に捨てられるように作る」
端的にどういう方向性で進めるのかを表せるようになる。
全く取り留めもない文になったが、書く中で少しは整理できた気がする。
仕様との向き合い方を未知との戦いという切り口で書いてみた。
まだまだ考慮が足りてない毎日だ。
公開後追記。
尊敬する師からこんなコメントをもらった。
「エスパー力」という表現で解釈していたらしい。 これもまた的を得た表現だと思う。
そして、4象限で思考整理することを教えてもらったのが師だったことも、コメントをもらった後に思い出した。
昔仕事帰りの電車の中で、「どうやったらあんな綺麗に思考整理ができるのか」を必死で聞いていた思い出がある。
あの時に比べたら自分も多少はまともになった。