Writing

Notes and long-form

Mostly about things I have just finished debugging.

79 articles

The check-in app is one web page and two wrappers

mobile ·

The check-in app is one web page and two wrappers

A tablet by the door where members check themselves in. It started as a Next.js app, then became an iOS and an Android app that render exactly that page in a WebView and carry no product logic at all. The most instructive part was the subsystem I built, tested, shipped and deleted eight days later.

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 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
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
The button in Port and the service it makes

platform engineering ·

The button in Port and the service it makes
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
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.

Elsewhere

© 2026 Deyan Peev