Software Engineering
The Cost of an Assumption: A Cross-Platform Engineering Lesson I Learned the Hard Way
A real-world engineering lesson about technology selection, cross-platform development, and why validating the riskiest assumptions early can prevent major project blockers.
By Ishan Wickremasuriya
Published 2026-08-16 • 8 min read
software engineeringtechnology selectionarchitecturecross-platform developmentproof of concepttechnical decision makingengineering lessonssoftware architecture
PostgreSQL
PostgreSQL Connection Errors with Special Characters in Passwords: URL Encoding vs Separate Credentials
Learn why PostgreSQL connection strings can fail when passwords contain special characters, how to safely URL-encode credentials, and when to use separate database connection parameters with Node.js, pg, and Drizzle ORM.
By Ishan Wickremasuriya
Published 2026-08-11 • 9 min read
PostgreSQLDrizzle ORMNode.jsTypeScriptDatabaseConnection StringURL EncodingencodeURIComponentNext.jsAlmaLinux
Node.js
Advanced Event Loop Patterns and Alternatives — Part 4
The final part of the event loop series: scaling Node.js beyond a single process with Cluster, Child Processes, message queues, background jobs, and distributed processing — and an honest look at when Node.js isn't the right tool at all.
By Ishan Wickremasuriya
Published 2026-06-20 • 16 min read
Node.jsJavaScript RuntimeEvent LoopBackend EngineeringSystem DesignDistributed SystemsSoftware ArchitectureProduction Systems
Node.js
Event Loop Performance Optimization Techniques — Part 3
A practical guide to measuring and fixing event loop performance in production Node.js applications: event loop lag, monitoring, profiling, Worker Threads, streams, backpressure, batching, and queue-based architecture.
By Ishan Wickremasuriya
Published 2026-06-19 • 15 min read
Node.jsJavaScript RuntimeEvent LoopBackend EngineeringPerformance OptimizationObservabilityWorker ThreadsProduction Systems
Node.js
Writing Production Code With the Event Loop in Mind — Part 2
A practical guide to the patterns that quietly block the Node.js event loop in production: CPU-heavy operations, synchronous APIs, JSON processing, regular expression traps, large loops, memory pressure, and the async patterns that fix them.
By Ishan Wickremasuriya
Published 2026-06-18 • 14 min read
Node.jsJavaScript RuntimeEvent LoopBackend EngineeringPerformance OptimizationAsynchronous ProgrammingProduction SystemsEngineering Lessons
Node.js
Understanding the Node.js Event Loop: The Engine Behind Async JavaScript — Part 1
A deep technical explanation of the Node.js event loop, how asynchronous execution works internally, how libuv manages operations, and how understanding runtime behavior helps engineers build high-performance and scalable backend systems.
By Ishan Wickremasuriya
Published 2026-06-16 • 16 min read
Node.jsJavaScript RuntimeEvent LoopBackend EngineeringPerformance OptimizationAsynchronous ProgrammingSystem DesignSoftware ArchitectureEngineering LessonsProduction Systems
Node.js
How Console Logging Nearly Broke My Node.js Production System — Lessons Learned
A production incident that initially appeared to be a memory leak turned out to be a logging and I/O backpressure problem. This article explores how excessive console logging affected memory usage, event loop responsiveness, and overall system stability in a Node.js application.
By Ishan Wickremasuriya
Published 2026-06-13 • 9 min read
Node.jsPerformanceProduction EngineeringLoggingEvent LoopBackpressureObservabilityWinston
Engineering
Why I Started Writing After 13 Years in Software Development
After more than 13 years in software development, I started this blog to document engineering lessons, architectural decisions, technical tradeoffs, and practical insights gained from building real-world systems.
By Ishan Wickremasuriya
Published 2026-06-10 • 5 min read
Software EngineeringCareerEngineering JourneySystem DesignArchitectureLessons Learned