「ないときは×××とする」と仕様書に書くべからず
前回、書いた話ですけれど、気を付けると効果が高いのに、案外とミスる人が多いので、もう一度詳しく。
悲しいことに、わたしがメンテしているシステムで、顧客マスタの請求先、売上トランの請求先に空白があるシステムがあります(まぁ、全部トリガーで埋めるように直したのですが)。
本当にひどい話で、見るたびに血圧が上がります。
これらの設計をしたときに確かにユーザー側は、「空白のときは」とか、「未入力のときは」とかいっています。しかし、ユーザーは空白であって欲しいといったのではなく、「2回入力したくない」ということをユーザーの言葉で説明したに過ぎないのです。
ですから、プロとして普通に言い換えないといけない。
リプレイスがあれば、そのタイミングで直すべきなのですが、プロジェクトの共通に「請求先を参照するとき、未入力なら……」とか書いてたりすることもある。該当のプロジェクトで当たり前になりすぎていて修正項目から漏れていたりしますから、当たり前にならないように、本当に気をつける必要があります。
「ないときは×××とする」とあちこちに書くのは、その前の工程の仕様にミスがあります。前工程の未入力を許すミスは、複利で効くサラ金で借りたようなもので、何カ所かあるとプロジェクト全体ではとんでもないことになります。
そして、もっとプロジェクトに影響を与えるのがフローを飛ばすパターン、つまり「受注のない売上があるのです!」ってユーザーの言葉を鵜呑みにしたパターンです。ユーザーは「売上をいきなり入力したい」と言っているだけなのに。受注データを作らない構造にすると、受注データが関連する処理全体に悪影響が起きます。
フローを飛ばすパターンでのミスは、トイチの闇金で借りたぐらいプロジェクトに多大な影響を与えます。
では、表題が「フローを飛ばすな」ではなく、なぜ「ないときは×××とする」なのかというと、例えば物流の仕組みで「直送」という処理が出てきます。
「直送」は「入庫、出庫処理が同時に起こる」と考えることも可能です。つまり、入庫を飛ばした出庫なわけですが、直送という機能を見て、フローが飛んだと考えるべきなのかは「ないときは×××とする」と考えるよりはるかにハードルが高く、「直送」を登録する機能だけでは判断はつきません。
つまり、「入庫データがないときは、直送データを表示する」というような処理が起きるか、その後の機能を見通してから決める。そのような処理が存在するならイレギュラーを避けるために、直送の処理の時点で入出庫データを自動作成すべきです。
直送が8割なんてこともありますが、業務処理として在庫を持つ方がイレギュラーであっても、データ量ではなく処理工程、機能がイレギュラーかどうか判断する必要があるわけです。
直送のとき入出庫データを作るというのは、倉庫から見たときデータが実態を表さなくなると言われそうですが、倉庫マスタに「直送(倉庫)」という仮の倉庫をつくり、その倉庫で入出庫データを作るようにすればよい訳です。そうすれば、倉庫のIDによって直送データかどうかすぐに判別できますので、問題になることはありません。
設計をする上で、POAだろうが、DOAだろうが、OOAだろうが、どうでも良いのですけれど、いずれの方式で設計をしたとしても、わたしは「直送 = 入出庫が同時に起きる」と言い換えれらるかどうかが、非常に重要なスキルと考えています。
まぁ、OOAならUI関連とデータ関連が別のモデル図にできるので表現しやすいですが、どの方式でも、言い換えなくても最後まで構築が可能でから、気づかない人はぜんぜん気づきません。指摘したら「客がいった!」とか「俺は今までこうしてやってきた!」とか、ケンカになったりね……。
ともかく、そういう視線でも顧客の話を聞く癖がつけば、直送の機能について打ち合わせしているときには、その後ろの処理を考えて入出庫データを起こすか、起こさないか判断できるようになります。しかし、慣れるまでは「ないときは×××とする」と書くときに、前の処理を修正する、つまり手戻りをする勇気を持ちましょう。
もっとも、わたしも途中から入ったプロジェクトでは怖くて戻れず、ブチブチ文句いっているときもあります。しかし、終わってから見返せば、気づいた瞬間にケンカ(すごいことになるから避けたいのですけど……)しても直した方がトータル工数は抑えられた、と反省することがほとんどです。
保守まで考えれば100%後戻りした方が、コストが抑えられます。
◇ ◇ ◇ ◇
自分としては「直送=入出庫が同時に起きる」という言い換えなどを無意識にやってたことなので、最近まで言語化できず、「上流がヘボい!」とかいって、ただただイライラしていた内容です。
これは、大そうなことではなく、無意識にできている人も大勢いて、そういう人とプロジェクトを組んでると打ち合わせが非常に進みます。ほとんど打ち合わせがいらないぐらいです。お互いあえて確認しあわなくても次にいけるから、そういう環境に慣れると無意識を言語化できなくなるわけです。
わたしも誰かに教えてもらったものでもないので、その次に違う文化の人とプロジェクトを組んだときにぶつかってしまう。
設計でイライラすることは他にもたくさんあるんだけど、自分では無意識にやってるので、なかなか言語化できないのね……。あぁ、歯痒い。