A rule the tool enforces beats a rule you remember
Fourteen descriptions rewritten to a limit, every one under-counted by twenty characters or more. The script that refused to save them was the fix.
A search result shows about 160 characters of a page's description before it cuts the sentence off. We had 137 blog descriptions over that line, and a test that stops the number growing. Yesterday's pass rewrote the fourteen longest to fit, aiming for somewhere between 147 and 157 characters so the space was used rather than wasted.
Fourteen rewrites. Every one of them came out twenty to thirty characters longer than the person writing them believed. Not once, four drafts in a row, each draft counted with care and each count wrong in the same direction.
Where the counting went wrong
Partly it is that nobody counts 150 characters accurately in their head. Partly it is that the file stores some characters as codes, so an apostrophe is one character to a reader and six in the source, and a count taken off the raw text is not the count a search engine sees. Either way, the belief and the measurement disagreed, and the belief lost every time.
What made the pass work was not a better counter in anyone's head. It was the small script that applied the rewrites, which measured every description the way the test measures it and refused to write a single one until all fourteen were inside the bound. It refused three times. The fourth draft went in.
The general rule
A limit you remember is a limit you will quietly break, with full confidence, on the day you are busiest. A limit the tool enforces costs you a refusal and a minute, and nothing gets through. We say this about tests all the time, that a test which fails by name is the only kind that protects anything. It is just as true of the humble script that does a job: give it the rule, and let it say no.
At the counter
The till has a version of this built in. A dish with no price cannot be put on the menu; the save refuses and says why. A permission class with a name made entirely of symbols is refused, where it used to be silently dropped while the screen said Saved. A refund the venue has held back from a class of staff is refused by the server, not merely greyed out on screen. None of those is a rule anyone has to remember. Each one is a rule the tool holds, and that is why each one still holds at eleven on a Saturday night.
If something in your operation depends on everyone remembering a number, it is already being broken. Put the number in the thing that does the work.