システム雑感

 システムを作る仕事をしていて良いシステムを作るために段々分かってきたことは、「何が前提となっているか」「何を目的としているか」をどこまで明確にするか、ということに尽きるな、と。関数一個からシステム全体に対してもそうだけど。要求されている仕様がどのような前提で成り立ってるか、どのような目的で成り立ってるか、ということを見失うとシステムの瑣末なことにとらわれてアンバランスなミーティングになっていまったり。また関数だと分かりやすいけど、引数が前提、returnするものが目的として、前提としてるデータが何で(nullを許容するか、とか例外を投げるか、とか)、returnで何を返すように作ったか、ということを曖昧にしておくとバグ含みのものになりやすい。まあもちろん他の要素もありますが。
 よくあるのがDBに入っているデータを前提としすぎてしまったためにバグになったもので、たとえばマスタに3種の区分値が入っていたとして配列の要素を3つとして作ってしまうとバグになるよね。DBの構成は前提としていいけど、DBのデータは前提としちゃダメっていう。でもデータを前提としなければならないこともあって、その場合は下手に増えても許容するよりも例外を投げてデータの不具合が起こっていることを知らせた方が良かったり。そういうのってセンスのいい人は敏感に感じ取って作っちゃえるけど曖昧にしたままでも一応動くものはできちゃうからかなり微妙な問題だったりして。そういうことっていちいち明文化するのは面倒だから、ある程度開発チーム感で共有できるようにしていかないといけないけど、あんまりそこまで話さないな、と。
 っていうことで結論はないですがもうちょっと掘り下げたい話です。