Serverful
Traditional server-based deployment with full control over infrastructure using virtual machines, containers, or bare metal servers for predictable performance.
- VMs & containers
- Bare metal servers
- Virtual Threads
Focus on building understandable applications with a strong emphasis on domain logic — the BCE pattern, also known as Entity Control Boundary (ECB)
The Boundary-Control-Entity (BCE) pattern, also known as Entity-Control-Boundary (ECB), is a software architecture pattern that organizes code into Business Components. A Business Component is a package or namespace comprising three distinct layers, each with specific responsibilities. Business components adhere to the principles of maximal cohesion and minimal coupling, and are named after their domain responsibilities.
Business components are self-contained modules (also packages or directories) named after their domain responsibilities,promoting maximal cohesion within the component and minimal coupling between components. Each component is organized the same way, comprising boundary, control and entity layers.
Example business component names for a retail shop: checkout, catalog, cart, inventory, pricing, orders, fulfillment, returns, loyalty, customers, notifications, reviews, promotions.
Components are named after their business responsibility, not technical concerns
Related functionality stays together within a single business component
You know when you need it. Make use of existing functionality before reaching out to external resources.
The elements within a given component are more closely related to each other than they are to the elements in other components.
BCE icons and symbols are available in all major design and drawing tools for consistent architectural documentation
The boundary layer serves as the entry point for external actors (users, other systems, schedulers, message brokers, ...), providing appropriate interfaces (REST APIs, GraphQL endpoints, message handlers, Lambda function handlers, web components / custom elements, etc.) depending on the actor type.
The orchestration layer containing business logic
The domain model layer representing core business concepts
Communication patterns between BCE layers follow a strict dependency rule to maintain architectural integrity
Direct interactions can only flow in the B → C → E direction
The opposite direction (E → C → B) is only allowed through events
The straightforward structure reflects business concepts. The names of the components and elements are taken directly from the domain concepts.
Changes are localized to specific layers
Exposed boundaries are tested using system tests/e2e tests, plain facades using integration tests, and sufficiently complex controls or entities using unit tests.
'No-ceremony' business logic sharing between components.
BCE gives a code-generating agent a small, fixed vocabulary of places and a short list of settled decisions, which pays off from orientation to review.
The path [organization].[project].[bc].[boundary|control|entity]
follows from a component's responsibility, so an agent never invents
structure and different sessions or agents produce the same layout.
A business component owns one responsibility and typically fits in a single context window, so an agent loads one package instead of the whole tree and keeps the rest of the window for the task. Inside the package, the downward- only dependency rule tells it which layers it can ignore.
No interfaces until a second implementation exists, stateless controls, entities that carry behavior, cross-cutting concerns only in the boundary. Each decision made in advance is one fewer place where the model can drift or improvise.
An agent spends no tool calls on directory walks or searches to find where things live. The defaults above remove whole files per capability: no interface, no implementation class, no mapper to read or generate. Responsibility-based names carry more meaning per token, since a class name states what it does and where traffic enters. And the rule set itself is a few dozen lines, cheap enough to ride along in every prompt.
Dependencies point down, layer names appear only inside a component, and
generic suffixes such as Impl, Service, and
Manager are banned, so compliance is checked with grep-level
effort and violations are findings, not opinions.
The boundary is the only entry point for UI, protocols, and system tests, so an agent has exactly one surface to keep stable and exactly one place to test against.
A change to one capability usually touches one package, so generated diffs stay reviewable and the impact of a mistake is visible from the file list alone. The same isolation lets several agents work on different components at once: their diffs rarely overlap, and they only need to agree on the boundaries between them.
The pattern rules are technology-neutral. Stack-specific skills for Java servers, CLIs, web components, and CDK infrastructure specialize them without contradicting them, so an agent's architectural knowledge carries across projects.
The spec-driven sbce workflow builds on these rules: one capability spec maps to one business component of the same name, the boundary is the contract, and "done" is a green test run against it rather than the model's self- assessment. Agent conventions and skills built on BCE are at airails.dev.
Complementary architectural styles that can be combined with BCE pattern: