最近の仕事で試してみているのが、タスクを実行可能なレベルに分解するときに、事前条件と事後条件とをヘッダとフッタのようにして、それで1つのタスクという形に分解する、というもの。
例えば「味噌汁作る」タスクを分解したいときは突然「豆腐を鍋に入れる」みたいにせずに、こうする:
- 事前条件
- 豆腐を入れたいはず
- 豆腐を入れたいなら、豆腐は適切な大きさに切られているはず
- 鍋にはすでに味噌汁が入っているはず
- 豆腐に鍋を入れる
- 事後条件
- 豆腐が温まりきるのを待てば、豆腐入り味噌汁が数分で完成するはず
と言う感じに分解され、自動的に「そもそも豆腐入れたいんだっけ」「豆腐切る処理ってちゃんと工数に入れてたっけ」「豆腐を切る大きさをディレクターに聞いておかなくても良いのかな、仕様で決まってたっけ」といったことを考えることができる。
ついでにこれ自体がテストケースになるので、事前条件を用意してモジュールを呼び、事後条件になることを確認すれば簡易的なテストになる。
あまりに自明なタスクであれば分解の必要性はないのだけれど、仕事でこなすタスクの数多くは実行までに分解を要求する。タスク遂行のミスはその大多数が暗黙の前提を見落とすところから生じるはず。そもそもやらなくてよかったとか、違うものを作ってしまったとかは、前述の方法で回避できそう。
これまでは、分解するといったらなんとなく勘で「あれやる」「これもやらないと」「これもやったほうが良い?」みたいな感じで一貫性がなく、粒度もバラバラだった。しかも達成できる保証は無いし、見積もりも困難。うまく分解できるようになりたい。
さらに不変条件みたいな話を追加することもできて、「このタスクはデザイナの作業に干渉しない」みたいな要素を考えられると平行作業が楽になるかもしれない。
タスクを分解する方法論について書いたけれど、まだ試行錯誤しているので、良いアイデアがあったら知りたい状態。