Q4 2023

Strategy

Red Oceans, Product Engineering, and Year-End Reckoning

I was wrong about burnout. It wasn't stress that broke me during my big tech career -- it was boredom. The softness, the exercise of restraint as a senior leader, the weak language, the fake morality, the lack of fight. When I reflect on my career, I was most happy when I had competition. So in October I made a 180-degree shift: from the vast blue ocean where I was alone with my craft, into the constrained red oceans full of blood.

The u-turn meant accepting that some of my ideals about a burn-out-free organization weren't applicable for head-to-head competition. Work-life balance for junior engineers should tilt toward work and skill development -- balance is achieved over a lifetime if your finances are disciplined. Do difficult shit, risk burnout, push yourself. Fail to do this, and die with regret.

In November, I wrote the post that defined my competitive stance. Take a look at the Cloud Native Landscape, and realize we have collectively made software harder at greater cost. Every single box in that landscape exists for a good reason -- I can read each one and see how it fits. But at core, there are too many decisions to make when trying to stick anything together. Each decision has related decisions until you need a maps interface to navigate your own product.

Adama is a competitor not to any specific box but to the entire landscape. I went through each category: databases (Adama mixes NoSQL architecture with integrated typed queries), streaming and messaging (reactivity is built-in from the get-go, back-pressure compacts updates rather than dropping them), application definition (two files -- an RxHTML forest and an Adama specification -- can build entire web products), CI/CD (a single script pushes to production), service discovery (actors have names, so it's free), security (people are first-class citizens at the language level with privacy built in), and observability (determinism means I can take an actor from production, plop it in my devbox, and poke it).

Maybe learn plumbing because dealing with literal shit is better than this. I'm 100% serious -- I had my main line back up and a basement full of sewage, and cleaning that up was at least satisfying at the end.

December brought the fractional-CTO-as-a-service reality. I was helping clients build products while trying to innovate on the platform simultaneously, and doing both at once is exceptionally hard. So I took off the innovator hat and focused on the product engineering playbook. The Great Product Cycle: Idea, Product Design, UX Design, HTML/CSS, Frontend Behavior, Backend Read/Write, User Testing, Feedback. Each stage has increasing cost and decreasing freedom. The hardest traversal is the first time because back-pressure prevents getting to any 1.0. You have to make cuts.

The hiring thoughts evolved again. There's a split in my personality between the "code grandpa" who loves coding for its own sake and the competitive warlord who wants to win. The responsible decision was to embrace the warlord to fund the engineering growth. For young engineers, I planned an extremely hard whiteboard process because the whiteboard is fundamentally just an IQ and stress test, and when uncertainty is high, that's what you need. For old war dogs, I wanted finite contracts and the freedom to deliver a body of work, train the staff, and head to the beach for three months.

The "Don't be a React Developer" post captured my frustration reviewing resumes. The mixture of hope and sheer volume of inexperience was overwhelming. My advice: master the browser, not some framework. The browser is the true medium, and everything else is junk in the way. If you want a stable career in frontend, learn the foundational layer that's going to be stable for decades rather than the npm flavor of the month. Going your own way is the most rewarding path. It's also the hardest.

The year-end work log was a monument to what a solo operator can accomplish with discipline. Over 1,000 commits. Connection pooling. Asset caching. Date/time stdlib. Switch statements. Lambda closures. Domain support. Service integrations with Amazon SES, Stripe, Google SSO. The devbox with hot reload, reactive debugger, and language server protocol. Multi-region architecture taking shape. Push notifications. Cron jobs. Bytecode caching on S3 so deployments aren't outages. The search operator. The table event system ("Super Awesome Mode") that reduced reactive compute by over 50%. Mobile support via Capacitor. 6,219 unit tests and 1,027 dashboard metrics.

March had zero commits because I was in an RV at the Grand Canyon. August had 251. That's the rhythm.

Only time will tell if my idea manifests in something or I'm just yet another Don Quixote tilting at windmills. The important thing, in life, is that at the end I can say I tried.