DEV Community

Edmunds Puce
Edmunds Puce

Posted on Originally published at epuce.info on

Eight Years of Getting It Wrong (and Why I'd Do It Again)

This site's Git history dates back to April 2018. Three stacks, a few long silences, and some commit messages I'd rather you didn't see. I'm going to show them anyway because the mistakes turned out to matter most.

It started as a Jekyll static site on GitHub Pages. In 2019 I rewrote it in PHP and moved it to my own server. This year it became what it is today: a Vue 3 + TypeScript SPA with a PHP API behind it. Same domain, same person, completely different codebase. The difference is obvious at a glance:

The site in 2018, a plain white Jekyll page, next to today's dark single-page app

Exhibit A: "please work v5"

On December 2, 2022, I tried to fix image lazy loading for cached images. The commit log for that single day reads: fix lazy loadingplease workplease work v2v3v4please work v5. Seven commits, one bug, zero dignity.

Terminal output of git log showing eight commits from a single day, ending in please work v5

The bug wasn't the problem. The problem was that my only way to test the fix was to deploy it. Two days later, the log shows the actual lesson: "improve deploy: have a rollback option if build fails." Not a smarter fix, but a better feedback loop. That's the pattern I keep relearning: when you catch yourself praying in a commit message, the thing to fix is rarely the code. It's the loop around the code.

Exhibit B: the mistake I made five times

The production runtime is pinned to a specific language version. My local toolchain isn't, so it happily accepts syntax that the pin doesn't allow. I have known about that gap since 2019. And yet, this spring the history shows me walking straight into it five separate times, each one breaking production, each one followed by a commit whose entire message is a variation on the same apology: revert that, use the supported form instead, fix the entity to match the server.

After the fifth time, I finally stopped trusting my memory: I wrote the constraint into the project docs and pointed static analysis at it, so the build fails before the server can. I haven't made that mistake since, not because I got smarter, but because I made it impossible.

The same shift shows up throughout the recent history. In 2019, I committed "hope that chrome audit is all green :D". This year, the site runs automated accessibility tests on every change and even has a live audit built into the examples page:

Terminal showing the 2019 commit: hope that chrome audit is all green :D The live accessibility audit on the examples page today, listing passed checks and violations from a real run

The point

Nothing in this repo is impressive on its own. What I like about it is that every ugly commit is still there, and each one bought something: a rollback button, a static analysis rule, a test suite, a habit. If your Git history looks embarrassing, good: it means the lessons were real. Just make sure each mistake leaves a guardrail behind so you get to make new ones next time.

Top comments (0)