The failure this exists to catch
An unfilled placeholder does not error. The model receives the literal text {{customer_name}} and does its best, which usually means addressing the customer as "customer_name" or inventing something.
It reaches production because the template renders fine when the variable is present and the missing case only occurs on a branch nobody tested. The unfilled report makes it visible immediately.
Previewing the real prompt
What you write is the template. What the model reads is the filled result, and the two can differ in ways that matter — a variable containing a newline, a quote, or a closing tag changes the structure of the prompt around it.
Filling it here and reading the output is the fastest way to notice that a substituted value has broken your delimiters.
Variables move the token count
The filled prompt is what you pay for, and the variable content is often the largest part of it. A template that measures four hundred tokens empty can be four thousand once a retrieved document is substituted in.
Budget against filled prompts with realistic values, never against the template.