How should modules manage their external dependencies? The answer isn’t purely technical - it depends on who’s installing them. This post explores the real-world trade-offs between Composer-managed, developer-friendly modules and self-contained, user-friendly packages.
The Skipped Version Problem: How To Handle Module Updates
Updating modules sounds simple - until users skip versions. Suddenly migrations break, tables are missing, and update logic becomes a headache. See how a lightweight UpdateManifest can turn chaotic upgrades into a predictable, controlled process.
Deferred Writes: Performance Optimization and Database Gotchas
A look behind the scenes of implementing deferred writes in the CodeIgniter 4 Settings package: how batching write operations improves performance, and the subtle database portability issue caused by NULL values in unique constraints.
Building a Production-Ready File Handler for CodeIgniter 4 Settings
While CodeIgniter 4 Settings includes a database-backed handler, I wanted a file-based option that’s lightweight, fast, and safe for production use. I’ll walk through the challenges of handling concurrency, file locking, and caching, and explain the design choices behind the new FileHandler.
Dead Letter Exchanges in RabbitMQ
Many people think Dead Letter Exchanges can handle only failures. In reality, they’re perfect for scheduling messages and delayed job processing. Let’s see how we can do it.