This month I celebrate 10 years as a software engineer. And while I believe there's valuable experiences to be shared, I don't want to bore you with yet another "10 lessons learned" post. Instead, I tried distilling five fuck ups into zen koans, following my career as a software developer.
Architecture
A monastery of engineers spent years perfecting their architectural scripture: Every service an interface, every dependency injected.
One day, a monk finished a new chapter: an interface full of constants, implemented by every class. He went to the head monk and exclaimed "I have solved the problem of global variables!"
"What problem?" the head monk replied.
The monastery understood.
In my first projects, we worked in PHP + Symfony with very strict architectural expectations: Everything was an interface, or service implementing those interfaces. It was clean and gave us a shared language, but somewhere along the way the architecture became the point instead of the tool.
Winning Mistake
A monk competed to build the lightest sword. He succeeded.
Years later, fighting a real opponent, the sword shattered on first contact.
The master said: "Built to win, it's a prize. Built to use, it's a weapon."
We won a project by building a proof of concept that processed data at incredible speed. But we'd optimized only the data processing engine, stripping away anything that didn't serve raw throughput. After building out the rest of the product (API, app, etc.) and going live, users complained that it was slow.
Joscode
A scribe struggled to capture the oracle's visions.
So he taught the oracle to write.
The writing was harder to decipher than the visions.
We built a domain language so our product experts could write algorithms directly, since much was being lost in translation. We ended up spending all of our time maintaining the language and fixing the code it produced. In the end, we hired people who understood the domain and vowed to never speak of "Joscode" again.
Serverless
A village paid a ferryman per crossing. Building a bridge seemed too costly.
Years later, they counted what they'd paid.
They had bought three bridges.
We had to save cost on our ECS-hosted REST API, and since we often felt limited by the Django framework we threw it out as well. We spent months rewriting everything without a framework and ran it serverless. Years later, with more live customers and a growing engineering team, this cost us far more than our previous setup in both hosting and engineering effort, so we migrated back.
Rest
A monk proudly counted five lessons learned.
After ten years, they realized the fifth was
that four would have been enough.
I learned the first four lessons by working hard and seeking perfection. This fifth lesson taught itself when my body stopped cooperating. Sleepless nights, hyperventilation, even a panic attack at the office. I had to remind myself that I chose this career because I love building, problem solving, and learning. The moment this love starts fading is the moment I need to take a step back.
Five important lessons in ten years. Hopefully I've learned enough to make better mistakes the coming decade.