Observations on AWS, system design, and the engineering decisions that compound over time.
A field-tested guide to running Lambda at scale: cold starts, memory tuning, observability, and the security mistakes everyone makes once.
AWS Lambda9 min read
Read the pieceSQS is the workhorse of AWS messaging. Here's a decision framework for when it's the right tool, and when EventBridge, Kinesis, or Kafka is a better fit.
Serverless architecture is not always the answer. A pragmatic framework for choosing between Lambda, Fargate and EC2: workload shape, cost curves and team capability.
A reference pattern for event-driven architectures on AWS: how Lambda and SQS combine to deliver reliability, backpressure, and graceful failure at scale.
Measure at the p99 before touching the code, size the memory, shrink the bundle, reserve provisioned concurrency for the paths users actually feel: the method we apply in production.
Migrating a Node.js backend with no delivery freeze: map before touching anything, runtime and SDK in shippable slices, the strangler pattern on legacy, and why the full rewrite fails.
A multilingual Arabic site is more than translation: logical properties, bidi, typography, forms, PDFs. Field notes on what actually breaks when you add RTL.
Robots rules, server-rendered HTML, JSON-LD and llms.txt: the file-by-file Next.js setup that makes a site citable by AI answer engines.
WordPress already ships server-rendered HTML. Add crawler access, schema, freshness dates and an llms.txt, and AI engines can start citing you.
Stripe delivers webhooks at least once, so duplicates and replays are the contract, not a bug. How to verify signatures on the raw body, deduplicate by event id, and reconcile against the API.
Store presence, iOS push, offline needs and update speed decide between a PWA and React Native, not ideology. A practical decision guide for 2026, including when the right answer is both.
Corrective, evolutive and preventive work under one accountable process: what serious Node.js maintenance includes, and what separates it from a ticket queue.
A method for shipping LLM features on a backend that already has users: timeouts and fallbacks, queues over synchronous calls, schema-validated outputs, evals, cost caps, and GDPR hygiene.
An SLA is more than an uptime number: it covers error format stability, versioning, rate limits and webhook delivery. Here are the design decisions that let a partner API keep its promises.
Why producers should publish to an EventBridge bus instead of writing into SQS, and why the queue still belongs between the bus and Lambda: fan-out, filtering, replay, backpressure, and per-consumer retries.
A warm start is Lambda reusing an execution environment it already initialized, and a cold start is init landing on a user's request. We compare warming pings, provisioned concurrency, SnapStart and bundle work, and show when paying to remove cold starts is worth it.
Synchronous Lambda-to-Lambda calls, homemade state in DynamoDB and copy-pasted retries are the signs you need a state machine. We cover what Step Functions actually gives you, Standard vs Express, and what Distributed Map changes for batch processing.
Access patterns, Lambda connections, transactions and cost shape: the criteria that actually decide between DynamoDB and PostgreSQL on RDS.
MCP lets one server expose your tools and data to every AI assistant that speaks the protocol. Here is how we build, secure and test one in TypeScript with the official SDK.
A sawtooth heap is healthy; a floor that rises across GC cycles is a leak. How we confirm a Node.js memory leak in production with two heap snapshots, and fix the usual suspects.
Not every WordPress site should become a Next.js app. Here is how we decide when a migration pays off, which of the three paths to take, and what must survive the move.
Without a partial batch response, one failed record sends the whole SQS batch back to the queue and your side effects run twice. Configuration, handler pattern, the contract's sharp edges and the FIFO case.
The order that makes an agency handover safe: secure the assets, audit for one week, stabilise for thirty days. A practical checklist for anyone inheriting a live system.
Security groups give you free layer 3/4 default deny, AWS WAF blocks layer 7 attacks on public HTTP endpoints, and Network Firewall is the only one that filters egress. Here is which layer stops which threat, and what each one costs in shape.
SQS for point-to-point commands with backpressure, SNS for push fan-out, EventBridge for content-routed domain events with replay, Kinesis for ordered high-throughput streams. Combining them is the norm, and one dimension usually decides.
Function URLs for single-function endpoints, HTTP API for most public serverless APIs, REST API for contractual partner access, ALB for steady high volume. The real differences are auth, throttling, WAF support and cost shape.
Parameter Store SecureString covers most secrets at no storage cost; Secrets Manager earns its per-secret fee only for rotation, cross-account access, or replication. Our default split, with a comparison table and the Lambda caching pattern.
S3 for anything that can be an object, EFS for shared POSIX access from Lambda or Fargate, EBS for block storage bound to one EC2 instance. We map each service to its workload from a serverless Node.js angle.
Gateway endpoints carry S3 and DynamoDB traffic for free, Interface endpoints cover the remaining AWS APIs for less than NAT, and the NAT Gateway should only carry true internet egress. Most inflated NAT bills are AWS-to-AWS traffic that never needed the detour.
Provisioned RDS wins on steady high-utilization load, Aurora Serverless v2 on variable load with a real baseline, DynamoDB on-demand on spiky low-average traffic. We map each traffic profile to its cost shape.
Lambda wins for spiky, event-driven, short-lived work; Fargate wins for long-running services and steady concurrency. Here is how we decide the grey zone in between.
Cognito wins on cost shape and native integration for AWS serverless stacks, Auth0 on mature B2B and enterprise features, Clerk on developer experience and prebuilt UI. Here is how we decide, including the lock-in question.
AppSync earns its place when multiple client shapes, mobile bandwidth, or built-in subscriptions justify GraphQL. API Gateway stays simpler for REST consumers, webhooks, and partner APIs, and most platforms end up running both.
EventBridge Scheduler is the default for standalone schedules on serverless AWS, with timezones, one-time runs and per-schedule retries. Legacy cron rules only earn their keep on existing UTC jobs, and Step Functions Wait states handle delays inside a workflow.
Vercel wins on day-one Next.js feature support, Amplify Hosting on AWS-native billing and EU regions, and S3 plus CloudFront on cost for fully static sites. We compare feature coverage, data residency, cost shapes, and operations.
Tell us what you are working on. Reply within 24 hours, one-page diagnostic within 48.