Open drawer · no victory-lap editing

Files that did not work.

Most project pages show the polished outcome. This archive keeps the failed assumption, the warning signs, the cost, the correction, and the rule worth carrying forward.

Archive rule 01

Write the belief first.

A postmortem is weak when it begins with the answer. Record what looked reasonable before hindsight cleaned it up.

Archive rule 02

Name the actual cost.

Time, lost submissions, customer confusion, deployment delay, rework, and attention all count—even when no invoice exists.

Archive rule 03

End with a reusable rule.

The value is not embarrassment. The value is a better default the next time a similar decision appears.

Failure file 001 · static forms

The form looked complete. The server disagreed.

The belief

The contact and newsletter forms used Netlify form attributes, so the markup looked production-ready. The site later moved to a plain nginx host, but the form implementation stayed the same.

What happened

Netlify processes those attributes only when the site is deployed through Netlify’s form infrastructure. On plain nginx, a POST to a static HTML file has no handler. The result is a failed request rather than a delivered message.

A form is not a form because it has fields. It is a form when the submission path has been tested end to end.

The warning sign

The interface could be filled out normally, which made visual review misleading. The only useful test was submitting it on the live host and verifying receipt.

The fix

Use a real server endpoint, a form service, or a structured email workflow. Then verify validation, spam protection, delivery, error handling, and the confirmation state.

Operating rule: Never mark a conversion path complete until the live environment produces the expected downstream record or notification.
Failure file 002 · deployment caching

The deploy worked. The browser kept showing the old site.

The belief

Long caching is generally good for performance, so a seven-day public cache policy was applied broadly.

What happened

HTML was cached for up to 604,800 seconds. Returning visitors could continue seeing an old page for a week without asking the server whether it had changed. Correct deployments looked broken, and troubleshooting focused on the deployment pipeline instead of the browser cache.

The warning sign

A hard refresh showed new content while a normal revisit did not. Different devices also showed different versions of the same URL.

The fix

Let versioned assets such as fonts and images cache for a long time. Make HTML revalidate on each visit using ETags or Last-Modified so unchanged pages still return cheaply while updates appear quickly.

Operating rule: Cache immutable assets aggressively. Cache the document that points to those assets cautiously.
Failure file 003 · measurement

A project can stay “interesting” long after it stops being useful.

The belief

Shipping a prototype would naturally reveal whether the idea deserved more investment.

What happens instead

A prototype often creates compliments, curiosity, and feature requests without producing a decision. Without a defined user, action, threshold, or deadline, “keep experimenting” becomes the default.

The correction

Every public experiment should state what evidence would advance it, pause it, or kill it. Examples include completed scenarios, qualified submissions, repeat visits, stakeholder meetings, or a specific operating improvement.

Operating rule: Before building the experiment, write the decision the evidence is supposed to support.
Submit a future file

Failure is more useful with context.

Send the original assumption, the first warning sign, the real cost, and what changed. Strong submissions may become an anonymized public teardown.