
Updated: June 29, 2026
Your app still has one job: store data, fetch it fast, and stay honest about "correct." The modern "database" is a stack-primary store, a few specialists, plus cache-so you don't melt your main DB. This post walks through Postgres, MySQL, Mongo, vectors, and Redis, then lands on a boring 2026 default for most SaaS: Postgres + JSONB + pgvector + Redis. read on »

Updated: June 29, 2026
AI can crank out code fast. Then you blink, and nobody remembers what changed or why. This post argues that Git-not your assistant-is the real memory: commits as checkpoints, branches as experiments, PRs as the paper trail. It also breaks down where to host your repo (GitHub, GitLab, Bitbucket, or self-hosted) and what actually matters if you want AI speed without AI chaos. read on »

Updated: April 14, 2026
Buying a domain feels like ownership until you touch DNS and learn you're renting a name glued together by caches. This post breaks down registrars vs registries, the DNS record types that matter, why TTLs make "propagation" feel random, and the silent failures that take down email or login with zero warnings. Includes a practical pre-change checklist and a clear look at what Cloudflare adds beyond basic DNS. read on »

Updated: June 29, 2026
You can tell how a team ships software by how they talk about servers. VMs are "the server": heavy, isolated, and long-lived. Containers are "spin up another instance": fast, repeatable, and disposable. This post breaks down the real tradeoffs, shows a minimal Flask Dockerfile, and explains why predictable environments, loud failures, and easy rollbacks matter more than ideology. read on »

Updated: June 29, 2026
Kubernetes gets recommended like a vitamin, but it's closer to a chainsaw: great for real operational problems, a mess for small apps. This post breaks down what K8s actually does, the core objects that trip people up, when it earns its keep, and when you should pick something boring like Cloud Run or ECS. It also covers why AI-generated YAML can speed you up-or ship an outage-if you don't understand probes, resource limits, and basic `kubectl` debugging. read on »

Updated: June 29, 2026
Built an MCP server in a weekend? Cool. Now check whether you also built an eager little agent with access to your prod database, your `.env`, and a log trail full of secrets. This post is the Monday-after triage: rotate keys, purge git history, put a proxy in front of model + tools, kill "run arbitrary SQL," shrink tool scopes, and treat logs like toxic waste. Shipping the demo is easy. Owning what happens next is the job. read on »

Updated: March 29, 2026
SSH deploys and "git pull" aren't DevOps. They're a ritual that turns one person into a production bottleneck. This post breaks down CI as the boring gate that saves your weekends, CD as the path to repeatable, auditable releases, and why AI-written tests only matter if a pipeline enforces them. If deploys still feel scary, you're missing the seatbelt. read on »

Updated: March 22, 2026
Terraform isn't hard. It's just painfully specific. Pair it with an LLM and you stop doing "lookup work" (argument names, nested blocks, list vs set) and start doing "review work." The model isn't your architect. It's your fast typist. You still run fmt/validate/plan, read the diff, and keep the blast radius small. read on »

Updated: June 29, 2026
UTC in the backend is the fastest way to delete a whole class of bugs-especially the twice-a-year chaos of DST. Store timestamps as aware UTC datetimes, keep timezone names (not offsets) as user preferences, and convert only at the last display step. Your cron jobs, logs, billing, and incident timelines will stay boring, sortable, and sane. read on »

Updated: March 22, 2026
Friday deploys shouldn't depend on one person, one SSH session, and a lucky sequence of commands. This post shows a boring (good) deployment loop: push a timestamp tag, let GitHub Actions build and ship a Docker image, and run it on AWS Lightsail with health checks and easy rollback. Tags become the big red button-and production stops being a fragile ritual. read on »

Updated: June 29, 2026
Stop writing five slightly-wrong S3 helpers and call it "platform." This post walks you through building a first MCP server that gives agents safe, audited, policy-based access to S3-backed unstructured data-without turning your buckets into a panic factory. We'll start with the boring (logs, auth, limits, predictable errors), sketch a tiny FastAPI endpoint, and cover the guardrails future-you will demand the moment compliance shows up. read on »

Updated: June 29, 2026
Explore two contrasting approaches to AI-native engineering and software development. Analysis of Peter Steinberger's perspective on building with AI tools, highlighting key agreements and fundamental differences in methodology. read on »

Updated: June 29, 2026
GitHub as Your Bridge to Production You ever hear about the senior programmer who got hit by a bus? Metaphorically. He's fine. But the company wasn't. read on »

Updated: March 22, 2026
Replit is fantastic for shipping fast. It's also a risky place to keep production data, because containers restart, move, and disappear. This post explains how to keep Replit for the app, move your database to AWS RDS, and set up the "boring" stuff-backups, restores, migrations, logging-so you can move fast without losing user data. read on »

Updated: March 22, 2026
Replit is my go-to antidote for the "environment setup ate my entire day" problem. Open a browser, write code, run it, and let the built-in AI handle the boring parts so you can ship something real. It's perfect for MVPs and internal tools, a little spicy for serious production, and a great way for startups to move fast before the market moves on without them. read on »

Updated: January 26, 2026
Deployments rarely kill startups. But sloppy deployments will quietly eat your runway while you argue about tools, chase ghost bugs, and "fix forward" through outages. In this post, I break down five common deployment sins-staging drift, leaked secrets, fake staging tests, backups you never restore, and rollbacks that don't exist-and how to avoid wasting weeks on problems you can prevent in a day. Also: remember the ants. Two words: fire ants. read on »

Updated: January 26, 2026
Most startups pick Postgres "for scale" the way people buy a tour bus for a commute: it feels responsible, right up until you're paying for problems you don't have. SQLite is boring, fast, and removes a whole category of database drama. The real catch is write contention (one writer at a time), but with WAL mode, short transactions, and sane access patterns, it'll carry you further than your architecture diagrams suggest. Use SQLite now, design for a clean swap later, and let production-not vibes-tell you when it's time to upgrade. read on »

Updated: January 26, 2026
Background jobs finish on their own schedule, which means your users either spam refresh like it's 2004... or you tell them when the work is done. In this post, I'll show you how to send Firebase Cloud Messaging (FCM) push notifications from a Replit backend using either TypeScript (Node) or Python-plus the real-world gotchas around service account JSON, Replit Secrets, IAM permissions, and device tokens that expire purely out of spite. read on »

Updated: January 26, 2026
"Vibe-coding" is trying to sound like a new craft, but most of the time it's just a shortcut with better branding. I'm renaming it: vibe-coding is when you delegate both the code and the judgment to an AI, then ship it without understanding, testing, or ownership. Using AI to draft code is fine. Shipping unverified output because it "felt right" is how you end up with a very efficient failure-and a very long conversation with your CEO. read on »

Updated: January 15, 2026
If you're building with LLMs, you'll hit the "MCP server or tool?" fork in the road. Tools are fast, local, and easy to test. MCP servers are for shared capabilities, centralized auth/policy, and anything that touches "scary data." Pick wrong and nothing explodes-but your codebase will slowly turn into a museum of regrettable decisions. read on »