<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/adam-bien-s-blog-nfbf73gej" -->

---
title: adam bien&#x27;s blog | daily.dev
description: A structured approach to organizing AWS CDK v2 projects using the BCE (Boundary-Control-Entity) pattern, implemented in Java. The pattern separates stacks...
canonical: https://daily.dev/posts/adam-bien-s-blog-nfbf73gej
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: adam bien&#x27;s blog | daily.dev
og:description: A structured approach to organizing AWS CDK v2 projects using the BCE (Boundary-Control-Entity) pattern, implemented in Java. The pattern separates stacks...
og:url: https://daily.dev/posts/adam-bien-s-blog-nfbf73gej
og:image: https://api.daily.dev/og/posts/NfBf73Gej.png
og:image:alt: adam bien&#x27;s blog
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# adam bien's blog

**[Jakarta EE](https://daily.dev/sources/jakartaee)** · 2 min read · 0 upvotes · 0 comments

## Summary

A structured approach to organizing AWS CDK v2 projects using the BCE (Boundary-Control-Entity) pattern, implemented in Java. The pattern separates stacks (boundary), reusable constructs (control), and immutable data objects (entity). Key principles include: packages named after AWS capabilities, a single CDKApp entry point using typed Java records, pinned regions via a central interface, stack independence via resource interfaces rather than stack references, least-privilege IAM via grant* methods, and deterministic synthesis. The approach ships as an AIrails skill (/aws-cdk) and includes a starter project and example constructs.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://adambien.blog/roller/abien/entry/aws_cdk_infrastructure_as_business_components_bce_ecb_with_the_aws_cdk_skill>

## Questions this post answers

### How should I structure AWS CDK Java projects to avoid a flat list of infrastructure resources?

Organize the project using the BCE (Boundary-Control-Entity) pattern: put stacks, which decide which resources deploy together, in a boundary package; put constructs, which are reusable stateless factories (preferably interfaces with static methods) defining how a capability is configured, in a control package; and put immutable configuration data like build specs and typed value objects in an entity package. Packages are named after the AWS capability they provision, such as s3 or cloudfront.

_Teams standardizing CDK project layout can find structured guidance like this through daily.dev._

### How do I pass resources between independent AWS CDK stacks without coupling them?

A producing stack should pass resource interfaces, such as IBucket or ITable, to consuming stacks rather than passing entire stack instances. This keeps stacks independent, avoids shared mutable state between them, and lets each stack be tested or deployed separately while still wiring dependencies at the app entry point in dependency order.

_Developers designing decoupled CDK stacks can track patterns like this on daily.dev._

## Similar posts on daily.dev

- [From Java EE to Quarkus and LLMs: Adam Bien’s Playbook for Boring, Future‑Proof Systems](https://daily.dev/posts/from-java-ee-to-quarkus-and-llms-adam-bien-s-playbook-for-boring-future-proof-systems-0metu7xbn) · InfoQ · 16 upvotes · 0 comments

---

Tags: [#aws](https://daily.dev/tags/aws), [#java](https://daily.dev/tags/java), [#iac](https://daily.dev/tags/iac)

[View this post on daily.dev](https://daily.dev/posts/adam-bien-s-blog-nfbf73gej)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"adam bien's blog","url":"https://daily.dev/posts/adam-bien-s-blog-nfbf73gej","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/adam-bien-s-blog-nfbf73gej"},"datePublished":"2026-08-02T06:42:57.029Z","dateModified":"2026-09-13T20:43:51.722Z","description":"A structured approach to organizing AWS CDK v2 projects using the BCE (Boundary-Control-Entity) pattern, implemented in Java. The pattern separates stacks...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d365e8cabb5d95ba36aaa092c23f211d?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d365e8cabb5d95ba36aaa092c23f211d?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Jakarta EE","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Jakarta EE","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/5ef0720bb0684fa3ab12b4d4634f8028","url":"https://daily.dev/sources/jakartaee"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/adam-bien-s-blog-nfbf73gej","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"aws,java,iac","timeRequired":"PT2M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Jakarta EE","item":"https://daily.dev/sources/jakartaee"},{"@type":"ListItem","position":3,"name":"adam bien's blog"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/adam-bien-s-blog-nfbf73gej#faq","mainEntity":[{"@type":"Question","name":"How should I structure AWS CDK Java projects to avoid a flat list of infrastructure resources?","acceptedAnswer":{"@type":"Answer","text":"Organize the project using the BCE (Boundary-Control-Entity) pattern: put stacks, which decide which resources deploy together, in a boundary package; put constructs, which are reusable stateless factories (preferably interfaces with static methods) defining how a capability is configured, in a control package; and put immutable configuration data like build specs and typed value objects in an entity package. Packages are named after the AWS capability they provision, such as s3 or cloudfront. Teams standardizing CDK project layout can find structured guidance like this through daily.dev."}},{"@type":"Question","name":"How do I pass resources between independent AWS CDK stacks without coupling them?","acceptedAnswer":{"@type":"Answer","text":"A producing stack should pass resource interfaces, such as IBucket or ITable, to consuming stacks rather than passing entire stack instances. This keeps stacks independent, avoids shared mutable state between them, and lets each stack be tested or deployed separately while still wiring dependencies at the app entry point in dependency order. Developers designing decoupled CDK stacks can track patterns like this on daily.dev."}}]}
```

