Agents generate code in seconds, so investing in code quality looks obsolete. My daily work with agents shows the opposite. Every session starts by reading the existing code, and its quality decides how productive the session is. Agents amplify the local style. LLMs match the surrounding code. Clear conventions get reproduced, and so does degradation: in a codebase full of Manager s and Impl s,…
The 2026.08 / 149th edition of airhacks.tv with the following topics: "Spring Gateway vs nginx vs cloud API gateways: nginx and HAProxy as proxies, cloud gateways transforming HTTP into CloudEvents, authentication, JWTs and content-based routing, BCE as the show's most used term, BCE namespaces from domain ideas, BCE applied to static pages where folders are menu items and cards are feature…
BCE: Who May Call Whom
The most asked BCE question is not what the layers mean, but which dependencies are allowed. Inside a business component the dependencies point downwards. boundary to control, control to entity. The boundary offers coarse grained, easy to use methods, the control finer grained, reusable ones, the entity holds the data, as a smart domain object or an anemic record. boundary to entity, directly. A…
BCE/ECB for Static Pages, HTML as DB, Platform Sufficiency for Agents--Questions for the 149th airhacks.tv
Questions and topics for the 2026.08/149th edition of airhacks.tv : BCE/ECB (Boundary-Control-Entity) for ...with static, semantic pages floci.io AWS cloud emulator "the role of the platform in LLM-assisted development" by Ondro at LinkedIn announcement: htmldb Free course: BCE: The Screaming Architecture For Humans and LLMs 👉 airhacks.io New AWS-CDK and web-platform skills 👉 airails.dev One…
Smalltalk, Blocks, and the Origins of Eclipse Collections--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #409 airhacks.fm episode with Donald Raab about: the path from the Epson HX-20, dBASE, Clipper and Smalltalk to the origins of Eclipse Collections and Java lambdas is available for download.
With LLMs Web Frameworks Become Irrelevant
Web frameworks solve human problems. Readable abstractions, conventions a team can share, a line on a CV that outlasts the project. All of it is about people, and all of it assumes a human types the code and another human reads it. An agent has no career to build, and gets nothing from an abstraction whose purpose is to be read. Consistency across a codebase comes from the skill the agent follows,…
Agents Love The Web Platform's Backward Compatibility
Without further instructions, an agent writes web code from everything it saw during training: tutorials, framework docs, Stack Overflow answers, blog posts from 2014. The output mixes all of it. Restricting the grounding to normative Web Platform specifications (HTML, DOM, CSS, ECMAScript, ARIA) removes the mix. The Web Platform is unusual as a corpus, because it hardly contradicts itself. A DOM…
A 5.4 kB AWS Bedrock AgentCore Agent in Vanilla Java
An agent running on the AWS Bedrock AgentCore Runtime has to implement a minimal HTTP contract: POST /invocations answers requests, GET /ping reports health, both on port 8080. The JDK's built-in jdk.httpserver is sufficient. The AWS Java Agent Core Runtime CDK quickstarter project implements the contract in vanilla Java 25 with zero external dependencies. The complete contract is implemented in a…
From Java Advent to Legionella: Standards, Specs, and LLMs--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #408 airhacks.fm episode with Olimpiu Pop ( Olimpiu Pop ) about: Enterprise Java LLM inference, grounding LLMs against normative Java and Jakarta EE specifications, using API and SPI separation and a Boundary Control Entity structure to generate "hallucination-free" code that scales to large projects. is available for download.
AWS CDK Infrastructure as Business Components (BCE/ECB) with the /aws-cdk Skill
The /aws-cdk skill generates and reviews Java AWS CDK v2 projects organized as BCE (Boundary-Control-Entity) business components. Infrastructure code follows the same structure as a business application instead of accumulating as a flat list of resources. It ships as an AIrails skill: /aws-cdk . The main tenet is the separation of stacks from constructs. A stack decides which resources deploy…
<h2>How to Name Business Components (BC): The Essence Method</h2>
A business component is a package named after a single responsibility, and the structure of a system is the sum of these components. The hard part is finding the names. Here is the simplest approach I know, three steps. Say it. Describe what the system does in one sentence, in one breath. Name it. Underline the essential verbs and nouns. Those are your component candidates, and verbs become nouns.…
One Zip Installs airails.dev Skills in Any Agent
The airails.dev skills ship as a single "Any agent" bundle: a zip that contains a skills/ folder. Installing it is two steps. Download the bundle. Unzip it into your agent's config directory. curl -LO https://github.com/AdamBien/airails/releases/download/skills/airails-skills.zip unzip airails-skills.zip -d ~/.claude # Claude Code unzip airails-skills.zip -d ~/.copilot # GitHub Copilot CLI unzip…
Inside a Business Component (BC): Boundary, Control, Entity (BCE)
A business component (BC) is a package named after a single responsibility. Inside are up to to three sub-packages, always the same three names: boundary : the public API of the component. Coarse-grained, simple, opinionated. control : fine-grained, generic functions and methods. entity : the data. Boundary, control, entity is the maximum, not a requirement. A component takes only the layers its…
The Top-Level Organization Unit: Business Component (BC)
A business component is a top-level package named after a single responsibility or feature, not after a technology. discovery , compiler , checkout , invoicing : reading the package names tells you what the system does. That is Screaming Architecture . The structure of a system is the sum of its business components. Business components are not designed up front. They are created on the go: every…
From CloudEvents to Domain Events--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #407 airhacks.fm episode with Johan Haleby ( @johanhaleby ) about: Occurrent library, event sourcing, CloudEvents, the distinction between domain and integration events, CQRS versus CQS, and modelling domain logic with sealed interfaces and records in Java. is available for download.
Need For Iteration Speed
I noticed that coding agents reach for Quarkus developer mode by default. They start quarkus:dev and keep it running. An agent edits, then it has to observe the result before deciding the next move: compile error, test verdict, endpoint response. Live reload on the next request. The agent edits a resource. The system tests, running on a second Quarkus in Dev Mode, hit the live-reloaded endpoint…
Screaming Architecture with BCE / ECB
The structure of a system should reveal its purpose. Robert C. Martin coined the term Screaming Architecture for this idea roughly 15 years ago. In the first episode of my BCE screencast course, I put it to the test: can you tell what a project does by reading its top-level package names? Production sources only, no tests. zb : compiler, hook, packer zb stands for zero dependency builder. It…
Why Coverage Metrics Fail and System Tests Win--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #406 airhacks.fm episode with Stanislav Bashkyrtsev ( @sbashkirtsev ) about: Testing terminology, avoiding mocks, mutation testing, Quarkus on AWS Lambda, generating JSON in PostgreSQL, GraalVM in the Oracle Database, and event-driven CI/CD pipelines with AWS CDK. is available for download.
zbaseline: The Web Platform Snapshot Fetcher
zbaseline is a zero-dependency Java 25 CLI that fetches the complete web platform feature set (currently ~1,171 features) from the webstatus.dev API and renders it into a single markdown snapshot with the Google Baseline status of every CSS, HTML and JavaScript feature. The snapshot, written to stdout, is one markdown table sorted by feature id: Feature id , Name , Status (widely / newly /…
zws: Live Reload and SPA Routing in a Single Java 25+ File
zws is a development web server in a single Java 25 source file on top of the built-in jdk.httpserver . It serves static files from a directory, sends no-cache headers, and opens the browser. Java 25 is the only prerequisite: curl -O https://raw.githubusercontent.com/AdamBien/zws/main/zws chmod +x zws ./zws [root-directory] --live --single Without root-directory , zws serves the current directory.…
zdmd: From DESIGN.md to Web Standards
DESIGN.md stores a design system as YAML token blocks inside a markdown file. Agents and developers can read, review, and diff it like any other document. zdmd is a Java port of the reference TypeScript CLI: a zero-dependency Java 25 application packaged as a single executable JAR. It lints, diffs, and exports DESIGN.md token files. One JAR replaces node_modules for anyone working with design…
Buildless Web Components BCE/ECB Quickstarter
The bce.design quickstarter lost its entire build system: Node.js, npm, rollup, lockfiles. 777 lines deleted. The toolchain existed for one reason: Redux Toolkit. It ships with transitive dependencies (immer, redux, reselect), so a bundler had to flatten it into a browser-loadable module. Then Redux Toolkit got replaced with reduction.js , a 70-line, standards-based implementation of the used API,…
BCE/ECB in the Browser
A Package per Feature and Semantics over Bureaucracy showed BCE in a Java CLI application and claimed the convention is cross-technology. Proof: an events application built with web components and lit-html on plain web standards. No framework, no build; the store is reduction.js , 77 lines on structuredClone , and lit-html is the only runtime dependency. The src directory is a list of BCs: src ├──…
Zero-Dependency Java 25, Event Sourcing, and Stabilizing Legacy Systems--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #405 airhacks.fm episode with Tomasz Ptak ( /in/tomasz-ptak ) about: A conversation on zero-dependency Java 25 automation, event sourcing with the Axon Framework, and stabilizing legacy Java systems, spanning a career path from Motorola Solutions to the AWS AI community. is available for download.
BCE/ECB: Semantics over Bureaucracy
A Package per Feature made the case for the Business Component (BC): one package per responsibility. Inside a BC the next question appears immediately: where does a class go? In most projects that question spawns bureaucracy: naming debates, layout documents, style-guide meetings. BCE answers it once, with three fixed packages. The generation BC from lightmetal : lm.generation ├── boundary │ ├──…
A Package per Feature
A feature request never arrives as "change all DTOs", it arrives as "implement support for NVIDIA Nemotron". Such a requirement lands in one main responsibility, with minor adjustments rippling into a few neighboring ones. Code organized by responsibility makes this visible: the package names tell you where the work happens and what gets touched as collateral. This is the idea behind the Business…
BCE/ECB for Static, Semantic Web
TLDR: a static site splits into business components (BCs), each a directory exposing an index.html built with semantic markup and web standards only. The BCE pattern is usually explained with Java: JAX-RS resources as boundaries, stateless logic as controls, Records or JPA entities. A static website has no code at all, and the mapping still works. A static site built using only semantic HTML and…
148th airhacks tv: Spec-Driven Development, BCE in Large Projects, Lightmetal, Agents, Java Scripting
The 2026.07 / 148th edition of airhacks.tv with the following topics: Spec-Driven Development (SDD) on top of the Boundary Control Entity (BCE) pattern why decades-old, well-documented BCE (traced to Objectory, 1992) lets LLMs generate lean, idiomatic code SBCE as a single ~180-line text-file skill with "new" and "apply" actions, no CLI, no binary dependencies the spec is "done" when all tests are…
Spec-Driven BCE with LLMs, Large Projects, JMarkDoc, LightMetal, VSCode--Questions for the 148th airhacks.tv
Questions and topics for the 2026.07/148th edition of airhacks.tv : airhacks.tv became a YouTube show Spec-Driven ("space" SBCE ) BCE Demo VS Code Java tooling issues JMarkDoc announcement LightMetal and zsmith news BCE for ...static pages Time machine: 100 episodes back ( 48th episode ): JSON-B serialisation and deserialization, Automating Jenkins CI with Groovy, light4j, embedded SQL, CQRS…
From CloudFormation to CDK with Java - airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #404 airhacks.fm episode with Thorsten Hoeger ( @hoegertn ) about: discussion about CloudFormation as underlying Infrastructure as Code (IaC) using JSON/YAML to define desired state, CDK introduction as tool to define infrastructure using programming languages like Java that synthesizes to CloudFormation is accessible at: download.
SBCE: The Spec-Driven Boundary Control Entity
SBCE (say "space"), short for Spec-Driven BCE, is a workflow: every capability is declared as a single spec, and the spec is the boundary contract ( package-info.java or package-info.md for Web Components) of exactly one Boundary-Control-Entity business component (e.g. one Java package) with the same name. It ships as a AIrails skill: /sbce . No CLI, no dependencies. BCE (skill: /bce ) sets the…
jmarkdoc: The Java Markdown Doc(let)
jmarkdoc is a JavaDoc doclet that generates Markdown API documentation from Java sources and comments, ready for RAG pipelines, developer portals, and AI agents. In Spec-Driven BCE: SBCE (say "space"), jmarkdoc generates the Markdown capability specs from package-info.java files, keeping the spec and the code in a single source. It requires Java 25, relies only on the jdk.javadoc and jdk.compiler…
Architectural Trade-offs: Pendulum Swings, Outsourcing Cycles and System Design -- airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #403 airhacks.fm episode with Daniel Tehorst North ( @DanielNorth ) about: discussion about pendulum swings in technology decisions, Kaikaku and Kaizen cycles, the Purpose Alignment Model for business criticality vs differentiation, historical outsourcing/insourcing patterns, evolution of Java from J2EE criticism to modern simplicity, LLMs…
SBCE: Your Spec Belongs In package-info.java
SBCE is live at sbce.space (you say "space"). It is spec-driven development loop built on bce.design : the spec lives in your code, not in a markdown folder beside it. Usually spec tools maintain the spec / Markdown files in a separate source tree. SBCE keeps it in the boundary package's own doc: /// # Checkout /// > Accept a cart and turn it into a confirmed, cancellable order. /// /// ##…
From WebSphere to Quarkus: The Evolution of Java Classloading--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #402 airhacks.fm episode with Holly Cummins ( @holly_cummins ) about: The move from application server classloader hierarchies to the flat Quarkus classloader, fast-jar and Project Leyden AOT, dev mode hot reload, and Dev Services. is available for download.
Split-Brain, ContainerD, Quarkus and a Postgres Cloud Control Plane--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #401 airhacks.fm episode with Alvaro Hernandez ( @ahachete ) about: A Postgres cloud control plane built with Quarkus and ContainerD that runs self-hosted databases anywhere, with or without Kubernetes. is available for download.
147th airhacks tv: Local LLMs, LightMetal, ZSmith Agents, AI Rails, Saving Tokens
The 2026.06 / 147th edition of airhacks.tv with the following topics: "Reflection and annotations: less needed at runtime as infrastructure becomes less dynamic, but annotations still valuable for type-safe metadata that LLMs can consume, AI token maxing and code quality: degraded LLM performance on chaotic codebases versus well-structured J2EE applications, building a career in Java with focus on…
146th airhacks tv: Rust, Java 25, AI Agents, BCE, Web Components, zunit, zb
2026.06, the 146th airhacks.tv episode is available: Two Time Machines: Revisiting the 45th Episode After 9 Years, Java 25 Scripting With Zero Dependencies, Java vs. Kotlin in 2025, Web Components and Standards Without Frameworks, Multiple Datasources With Different Permissions for AI Agents, Connection Pools and JPA Cache in Serverless Environments, Why XA Transactions Are a Bad Idea, JavaFX…
lightmetal: GPU LLM Inference From a Single Java 25 JAR
GPU LLM inference on Apple Silicon, packaged as one Java 25 executable JAR, zero dependencies. lightmetal binds a Metal-enabled libllama.dylib through the Foreign Function & Memory API and runs Mistral- and Gemma-architecture GGUF models locally. Build it with zb , point it at a GGUF, prompt it: zb build java --enable-native-access=ALL-UNNAMED -jar zbo/lightmetal.jar \ -model…
Reflection in Java 25, Java vs. AI Careers, jfrdoc on zSmith, airails.dev Refactoring--Questions and Topics for the 147th airhacks.tv
Questions and topics for the 2026.07/147th edition of airhacks.tv : In the Java 25 / JUnit 5 era, is reflection obsolete, or only for designing libraries/APIs rather than your own code? (Simon Richter) Should I continue building my career in Java, or move toward AI given the current market and MNC layoffs? (Fanib) jfrdoc on zSmith (Rıdvan) airails.dev refactoring (java-conventions) Time machine:…
JAZ, Copilot SDK, and Why LLMs Write Better Java--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #400 airhacks.fm episode with Bruno Borges ( @brunoborges ) about: JVM tuning for containers with JAZ, building agentic systems with the Copilot SDK and the Microsoft Agent Framework, and grounding LLMs against Java specifications for hallucination-free code generation. is available for download.
Summer of 26: Events, Conferences and Workshops
Devoxx Poland 2026: Token-Efficient, Well-Crafted Java #livecoding conference talk Devoxx Poland 2026 Krakow, Poland 18 June 2026 https://devoxx.pl/talk?id=15451 VibeKode Conference: How To Write Great Code with LLMs #vibeless conference talk VibeKode Conference Munich, Germany 24 June 2026 https://vibekode.it/speaker/adam-bien/ Spec-Driven Java Development at LLM Speed [online event] online…
GlassFish, Corretto, Apple openJDK and Why Standards Beat Hype--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #399 airhacks.fm episode with Arun Gupta ( @arungupta ) about: RMI/CORBA, J2EE, GlassFish, Sun Grid, Amazon Corretto, the Apple openJDK, JetBrains and how normative Java specifications enable reliable LLM code generation is available for download.
From CDI TCK to Quarkus MCP Server--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #398 airhacks.fm episode with Martin Kouba ( @martunek ) about: From CDI TCK, specifications and Weld to ArC and the MCP server in Quarkus is available for download.
Finding Patterns: From Middleware to Modern AI--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #397 airhacks.fm episode with Prof. Dr. Michael Stal /in/drstal about: discovering patterns in middleware, writing the POSA book, Java adoption at Siemens, and the limits of LLMs and AGI is available for download.
Migrating Ruby Monoliths to Java, Agentic AI Foundation and MCP-airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #395 airhacks.fm episode with Manik Surtani ( @maniksurtani ) about: From JBoss Cache and Infinispan to migrating Ruby on Rails monoliths to Java microservices at Square, co-designing MCP with Anthropic, building the Goose coding agent, and founding the Agentic AI Foundation is available for download.
Java projects are still plagued by outdated habits: excessive layers, unnecessary abstractions, more YAML/XML than code, tests for obvious things like getters, "Stats and Ticket-d riven Development" and systems where everything is configurable but nothing varies, leaving business logic buried under unnecessary complexity. It’s time to focus on code again. This session will demonstrate how modern…
From Manchester to Mountain View: Binary Translators, JVMs, and Android--airhacks.fm podcast
Subscribe to airhacks.fm podcast via: spotify | iTunes The #396 airhacks.fm episode with Ian Rogers about: Binary translators, JVMs, and the Android Runtime, traced from a ZX Spectrum in Manchester to Linux kernel performance work at Google. is available for download.
Rust, SSE, WebSockets, BCE, JPA History, LLMs-Questions and Topics for the 146th airhacks.tv
Questions and topics for the 2026.05/1416h edition of airhacks.tv : Opinion about the Rust programming language (asked by @Pscheidl on LinkedIn) Time machine: the 46th airhacks.tv from January 2018 Application metrics and monitoring in Java EE, ServerSockets vs higher-level alternatives, SSE, WebSockets, DAO anti-patterns, JPA historisation, SLSB tuning, Docker, Kubernetes, OpenShift and more Time…
Java vs. C++, Angular and AI, BCE, Multi-Tenant Monoliths-Questions and Topics for the 141st airhacks.tv
Questions and topics for the 2025.12/141th edition of airhacks.tv : Java vs. C++ performance Angular with or without AI Web development trends and opinions Testing business logic with external dependencies BCE - where to put DTOs How to build a multi-tenant monolith Time machine: 100 episodes back (41st episode): "React over Angular? ...and WebStandards, JSR-375 and REST, Reactive Programming vs.…