The Dream Steps Journal

Working notes on design, technology, and AI.

No fluff. No listicles. Writing from inside the work — for founders, product teams, and marketers who care about getting the details right. We publish what we wish someone had told us before we shipped.

From the journal

Is your product ready for AI? — a practical readiness check

Adding AI to a product that works well is straightforward. Adding it to one that is not ready produces a demo that falls apart in front of real users. Five things have to be true first — and the model is not one of them.

Replatforming off a legacy CMS — how to do it without losing traffic

A legacy CMS rarely fails outright — it ages, until every change is slow and risky and the security updates have stopped. How to replatform off it without losing the search traffic you spent years earning.

How to modernise legacy software — without a risky rewrite

Legacy software can be modernised in place, incrementally, while it keeps running and earning the whole time. No big-bang switchover, no frozen roadmap — here is the approach, step by step.

Node.js vs Python — which backend should you build on?

Node.js and Python are the two default choices for a backend, and the decision is usually made on what the team already knows. That instinct is not wrong, but it is incomplete — they have genuinely different strengths, and the workload should sometimes override the habit.

Why production AI runs on Python — FastAPI, Pydantic, and the AI backend stack

Almost every production AI system you have used runs on Python. Not because Python is fast — it is not — but because the ecosystem, the model SDKs, and the data tooling all live there. The interesting question is what separates a Python notebook that works from a Python service you can run in production.

RAG vs fine-tuning — which does your AI feature actually need?

RAG and fine-tuning are the two ways to make a general-purpose model work for your case, and teams treat the choice as a fight. It is not one. RAG gives the model the right information at answer time; fine-tuning changes how the model behaves. They solve different problems — and most features need one far more than the other.

Why your cloud bill keeps growing — and how to bring it down

A cloud bill rarely grows from one big mistake. It grows quietly, from a handful of recurring causes nobody is watching — until finance asks why the number doubled. Those causes are well known, and genuinely fixable.

Rewrite vs refactor — should you rebuild your software from scratch?

A full rewrite is the most appealing idea in software, and one of the most dangerous. Refactoring is less exciting and far more likely to succeed. Here is how to tell which one your situation actually calls for.

Serverless vs containers — which should you deploy on?

Serverless and containers are the two main ways to deploy a backend, and the choice has real consequences for cost, speed, and how much your team has to operate. Neither is universally better — the workload decides.

What is a vector database — and does your product need one?

A vector database stores text as numerical embeddings and finds items by meaning rather than by matching keywords. If your AI feature needs to answer from your own content, you almost certainly need one. Here is what it does, where it fits, and what your real options are.