Build. Deploy. Solve.
Document. Repeat.
Sharing real-world experience in Backend, Cloud, DevOps and Homelab. Bugs encountered, debugging approaches, and solutions applied.
Featured posts
BullMQ Job stalled with ElastiCache while Redis is healthy
Why BullMQ timeout and Job stalled errors happen with AWS ElastiCache Redis, and how to fix worker and connection settings.
Xpenology on Proxmox VE 8.2.4 with HDD passthrough
How to install Xpenology DSM 7.2.1 on Proxmox VE 8.2.4 and configure HDD passthrough so DSM can read SMART data natively.
Resize an EC2 EBS volume and extend XFS without data loss
Step-by-step guide to expanding an EBS volume and growing an XFS filesystem on EC2 Ubuntu — online and without downtime.
Latest posts
NestJS Telegram Alerts: Exception Filter, Jobs, and Deploy
Telegram Bot API in NestJS: TelegramModule, exception filter for 5xx alerts, BullMQ job failures, and deploy hooks — no external libraries needed.
MySQL Isolation Levels: Common Race Conditions and How to Fix Them
MySQL's default REPEATABLE READ doesn't prevent every race condition. Dirty reads, lost updates, phantom reads, write skew — which isolation level prevents which, when SELECT FOR UPDATE is the real fix, and when optimistic locking is better.
Stop Using Database Constraints as Input Validation: Use DTOs Instead
Many backends rely on NOT NULL, VARCHAR(n), and UNIQUE constraints to catch bad input. This is the wrong layer for validation — databases aren't built for it. Where validation actually belongs: the DTO layer and service layer, before data ever reaches the DB.
MySQL Deadlock: How to Read InnoDB Logs and Reduce Occurrence
MySQL auto-resolves deadlocks but randomly rolls back a transaction, causing errors at the app layer. How to read SHOW ENGINE INNODB STATUS to find exactly which row was locked, common causes, and 5 ways to reduce deadlock probability.
N+1 Query in Prisma, TypeORM, and Sequelize: How to Detect and Fix It
N+1 query causes no errors but makes APIs slow as data grows — ORM fetches a list with 1 query then fires N more for each item. How to catch it with SQL logging, count queries per request, and fix with eager loading, batching, or DataLoader.