Skip to content

Pull quotes

Fortunes from the Coffee Machine

The lines worth carrying into the next architecture discussion.

Why TPF Exists

“I/O is not clearer because it is injected; it is clearer because someone owns its consequences.”

Does hiding I/O make the important bits harder to see?

“Spring assembles the house; TPF is interested in the load-bearing path through it.”

Isn’t this just Spring wearing a pipeline hat?

“A chain tells you what is called next; a pipeline makes the consequences of that call reviewable.”

Is a typed pipeline just a method chain with a press release?

“An await is a durability problem, not an automatic invitation to buy a workflow engine.”

Isn’t this another workflow engine with a more expensive hoodie?

“A pipeline is a promise to make a flow explicit, not a tax on every method.”

Does every application now have to become a pipeline?

“Ports protect the core’s direction; a pipeline makes the journey between ports a contract.”

Is this Clean Architecture with a code generator and a fake moustache?

“A business decision should not have to learn the dialect of every system that carries it.”

Why is TPF so fussy about where business logic lives?

“A service can be tidy while the business path it participates in is completely invisible.”

Why not keep a well-designed service layer?

Bring Your Existing App

“A monolith can gain a boundary without pretending it has become twelve companies.”

Can a legacy monolith participate without a personality transplant?

“A good migration replaces responsibility at a seam, not confidence with a deadline.”

Can we move one capability without beginning a rewrite cult?

“Kafka can remain the road; the domain does not need to become the traffic report.”

Can Kafka stay while the flow changes?

“A controller is a useful doorway; it should not have to be the whole building.”

What happens to controllers that already work?

“A migration is credible when it preserves what already works and makes one costly uncertainty smaller.”

Do I have to replace Spring Boot to get any value?

“Extraction is not duplication when the old path begins calling the new decision.”

How do we untangle a transaction script without cloning the business?

“A migration is complete when the promise is proven, not when the old package is deleted.”

How do we know the new flow did not change the old promise?

“Lazy loading is not evil; it is simply a very expensive way to keep a boundary implicit.”

Will JPA become a forbidden relic?

Domain Modelling

“A domain event says what happened; a connector says who, if anyone, gets to hear about it.”

Are domain events first-class, or just pipeline exhaust?

“A shared language is valuable; a compulsory accent is not.”

Does TPF come with a DDD language police badge?

“A pipeline can coordinate a decision without becoming the only place that decision has a meaning.”

Will this turn my rich domain into a polite data transfer object?

“A saga is a business promise under imperfect consistency, not a remote-call counting exercise.”

Is this a saga, or are we just calling it one near a whiteboard?

“A handoff is healthy when the receiver owns the contract, not the sender’s implementation.”

How do bounded contexts talk without exchanging framework gossip?

“A pipeline is an application service whose execution promises are too important to leave implicit.”

Is a pipeline just an application service in a trench coat?

“Event sourcing records domain truth; a pipeline records how a typed decision survives its journey.”

Do I need event sourcing to be invited?

“A pipeline can coordinate a consistency conversation; it cannot make independent ownership disappear.”

Where do rules go when two aggregates start arguing?

Runtime

“A slower build is a good trade when it prevents a slower incident.”

Does generation make builds slower and failures stranger?

“Strong typing does not remove evolution; it removes the ability to postpone admitting it.”

Does strong typing make change slower?

“Reactive is not a personality test; it is a promise not to block everyone else.”

Does reactive mean nobody may block ever again?

“Backpressure is a promise between boundaries, not a checkbox in a library.”

Can one flow melt the downstream system?

“A timeout is evidence of uncertainty, not evidence that nothing happened.”

What if the payment worked but the answer vanished?

“The compiler should explain the model mistake, not require a degree to interpret it.”

Do developers need to learn compiler phases?

Connectors

“A connector becomes shared infrastructure when its change can alter someone else’s business promise.”

Who owns a connector everybody depends on?

“A connector is where external reality becomes an application responsibility.”

Is a connector just an adapter with better stationery?

“A useful category answers who owns the consequence, not who wrote the class.”

Who decides connector, plugin, or step?

Deployment

“Portable semantics are useful; portable assumptions are usually expensive.”

Can one flow run everywhere without becoming vague?

“Generation makes the application contract executable; it does not replace the platform that delivers it.”

What exactly does code generation generate?

“A pipeline is a business execution unit, not a container quota.”

Does one pipeline get its own container and a tiny flag?

“TPF defines the application boundary; Kubernetes still runs the actual application.”

How do I deploy this without learning a new religion?

“Generated boundaries are only useful when the ownership behind them is real.”

Will this generate a distributed monolith with better branding?

“Build topology ships code; runtime layout explains how that code behaves.”

Is runtime layout just Maven topology in a nicer shirt?

“Placement is a behavior decision disguised as a deployment decision.”

Who decides where a pipeline runs?

Operations

“Observability works when the operator can tell one coherent story about a messy execution.”

Can an operator see the whole unpleasant story?

“A dead letter is useful when it preserves responsibility, not merely failure.”

Is a dead letter just a log with a sad name?

“A retry repairs uncertainty; it should not negotiate with a business decision.”

Should every failure get another try?

Testing

“Generated does not mean unowned; it means the source contract deserves more attention.”

Are generated artifacts reviewable or just weather?

“A business rule earns trust when its test can explain it without infrastructure.”

Can the business core still be ordinary Java?

“A timeout test should advance a state machine, not a stopwatch.”

Can retries and awaits be tested before lunch?

“The right test is the cheapest one that can still falsify the claim.”

Does integration testing now own my calendar?

“A connector contract is where a nice type meets an impolite real system.”

Can a fake connector tell the truth?

“If ordering matters, it must be a promise before it can be a test.”

How do we test ordering without trusting luck?

“The most valuable failure test is the one where nobody knows whether the effect already happened.”

How do I test a failure that half-succeeded?

“Test the decision quickly, then test the boundary honestly.”

Do I need to boot the planet to test one flow?

AI

“Machine-readable contracts make an assistant more constrained, not more authoritative.”

Can AI understand a generated contract?

“The useful AI assistant respects the boundary it cannot fully understand.”

Will AI bypass the boundary to get it working?

Governance

“Regeneration is safe only when the generated file is not secretly the source of truth.”

Can generated code be customized without becoming archaeology?

“Operational consistency needs a shared language, not identical business consequences.”

Can teams differ without operational anarchy?

“The platform can own the guardrails without driving the business car.”

Can platform teams standardize the shell without owning the business?

“Compliance evidence is useful when it names the same boundary the runtime actually executes.”

Can security review the flow without reading every service?

“Autonomy works when teams can move locally and coordinate only where the contract is genuinely shared.”

Does the platform become a bottleneck?

“A clear Java-first boundary is more useful than a vague promise of language neutrality.”

Is Java now part of the architecture contract?

“A framework is useful when it removes the complexity you already have, not when it introduces a more impressive kind.”

Is TPF too much framework for a small startup?

“The useful restriction is the one that removes accidental choice without erasing business choice.”

Is it too restrictive for an enterprise?

“An escape hatch is healthy when it remains a boundary, not when it becomes the building.”

What is the escape hatch when the model is wrong?

“Shared code becomes a product the moment another team depends on its promise.”

Who owns a shared pipeline without owning every team?

“A framework remains simple only when it continues to delete more accidental complexity than it introduces.”

Will this remain simpler than the architecture it replaces?