Design Pattern Development with AI
About Course
See the patterns in your problems and learn to emerge designs as requirements change. Build a shared vocabulary with teammates and AI, compare design tradeoffs, and discover how to create flexible, testable software without adding complexity before you need it.
A NEW WAY TO SEE SOFTWARE
Patterns changed how I see software. They helped me look past the details of an implementation and recognize the intent behind it: what is varying, what needs to stay consistent, and what we can encapsulate to make a problem easier to work with.
They also gave me a language for sharing that understanding. A conversation that once required tracing through many lines of code could begin with a few words about a familiar pattern. Those words opened a deeper discussion about the problem, the alternatives, and the reasons for a design.
I love sharing that discovery with other developers. In Design Pattern Development with AI, we’ll explore patterns as ways to understand problems and communicate design intent. We’ll look at the forces that make a pattern useful and the tradeoffs that tell us when another approach would serve us better.
AI gives us another partner in these conversations. We can use a shared pattern vocabulary to explore alternatives, examine a design, and discuss how a new requirement might affect it. Understanding the pattern’s intent helps us evaluate what AI proposes and decide how much flexibility the software actually needs.
WHAT THIS CAN CHANGE FOR YOUR TEAM
As a developer, you don’t have to predict the final design before you begin. We’ll explore how to start with a simple implementation, learn from a few concrete examples, and refactor toward a pattern when the need becomes clear. Encapsulating construction and separating responsibilities give us ways to accommodate change without making every caller change with us.
If you’re investing in your team’s development, this shared vocabulary makes design reasoning more visible. Developers can explain what a design accommodates, where a change would be difficult, and why a proposed abstraction earns its place. The aim is thoughtful flexibility, less avoidable technical debt, and fewer elaborate solutions to requirements that haven’t arrived.
A question I return to throughout the course is, “What is this design open-closed to?” Where can we extend behavior, and where would we need to modify existing code? Asking that question makes the benefits and limits of a design concrete.
WHAT WE EXPLORE
Software Patterns and AI
We’ll explore how patterns express intent and resolve recurring forces in a problem. You’ll learn to recognize patterns by what they encapsulate and use that understanding to communicate with teammates and AI. We’ll examine why knowing a pattern’s name is only the beginning of understanding when to use it.
Encapsulating Behavior
What happens when behaviors vary independently, or when parts of an algorithm stay the same? We’ll compare approaches including Strategy and Template Method, examining their strengths, limits, and testability. We’ll use changing requirements to explore when to keep a design and when to refactor toward another one.
Encapsulating Foreignness
We’ll explore how Adapter and related approaches help us work with external systems without spreading their details throughout our code. Clear boundaries let us reason about our own responsibilities, substitute dependencies for tests, and discuss integration choices with AI.
Design Exercise
You’ll work with other explorers and AI to develop a design and capture it in a diagram. At specific checkpoints, you’ll ask AI to examine assumptions, discuss tradeoffs, and help you explain the design. A new requirement and a team reorganization give you an opportunity to hand off your reasoning, learn another perspective, and adapt the solution.
Design Debrief
I’ll walk us through common designs and the forces that make each appropriate. We’ll compare their extension points, dependencies, and limitations, including whether their behaviors can be tested independently. We’ll also examine how a design can move from one approach to another as the problem changes.
Encapsulating Construction
We’ll explore how creation patterns keep decisions about which objects to build separate from the code that uses them. Encapsulating construction—including behind a static creation method—can let an implementation evolve while callers continue to use a stable interface. We’ll connect those techniques to the freedom to discover a design incrementally.
Encapsulating Sequence and Cardinality
Sometimes the variation is in how many behaviors we need, how we combine them, or the order in which they run. We’ll explore Decorator, Chain of Responsibility, and practical combinations of patterns. We’ll discuss where selection rules belong and what changes when we assemble the needed behaviors in advance or let each behavior decide whether to act.
Emergent Design
We’ll bring the ideas together through commonality-variability analysis, concrete examples, and refactoring. You’ll see how tests can protect behavior while a design changes and how a second or third example can reveal an abstraction that was hard to see at the start. We’ll finish by discussing how to turn these techniques into a continuing development practice with AI.
THE LEARNING EXPERIENCE
I teach patterns through examples, diagrams, questions, and conversations about change. We’ll look at designs from several perspectives and ask what each one makes easier—and what it makes harder.
The collaborative design exercise gives you time to use that language with other explorers and AI. You’ll make your reasoning visible, explain it to new teammates, and revisit it when a requirement changes. The diagrams and debrief give us something concrete to discuss together.
Bring your experience of designs that became difficult to change. Often, recognizing what is varying gives us a new way to understand the difficulty and a simpler way forward.
WHO IT’S FOR
This course is for software developers who want a deeper understanding of design patterns and how to emerge designs while working with AI. Developers serving as technical leads or architects will find ways to make design conversations clearer and help their teams evaluate alternatives without anticipating every possible change.
FORMAT AND MATERIALS
Eight hours of live online instruction, including discussion, a collaborative design exercise, its debrief, and breaks. Delivered over at least two sessions so explorers can develop a design in the first session and revisit it in the next.
Take it as a standalone private team course or as the final two sessions of the AI Developer Essentials curriculum. You’ll receive a PDF of the course slides and exercise debrief, with substantive examples, diagrams, and AI micro-habits for continued reference. Extended coding labs are a separate, optional offering under development.
YOUR INSTRUCTOR
I’m David Scott Bernstein, author of Beyond Legacy Code and founder of The Passionate Programmer and To Be Agile. I’ve trained more than 10,000 professional developers in Extreme Programming, software design, test-first development, and writing changeable code.
My understanding of patterns deepened while working with Al Shalloway and Scott Bain at Net Objectives and teaching patterns to teams at Microsoft, Vanguard, and other organizations. Patterns became a doorway into a way of thinking that I still enjoy exploring. I’m excited to share how that understanding can enrich our collaboration with AI.
LET’S TALK ABOUT YOUR TEAM
If you’d like your developers to have richer design conversations and more confidence adapting software as requirements change, I’d enjoy hearing about your team. We can explore whether this course or the full AI Developer Essentials curriculum would be useful for you.
Schedule a conversation with me: https://passprog.com/schedule-a-call/
What Will You Learn?
- • Recognize design patterns through their intent, the forces they address, and the variations they encapsulate.
- • Use a shared pattern vocabulary to explain complex designs to teammates and AI.
- • Compare Strategy, Template Method, and other approaches in terms of flexibility, coupling, and testability.
- • Explain what a design is open-closed to and where new requirements would require modification.
- • Encapsulate external dependencies and construction decisions behind clear interfaces.
- • Reason about sequence, cardinality, and selection rules using Decorator, Chain of Responsibility, and combinations of patterns.
- • Use commonality-variability analysis and concrete examples to discover useful abstractions.
- • Refactor toward patterns as requirements justify them while preserving tested behavior.
- • Capture a design in a diagram, explain its reasoning, and adapt it collaboratively with people and AI.
