実装する前に満たすべき要件を列挙する
個々の機能を実装する前に毎回行う
「このmoduleの要件はなにか」ぐらいの単位で考えることが多い
アルゴリズム系のものだと「この関数の要件はなにか」の単位で考えることもある
このときに、実装詳細を挙げてしまわないことに注意する
慣れている人だと、要件を書いているときに、同時に実装方法も思いついてしまう
パッと思いついたそれが要件なのか詳細なのかに常に注意を払う
それに対するいくつかの方針を考える
適当に思いついたものを列挙している
満たすべき要件に対するInterfaceを決める
要件がInterfaceに現れる
取りうる操作を列挙して、その型を決める
満たすべき要件に対するテストを書く
要件がテストケースになる
その後、詳細を埋めていく
型エラーを消す、テストをpassさせる
詰まった場合は、方針ごとに問題点をまとめる
何を試して、何を試してなくて、それぞれどういう問題があったか、をすべて記録しておく
その方針を採用しなかった理由も残す