Ivan Karpinskyi · Full-stack engineer, backend firstFull-stack engineer, backend first
I build backends and take them all the way to production.
Full-stack engineer, backend first. 4+ years with Node.js, NestJS and PostgreSQL. Below: systems I designed, shipped and still run, from a law firm's platform on its own AWS to an AI video pipeline on queues, and notes on how backends behave.
- Backend
- Node.js, NestJS, REST and queuesNode.js, NestJS, REST, queues
- Data
- PostgreSQL, pgvector, RedisPostgreSQL, pgvector, Redis
- Queues
- BullMQ workers, retries, idempotencyBullMQ workers, retries, idempotency
- Runs on
- AWS, Docker, Terraform, my own serversAWS, Docker, Terraform
Systems · 04 · Built, shipped and run by one engineer
All work →Systems · 04
Built, shipped and run by one engineer.
- 01 ·Client projectConnectPlatform and release pipeline for a law firmDocker · Terraform · one-command release with rollback
- 02 ·Own productClipNestAn AI video pipeline on queuesNestJS · BullMQ · pgvector · FFmpeg on Lambda
- 03 ·Client projectDimori Park GroupOff the CMS server: one app for every locationStrapi + GraphQL on EC2 → Keystatic, nothing to run
- 04 ·Own productA11ySignalAccessibility scans as a pipelineBullMQ jobs · Chromium pool · scan diffs
Notes
Notes on how backends behave
Every note starts as a question from real work, researched until the answer holds up. Sources at the end of each.
Pinned · Decision · 06.10.2026 · 10 minDual writes will bite you: choosing between a polling outbox and CDCA dual write has no safe ordering. How polling outboxes skip rows and bloat, how CDC slots fill disks, and how to pick the relay your team can run.Changes · 08.10.2026 · 7 minThe negative leap second: the clock bug nobody has rehearsed in productionAll 27 leap seconds added time and still broke Linux and Cloudflare. A deleted second jumps clocks forward instead, and on 15 October 2026 the CGPM votes.Mechanism · 28.09.2026 · 12 minTimestamps lie: why ORDER BY created_at isn't orderingWall clocks drift, step and freeze, so created_at cannot order writes. How last-write-wins loses data, and what logical clocks and fencing tokens fix.Mechanism · 20.09.2026 · 12 minYour query's latency lives where you deployed itThe path from await query() to a row has five measurable stages. Which one owns your latency is decided by deployment shape, not by the query.
Experience
Where I've worked
MB-DigitalMar 2026 – Aug 2026Software Engineer · AdTech and marketing automation
Clover DynamicsAug 2023 – Feb 2026Software Engineer · Web applications
AppexoftJan 2023 – Jul 2023Software Engineer · Backend services and integrations
I'm Ivan, an engineer from Ukraine. I started on the backend and still think from the database up. If you want to talk about a role, a system or a note, write to me.