「こういう機能作りたいんですけど」みたいな会話をするとき、理解した内容で手元のノートにER図を描いていたらコーナーケースの仕様漏れを発見できたりして有用だった。
このあいだ新機能の話をプランナたちとしていて、普段だったらフムフムと一通り聞いた後で質問していくという流れなのだが、でっかい機能だと質問する頃には忘れているという問題があった。そこで話を聞きつつ手元のノートにER図を描き、この概念がこの概念と1..*
でつながっていて・・・という事を組み立てながら会話した。1ユーザにn個の概念がくっついていて・・・という具合である。
すると、ER図を眺めていたら、時系列的にこういう順序で操作したときどうなるか分かりませんね、というコーナーケースの指摘ができて助かった。こういうときはテーブル分けてみませんか、という提案もできた。
ER図はなにかと役立つ道具で、整合性を保ったままいくつかの概念が登場するというときに、矛盾しないようにうまく概念を分離できる。描くのも難しくないので、手元にすぐ描けるようにしておくと便利。ノートは電気が無くても動くのでお得。
難しいコーナーケースは不可逆性・時間性・順序性といった性質とともに現われがちで、例えば通知は不可逆なので、後から状態が変化してもユーザからは通知した情報が見えるようになっている必要があるとか、非同期に処理されるので時間の前後関係を保証できない、といった具合で立ち現われる。こうした難しさは状態を隔離することである程度御すことができて、前述の例で言えば、通知を行ったらそれ用のデータをテーブルとして隔離すると、状態の変化に対する防波堤としてふるまう。その代わり、ある程度の整合性を諦めなければならない。これは難しくなるな、という予兆を察知できると、すばやくノートを取り出しておけるようになる。