Skip to content
Favas
← All writing

· Engineering · 3 min read

What I got wrong in 2024

By

One lobe per minute of reading. The dot marks the day it was written.

I started 2024 sure about a lot of things. These are the ones that didn't make it to December.

Not the small, forgettable kind of wrong. The kind where you build a whole system around a belief and watch it come apart. Oddly, it's been one of my most useful years.

First, I was wrong that CSS-in-JS is the future. I built a whole design system on styled-components. Theming, variant APIs, interpolated props, the whole kit. It was elegant. It was also a monument to an approach the industry was already walking away from.

Tailwind went from something I dismissed as "inline styles with extra steps" to the default in every new project. What won me over was decision speed: no naming classes, no arguing about abstraction layers. You just build the interface.

The design system still works. Nobody would choose to build it today. Maintaining code that's technically correct and strategically obsolete is its own kind of sad.

When the community moves hard in one direction, it's usually because real friction is being removed, not because people are chasing trends. Resistance tells you something. Stubbornness doesn't.

I was also wrong that testing is optional if you're careful. The logic felt sound. I knew the codebase. I tested by hand before every deploy. I was careful.

Then I lost days to a production bug that only showed up for one odd mix of locale, input and session timing. One integration test would have caught it. Writing that test afterward took minutes.

Tests don't prove your code works. They prove it keeps working when Future You makes a change at 4PM on a Friday that Present You would never have approved.

Third, I was wrong that remote work is just work, at home. The work is the same, I thought. Only the location changes.

Everything else turned out to be the job. The quick glance, the whiteboard sketch, the conversation you overhear that changes how you see the problem: none of it comes with you. You have to rebuild it on purpose, in writing.

A project went sideways because a Slack message I thought was perfectly clear got read three different ways by three different people. All three readings were reasonable. None was what I meant.

In remote work, clarity is infrastructure. Write it down. Assume every message gets read in the worst possible mood. Over-communicate until it feels redundant, then add one more line.

Last, I was wrong that this architecture will scale. I built a neatly layered backend for a client. Dependency injection, repository pattern, textbook separation. With a few hundred users it ran like a watch.

As usage grew, the watch started making noises. The repository layer I was so proud of fired a pile of database queries for every page load. The DI container allocated objects like garbage collection was a rumour.

We simplified, hard. What came out was less pure and a lot faster.

Premature abstraction is premature optimization's cousin. Both solve problems you don't have yet and create ones you didn't see coming.

Every mistake this year had the same root: confidence that got ahead of context. I thought I understood the problem well enough to skip the uncertain part. I didn't.

Here's to 2025, when I'll definitely be wrong again. The goal now is to be wrong about more interesting things.