mysu.
Notes from the build

What we learned.
What we changed.

Every one of these cost us something on a real project. Each is paired with the practice it produced, because a lesson nobody acts on is just a story.

01
Engineering

A minifier moved one line and took production down for four days

What happened

Object shorthand inside a call the bundler chose to inline survived relocation un-expanded. The deployed bundle then referenced a variable that no longer existed. It failed only in the production build, and only on the email path — so every local test passed and the error looked like a bad deploy.

What changed

We now reproduce in a production build before calling anything fixed, and grep the compiled chunks for the pattern rather than trusting the source. At known-risky call sites we write arguments out in full instead of using shorthand.

Read the note →
02
Data

Most dashboards are confidently wrong

What happened

User metrics are not additive, category buckets are rarely exhaustive, and almost nobody reconciles the figure against the provider’s own interface. The number a business quotes in meetings is usually the one nobody has checked.

What changed

Every metric we ship is reconciled against the source platform before launch, and buckets are made exhaustive by construction so totals cannot silently drift. If a figure cannot be traced back to a source, it does not go on the dashboard.

Read the note →
03
Practice

Build for the person who does not like software

What happened

The ledger’s users are two directors in a construction business, not operators. The first instinct on any interface is to add a delete button; the first instinct of a nervous user is to avoid touching anything at all in case it breaks.

What changed

Destructive actions became voids, never deletes — the record keeps the mistake and the reason for it. Every schema now starts with the recovery path rather than the happy path, and we design for the error a real person will make rather than the demo.

Read the note →
04
Design

Motion is a timing problem before it is a styling problem

What happened

A hand-drawn look was chased through shading and colour for days without success. It was never a shading problem: a physics simulation cannot hold a frame, and smooth 60fps interpolation reads as computer-generated no matter how it is painted.

What changed

Motion is now specified as frame rate and hold — how many drawings, held how long — before anything is drawn. Easing curves and colour come afterwards, and only if the timing already reads correctly.

Read the note →