tanjilahmed87@gmail.com

Blog

Writing about systems that survive production.

Architecture decisions, performance work, AI integration patterns, and engineering culture — written from projects that shipped, not theory.

Backend8 min read

How I Design Scalable Laravel Architectures

The patterns I reach for when a Laravel codebase needs to survive years of growth: bounded contexts, thin controllers, and queues as a first-class citizen.

Read article
Frontend7 min read

Building Fast E-commerce Frontends with Next.js

Commerce frontends live and die by perceived speed. How server components, smart caching, and disciplined hydration turn catalogs into conversion.

Read article
Architecture6 min read

When to Use WordPress, Laravel, or Headless CMS

A decision framework from someone who ships all three: match the tool to the team that will run the platform, not to developer preference.

Read article
AI Engineering9 min read

Practical AI Integrations with LangChain and Vector Databases

What actually matters when you connect an LLM to real business data: sync pipelines, retrieval quality, and permission-aware answers.

Read article
Engineering Culture5 min read

Clean Code Is Like Good Handwriting

Nobody compliments legible handwriting — they just read it without friction. The same quiet quality is what clean code is actually for.

Read article
DevOps7 min read

DevOps Lessons from Real Production Systems

Hard-won lessons from years of keeping client platforms alive: boring deploys, honest monitoring, and why your rollback plan is the real pipeline.

Read article
Frontend5 min read

Server Actions vs API Routes in Next.js: When to Use Which

Server Actions removed a lot of boilerplate, but they didn't make API routes obsolete. Here's the line I actually draw between them.

Read article
Backend6 min read

Scaling Laravel Queue Workers Without Losing Your Mind

Adding more workers is the easy part. Keeping them from stampeding your database is where most Laravel queue setups actually fail.

Read article
Frontend5 min read

Migrating a Legacy Codebase to TypeScript Strict Mode

Flipping strict mode on a five-year-old codebase in one commit is how migrations die. Here's the incremental path that actually finishes.

Read article
AI Engineering6 min read

RAG vs Fine-Tuning: Choosing the Right Tool for Your LLM Use Case

Clients often ask for fine-tuning when what they actually need is better retrieval. Here's how I tell the two apart before writing any code.

Read article
DevOps4 min read

Docker Compose Setups That Actually Speed Up Local Development

A docker-compose.yml that takes four minutes to boot isn't a dev environment, it's a punishment. The fixes are almost always the same three things.

Read article
Security7 min read

The OWASP Top 10, As I've Actually Seen Them Break Production

The OWASP list reads like theory until you've fixed each one in a real client codebase. Here's what they actually look like in the wild.

Read article
Databases5 min read

Postgres or MySQL in 2026: A Decision Framework, Not a Religion

Both databases are excellent. The real decision is about what your team already knows and what your workload actually looks like.

Read article
Engineering Culture5 min read

What I Actually Do When Mentoring Junior Developers

Good mentorship isn't answering questions faster than a search engine. It's teaching someone to ask better questions of the code itself.

Read article
WordPress6 min read

Headless WordPress with Next.js: The Parts Nobody Warns You About

The demo is always the same: fetch posts via GraphQL, render them in React. The parts that actually take weeks are preview mode and revalidation.

Read article
Testing5 min read

Why Playwright Replaced Cypress on Every New Project I Start

Cypress got teams to actually write end-to-end tests. Playwright is what I reach for now that those teams need those tests to run fast and everywhere.

Read article
Frontend6 min read

The Mental Model That Finally Made React Server Components Click

Forget 'server' and 'client' as a spectrum. The model that actually clicked was thinking in terms of what crosses the network boundary.

Read article
Backend7 min read

Three Patterns for Multi-Tenancy in Laravel, and When Each Breaks

Single database with a tenant column, separate databases, or separate schemas — each pattern is right for a specific scale, and wrong past it.

Read article
AI Engineering6 min read

Prompt Engineering Practices That Survive Production, Not Just Demos

A prompt that works in a playground and a prompt that survives real user input, edge cases, and six months of drift are different disciplines entirely.

Read article
DevOps5 min read

CI/CD for a Monorepo: Getting GitHub Actions to Only Build What Changed

A monorepo CI pipeline that rebuilds everything on every commit doesn't scale past a handful of packages. Path filtering and caching fix it.

Read article
Backend5 min read

Redis Caching Patterns That Don't Turn Into Invalidation Nightmares

Caching is easy to add and hard to invalidate correctly. The patterns that survive are the ones with an explicit owner and a documented TTL.

Read article
Performance5 min read

Chasing Core Web Vitals for Real Users, Not Lighthouse Scores

A perfect Lighthouse score on a fast office connection tells you almost nothing about the experience on a mid-range phone on real-world mobile data.

Read article
Architecture6 min read

API Versioning Strategies for APIs Other Teams Depend On

The moment another team — or another company — depends on your API, versioning stops being optional. Here's how I've done it without breaking anyone.

Read article
Engineering Culture5 min read

How I Talk to Non-Technical Stakeholders About Technical Debt

'We need to refactor' loses every prioritization meeting. The conversation that wins is about the feature it's currently slowing down.

Read article
WordPress6 min read

Making WooCommerce Fast at Catalogs Beyond 50,000 Products

WooCommerce's reputation for slowness at scale is mostly a reputation for unoptimized defaults. Here's what actually moves the needle.

Read article
Security5 min read

JWTs vs Sessions: The Auth Debate That Refuses to Die

JWTs solved a real scaling problem and got oversold as a universal replacement for sessions. Most apps still don't need what JWTs actually offer.

Read article
Backend6 min read

Livewire or Inertia? Choosing a Laravel Frontend Without a SPA Framework

Both let you skip building a separate API. The right choice depends on how much of your frontend actually needs to feel like a real SPA.

Read article
AI Engineering6 min read

Choosing a Vector Database: What the Benchmarks Don't Tell You

Recall-at-k benchmarks all look similar past a point. Operational cost, filtering, and hybrid search support are what actually differentiate them.

Read article
DevOps5 min read

Infrastructure as Code for Small Teams: A Pragmatic Terraform Setup

Most Terraform guides assume a platform team of ten. Here's the scaled-down structure that works for a team of two maintaining real infrastructure.

Read article
Databases5 min read

The Database Indexing Mistakes I See in Almost Every Audit

Most slow-query problems aren't missing indexes — they're indexes that exist but don't match how the application actually queries.

Read article
Frontend5 min read

Building a Design System on Tailwind Without It Becoming Spaghetti

Tailwind's flexibility is exactly what turns into inconsistency at scale, unless the design tokens are enforced somewhere other than developer memory.

Read article
Architecture6 min read

Microservices: The Question Isn't Can You, It's Should You Yet

Almost every team that adopts microservices early is solving an organizational problem they don't have yet with an architecture cost they'll pay immediately.

Read article
DevOps5 min read

Writing Incident Postmortems People Actually Read

A postmortem stuffed with jargon and blame gets skimmed once and filed away. The ones that prevent repeat incidents are structured completely differently.

Read article
Architecture6 min read

GraphQL vs REST: What Changed My Mind After Real Client Projects

GraphQL's pitch is compelling on a whiteboard. What actually changed my mind about when to use it came from shipping both on real deadlines.

Read article
Testing5 min read

Testing Laravel Applications with Pest: A Practical Migration Guide

PHPUnit works fine. Pest's expressive syntax and lower ceremony made our test suite grow instead of stall — here's how the migration actually went.

Read article
AI Engineering6 min read

Cutting LLM API Costs by 70% Without Hurting Answer Quality

Most LLM cost problems aren't about the model being expensive. They're about paying full price for calls that never needed the full model.

Read article
Mobile5 min read

React Native or Flutter in 2026: What I Tell Clients Who Ask

Both are mature, capable frameworks now. The decision that actually matters is about the team you'll hire to maintain it, not a feature comparison.

Read article
DevOps6 min read

Zero-Downtime Deployments for a Laravel Monolith

Zero downtime isn't a hosting feature you switch on. It's a set of deliberate decisions about migrations, sessions, and how traffic gets switched.

Read article
Security5 min read

SQL Injection Still Happens in 2026 — Here's How

Every modern ORM protects against naive SQL injection by default. The real injection findings I still see are in the places ORMs don't cover.

Read article
Performance5 min read

Getting Next.js Image Optimization Right for a Global Audience

The `next/image` component does most of the work automatically. The remaining decisions still cost real seconds for users on slower connections.

Read article
Architecture5 min read

Event-Driven Architecture in Laravel Without Overengineering It

Laravel's events and listeners are enough event-driven architecture for most apps. Reaching for a message broker before you need one adds cost, not value.

Read article
Engineering Culture5 min read

Building a Code Review Culture That Catches Bugs, Not Egos

The difference between a code review culture that improves a codebase and one that just creates friction is almost entirely about how feedback is phrased.

Read article
WordPress6 min read

Hardening WordPress for Client Sites That Handle Real Traffic

WordPress's security reputation is mostly a plugin and configuration problem. A hardened, well-maintained install is genuinely solid.

Read article
DevOps6 min read

Setting Up Observability with Prometheus and Grafana for a Laravel App

Logs tell you what happened. Metrics tell you it's happening right now. A Laravel app needs both, and Prometheus plus Grafana gets you the second half cheaply.

Read article
Frontend5 min read

TypeScript Generics: The Patterns I Actually Use, Not the Ones in Tutorials

Most generics tutorials build a contrived stack or queue class. Here's where generics actually earn their keep in real application code.

Read article
Databases6 min read

Running Database Migrations on a Live System Without Downtime

The migration itself is rarely the risk. Locking a large table mid-traffic, or a schema that isn't backwards-compatible for a moment, is.

Read article
AI Engineering7 min read

Building AI Agents with Tool Use: Lessons from Production

An agent that can call tools is powerful and genuinely unpredictable. The engineering that makes it safe in production isn't glamorous.

Read article
Engineering Culture5 min read

What Changed When I Moved from Freelancing to Leading an Engineering Team

Freelancing rewards individual output. Leading a team rewards making other people's output better — the skills barely overlap.

Read article
Backend5 min read

Rate Limiting APIs Without Punishing Your Best Customers

A flat rate limit treats your biggest customer the same as a scraper. The limiting strategies that actually work are more deliberate than that.

Read article
Frontend6 min read

SSR, SSG, ISR: The Rendering Tradeoffs Next.js Makes You Choose

Next.js offers four rendering strategies for a reason — none of them is universally correct, and picking wrong shows up as either stale content or slow pages.

Read article
Backend6 min read

RabbitMQ Patterns for Reliable Background Processing

RabbitMQ's flexibility means there are several ways to build a queue, and only some of them survive a worker crashing mid-message.

Read article
Frontend5 min read

Web Accessibility in Practice: What Client Projects Actually Need

Accessibility gets treated as an audit checklist at the end of a project. The teams that ship genuinely accessible sites build it in from the first component.

Read article
Backend6 min read

Modernizing a Legacy PHP Codebase Without a Rewrite

A full rewrite is rarely approved and rarely finishes. The modernization path that actually ships runs alongside the legacy code, not instead of it.

Read article
Performance5 min read

CDN and Edge Caching Strategy for a Multi-Region Audience

A CDN in front of your app is not the same as a caching strategy. The cache-control decisions still have to be made deliberately, per route.

Read article
Engineering Culture5 min read

Technical Interviews That Actually Predict Good Engineers

Whiteboard algorithm puzzles predict who studied algorithm puzzles. Here's the interview format that's actually correlated with strong hires on my teams.

Read article
DevOps6 min read

From Docker Compose to Kubernetes: When the Jump Is Worth It

Kubernetes solves orchestration problems most teams don't have yet. The jump is worth it at a specific, identifiable point — not by default.

Read article