Writing

Things I figured out the hard way

Mostly about things I have just finished debugging.

93 articles

The 10x engineer

career ·

The 10x engineer

AI made all of us faster, so speed alone no longer tells one engineer from another. The engineers who get ten times more out of it knew more to begin with: they mastered their own craft, then learned enough of the professions around it to do that work as well.

The agent prefers the monolith

ai ·

The agent prefers the monolith
The three pillars of the modern software product engineer

career ·

The three pillars of the modern software product engineer
We left Heroku during the World Cup final

migration ·

We left Heroku during the World Cup final
The lock keeps the hours

access control ·

The lock keeps the hours
Unknown is not a decline

payments ·

Unknown is not a decline
Opus is back

ai ·

Opus is back
An identity provider in an afternoon

ai ·

An identity provider in an afternoon
The check-in app is one web page and two wrappers

mobile ·

The check-in app is one web page and two wrappers
A year with Codex, a week with Astra

ai ·

A year with Codex, a week with Astra
Onboarding took two days. Now it takes two hours.

ai ·

Onboarding took two days. Now it takes two hours.
A door on someone else's network

on-premise ·

A door on someone else's network
$58 a month to keep one container awake

cost ·

$58 a month to keep one container awake
Ready is not alive

cloud run ·

Ready is not alive
Nobody has a service-account key

ci/cd ·

Nobody has a service-account key
The CSV importer that proposes and never executes

ai ·

The CSV importer that proposes and never executes
The landing pages belong to the designer now

astro ·

The landing pages belong to the designer now
The RAG client was stealing my connections

postgresql ·

The RAG client was stealing my connections
The project quota that killed Shared VPC

google cloud ·

The project quota that killed Shared VPC
Five assistants, one loop

ai ·

Five assistants, one loop
A harness for the model after this one

ai ·

A harness for the model after this one
The front-end choice is made, and it is not my favourite

react ·

The front-end choice is made, and it is not my favourite
Express 5, Fastify 5, and the adapter I did not swap

nestjs ·

Express 5, Fastify 5, and the adapter I did not swap
AGENTS.md, or writing for a reader that forgets

ai ·

AGENTS.md, or writing for a reader that forgets
They ported tsc to Go

typescript ·

They ported tsc to Go
Redis is open source again, and I have stopped keeping score

redis ·

Redis is open source again, and I have stopped keeping score
The block images are generated now

ai ·

The block images are generated now
A tool call is just a schema

ai ·

A tool call is just a schema
ZooKeeper is gone

kafka ·

ZooKeeper is gone
A batch of ten, a flush timer, and the event that did not fit

sdk ·

A batch of ten, a flush timer, and the event that did not fit
One topic, three regions, and the policy that took the longest

messaging ·

One topic, three regions, and the policy that took the longest
Aurora DSQL, and the clock doing the hard part

databases ·

Aurora DSQL, and the clock doing the hard part
A week of alternatives, and the migration I did not make

redis ·

A week of alternatives, and the migration I did not make
NestJS over plain Express

nestjs ·

NestJS over plain Express
The tunnel that starts on our side

analytics pipeline ·

The tunnel that starts on our side
Two years later, MERGE grew the clauses I wanted

postgresql ·

Two years later, MERGE grew the clauses I wanted
Elasticsearch came back

elasticsearch ·

Elasticsearch came back
The filter you can see is not the one that matters

embedded analytics ·

The filter you can see is not the one that matters
Redis changed its licence, and the fork was already warm

redis ·

Redis changed its licence, and the fork was already warm
Auto-merging a pull request nobody wrote

ci/cd ·

Auto-merging a pull request nobody wrote
Proton opens the pull request. You own everything after it.

aws proton ·

Proton opens the pull request. You own everything after it.
Promoting a dashboard is a string replacement

lookml ·

Promoting a dashboard is a string replacement
Valkey exists now

redis ·

Valkey exists now
One week with Solid

solid ·

One week with Solid
The button in Port and the service it makes

platform engineering ·

The button in Port and the service it makes
One week with Svelte

svelte ·

One week with Svelte
Go changed a loop, and nothing broke

go ·

Go changed a loop, and nothing broke
The fork shipped

opentofu ·

The fork shipped
.NET 8, Native AOT, and what a container actually costs

c# / .net ·

.NET 8, Native AOT, and what a container actually costs
The snapshot restore was the easy half

automation ·

The snapshot restore was the easy half
BullMQ, and the Mongo queue I did not use

queues ·

BullMQ, and the Mongo queue I did not use
The cutover was a connection string

migration ·

The cutover was a connection string
The licence changed under the state file

terraform ·

The licence changed under the state file
The bridge release arrived

kafka ·

The bridge release arrived
One week with Vue

vue ·

One week with Vue
The import block, and the resources nobody wrote down

terraform ·

The import block, and the resources nobody wrote down
The App Router went stable. My site did not move.

next.js ·

The App Router went stable. My site did not move.
A weekend with Rust, and the index that stopped cloning

rust ·

A weekend with Rust, and the index that stopped cloning
TypeScript 5.0 and the decorators that are finally the real ones

typescript ·

TypeScript 5.0 and the decorators that are finally the real ones
Errors are values. Go 1.20 made them a list.

go ·

Errors are values. Go 1.20 made them a list.
EventBridge Pipes, and the Lambda I deleted

eventbridge ·

EventBridge Pipes, and the Lambda I deleted
Kafka without ZooKeeper, for new clusters only

kafka ·

Kafka without ZooKeeper, for new clusters only
.NET 7, and the string literal I stopped escaping

c# / .net ·

.NET 7, and the string literal I stopped escaping
MERGE is not the upsert you already had

postgresql ·

MERGE is not the upsert you already had
Self-hosted runners, one deployment per product

self-hosted runners ·

Self-hosted runners, one deployment per product
MongoDB 6.0, and the change stream that can show you the before

mongodb ·

MongoDB 6.0, and the change stream that can show you the before
Node 18 shipped fetch and a test runner. I kept one.

node.js ·

Node 18 shipped fetch and a test runner. I kept one.
Terraform learned to say what it assumed

terraform ·

Terraform learned to say what it assumed
The dockershim went away and my images did not notice

kubernetes ·

The dockershim went away and my images did not notice
Every string search I did not have to write

lucene ·

Every string search I did not have to write
The Java port we could not make fast enough

c# / performance ·

The Java port we could not make fast enough
GitHub Actions over Jenkins

ci/cd ·

GitHub Actions over Jenkins
Groovy everywhere, with one large asterisk

groovy ·

Groovy everywhere, with one large asterisk
Two hundred lines of PowerShell I could not test

python ·

Two hundred lines of PowerShell I could not test
Windows containers, Linux containers, and when a small Windows VM wins

windows / containers ·

Windows containers, Linux containers, and when a small Windows VM wins
The scheduled job on the Windows agent

pipelines ·

The scheduled job on the Windows agent
I wrote a Spark job. The stack trace was Hadoop.

spark / hadoop ·

I wrote a Spark job. The stack trace was Hadoop.
The cluster went away. The shuffle did not.

spark ·

The cluster went away. The shuffle did not.
A Windows agent for Jenkins, from bare VM to online

jenkins ·

A Windows agent for Jenkins, from bare VM to online
C# without the class hierarchy

c# / architecture ·

C# without the class hierarchy
A year of automating a flat

retrospective ·

A year of automating a flat
.NET 6 makes small services simpler

c# / .net ·

.NET 6 makes small services simpler
The same stack, written twice

infrastructure ·

The same stack, written twice
Redis you are allowed to lose, and Redis you are not

memorydb ·

Redis you are allowed to lose, and Redis you are not
A ten minute wait should not cost you Lambda time

step functions ·

A ten minute wait should not cost you Lambda time
SAM and Serverless Framework, on the same flat

serverless ·

SAM and Serverless Framework, on the same flat
The template I wrote and the one AWS ran

infrastructure ·

The template I wrote and the one AWS ran
EventBridge cannot tell you when the sun sets

serverless ·

EventBridge cannot tell you when the sun sets
Running .NET 5 in Linux containers - and measuring its memory

.net / containers ·

Running .NET 5 in Linux containers - and measuring its memory
C# 9 and .NET 5: less ceremony, useful improvements

c# / .net ·

C# 9 and .NET 5: less ceremony, useful improvements
A smart home skill is a router and a contract

alexa ·

A smart home skill is a router and a contract
The migration tool that could not phone home

migration ·

The migration tool that could not phone home
The work I did instead of leading

leadership ·

The work I did instead of leading
Deyan Peev

Founding Engineer in Sofia, Bulgaria. Currently at 1club.

© 2026 Deyan Peev