Lab 08 / archetype three, and the topic you named at the start
New Enquiry is the right place to settle validation, because it carries a problem most forms do not have. It can be saved twice, at two different standards. A draft needs a customer and a title. A real enquiry needs a customer, a title, a source, a destination, at least one adult, an agent, no blacklist, and a billing address on the account.
So the form cannot simply be valid or invalid. It has to say, at every moment, which of the two things you can do right now and exactly what is standing between you and the other one. Everything else in the validation contract falls out of getting that right.
The disabled button never explains itself in a tooltip. The reason sits permanently beside it, in words, naming every outstanding condition rather than only the first, because a person who fixes one thing and finds the button still dead learns to distrust the form. The seven segment bar is the same idea in a glance: five solid, two open, and the two open ones are named in the sentence next to it.
02 / the field, in every state it has
Every input on the platform is built from this. The border carries the state, the message carries the reason, and the label never moves.
Placeholder is an instruction, never an example value that could be mistaken for content.
The ours blue, the same hue that marks the active nav item. Focus is always something you are doing.
Dates, money and quantities are mono the moment they are entered, so a filled field looks like data.
Names what is wrong and what to do, with the value it needs. Never "invalid date".
The platform's opinion, stated and then dropped. It never blocks and it never asks twice.
A dead control always says who decided. A disabled field with no explanation is a support ticket.
Different from disabled. Disabled means not yours to set. Locked means it was yours, once, and the moment has passed.
Computed from other fields, never typed, and shown so nobody goes looking for where to enter it.
The hardest state. It stops everything downstream, so it is stated at the field where the choice was made and again at the gate.
03 / the contract
Ruled 20 August: one button, not two. The risk with a button that changes its own meaning is that a person presses Save without noticing which save they got. The counter answers that before the press rather than after it: five of seven, and the two outstanding conditions named in the sentence beside it. The button label and the counter always agree, and if they ever could not, the counter is the one that is right.
There is no success state on a field. A green tick beside a correctly filled input is decoration: the person can see what they typed, and marking sixteen fields as correct to draw attention to two that are not is a worse way of saying the same thing than the counter at the foot of the form.
Decisions on this lab