00 · The thesis · domain‑first

Freeze the domain.
Everything else stays liquid.

Domain is everything.

Codefreeze is a domain‑first studio for fintech architecture. I keep the business model legible — at every layer, from a single Java method to the cloud subscription — while frameworks, AI agents and the regulator keep changing underneath it.

or message me on LinkedIn
01 / market

What's broken right now

Four chronic patterns I keep meeting in fintech — plus one specific to the AI era.

02 / discipline

The domain‑first method

Four principles. One method, scaled across every layer — code, MCP, infra, AI.

03 / journey

Where the method took shape

Five engagements across employment, contract roles and personal R&D — ordered by methodological depth, from banking-grade origins to a complete instantiation.

04 / contractor

Behind Codefreeze

Codefreeze is a one-person studio. Here's the engineer you'll actually be working with.

1 client
at a time · focused engagement
Hands-on
architect + developer
15+
years of experience
8
enterprise clients
Full-stack exp
Java · React · Python · IaC · Agents
Author
domain‑first methodology · 10-vol rules
05 / fit

Is this the right fit?

A senior architect taking one client at a time has to filter early. Honest about both sides.

06 / engagement

How an engagement starts

Three shapes from low-commitment validation to hands-on delivery. Click for what each one delivers.

07 / faq

Questions before the first email

The questions a skeptical senior asks first — answered straight.

Isn't Domain‑first just DDD with a new name?

It's built on DDD — Evans's philosophy is the foundation, and I won't pretend otherwise. The difference is what I do with it. DDD leaves the encoding to you; Domain‑first makes it executable and enforced: the domain is a tree of versioned Java interfaces, every concrete class exists only as a leaf at the edge, dependency direction is a rule, not a preference. And it doesn't stop at the code model — the same discipline runs from a single Java method through Terraform modules and service orchestration to how an AI agent is allowed to touch the system. DDD describes the model; Domain‑first turns it into the contract everything else, the AI included, has to obey.

When should a project adopt Domain‑first?

The earlier you start, the more you get: Domain‑first defines the shape and meaning of your objects before the applications that depend on them, so the apps grow out of the domain instead of the model being bolted on later. On a greenfield it's almost free — you build the core of objects and relationships first and carry no retrofit cost. A large or existing application adopts it gradually, interface by interface, area by area, each refined as far as that area has matured — never a big-bang rewrite. AI-driven projects need it first of all: from day one the interfaces fix the expected shape and definition of every object the domain and the apps share, so agents build inside the model instead of eroding it.

What survives when the framework or the regulator changes?

The domain. The whole point is to keep the business model legible while everything around it stays liquid. Frameworks, ORMs, wire formats and cloud services live in adapters at the edge — swap them and the domain doesn't move. A new regulation usually means a new interface that extends an old one, so existing code keeps running while the new rule is added beside it, not retrofitted into it. You change the thing that changed; the core you depend on survives untouched.

How do you keep AI agents from corrupting the model?

I give the agent the role of a domain expert and impose the domain on it. The domain isn't a prompt — it's a set of Domain‑first Java interfaces, and each one is earned: the output of a deep analysis of that area of the system, conducted by applying my Domain‑first Rules. Their detail tracks how far each area has grown — mature areas expose precise contracts, young ones stay coarse. Those interfaces are at once the agent's knowledge and its permission surface — it reasons inside them and can't invent past them.

Execution is real, not a sandbox toy. OpenClaw, backed by Claude, runs in an isolated VLAN with full access to the infrastructure described as IaC. The agent can actually operate the system — read the domain graph, generate a leaf, deploy it — but it's contained two ways: the network isolates it, and the interfaces decide what is allowed to exist.

What makes a migration or a decommission cheap?

Nothing depends on anything except the domain interface above it. Adapters and application services never import each other, so retiring a database, a service or a wire format is a leaf swap, not a coordination project — you replace the implementation behind the interface and every consumer keeps compiling. Because the model is a graph, the cost is countable in advance: leaves to move, consumers to update, data to migrate. Migrations stop being multi-month unknowns and become a list you can estimate.

Will my team maintain it after you leave?

The domain map, architectural decisions with rationale (ADRs), refactor recipes and test scaffolding — all in your repo and your team's hands. Domain‑first is judged by what your senior engineers can maintain solo after the engagement ends. If they cannot, the engagement failed.

Is it really a one‑person studio?

Yes. One senior architect and developer, one client at a time — the person who scopes the work is the person who writes the code. No juniors to train on your codebase, no offshore handoff, no account manager between you and the work. The trade-off is honest: I take one or two engagements at a time, so availability is the constraint, not capacity. What you get for it is continuity — the model in your repo was reasoned and built by the same head, end to end.

How do you invoice, and in what currency?

JDG (Polish sole-trader) B2B invoicing, monthly. In your operating currency. Engagement scope agreed after the Architecture Review.

What if you're unavailable partway through?

Fair worry, and the method is built to answer it. I work so the engagement is handoff-ready at every step — there's no load-bearing knowledge trapped in my head. The domain understanding is researched and written into the documents; the model is reflected in the interfaces; the next slice of work is already laid out in the plan; and every change sits in git as a small, reversible leaf with its own decision record. So if I'm unavailable, your own seniors — or any competent engineer — pick it up by reading, not by archaeology. It's the same property that makes the work yours with no lock-in: it was never dependent on me being in the room.

08 / contact

Let's talk

Codefreeze takes one or two senior engagements at a time. Email is the fastest path.