The Prompt Engineering Manifesto: From $2,400 Mistakes to Production-Grade AI
A hardcoded prompt typo cost us $2,400 in 72 hours. Here's the engineering discipline, testing strategies, and open-source tool (Promptly) we built to fix it for good.
Long-form writing on software engineering, systems design, and building things. (Page 2)
A hardcoded prompt typo cost us $2,400 in 72 hours. Here's the engineering discipline, testing strategies, and open-source tool (Promptly) we built to fix it for good.
Your async AI feature works... until it doesn't. This guide covers how to debug unreported job failures, trace Action Cable WebSocket issues, and handle common pitfalls in production.
A deep dive into architectural patterns using ActiveJob and Redis to solve LLM latency, moving from an 8-second wait to a sub-50ms cached response.
Most function calling tutorials show toy examples that break in production. This guide provides the 80% foundation you actually need: a security-hardened, multi-turn agent with complete parameter validation, proper error handling, logging, and timeouts. Copy, customize, and build on it
An advanced guide to building a robust, automated RAG evaluation framework in Rails, with production-minded code for metrics, parallelization, and CI/CD integration.
A user double-clicks "Pay Now." Are they charged twice? In a world of unreliable networks and automatic client retries, idempotency isn't an advanced feature—it's a fundamental requirement for any robust API. This post shows you how to implement it using the Idempotency-Key header pattern in Rails.
A Pull Request is more than a gate; it's a story. It's the most critical piece of documentation your team will ever write about a change. This post breaks down the anatomy of a great PR, transforming it from a chore into a powerful tool for communication, collaboration, and future debugging.
Most teams see feature flags as simple on/off switches. They are so much more. This post explores how to use flags for percentage-based rollouts, targeted betas, and even as operational circuit breakers, transforming them from a developer convenience into a strategic tool for shipping safer, better software.
Everyone wants to break the monolith, but jumping straight to microservices is a fast track to a distributed mess. The Modulith is a more pragmatic step: a single application with strong, enforced internal boundaries. This post explores how to use tools like Packwerk in Rails to achieve modularity without the operational overhead of a distributed system.
How do you guarantee that an event is sent if, and only if, a database transaction succeeds? The dual-write problem plagues distributed systems, leading to inconsistency and bugs. This post dives deep into the Outbox Pattern, a simple yet powerful solution in Rails to ensure atomic, at-least-once delivery for your critical events.