Developing Software with AI

About Course

When AI can generate code in seconds, knowing what good code looks like becomes even more valuable. Learn to guide development with clear principles, testable domain models, and practical code qualities—so your team can understand what it builds and change it with confidence.

THE SATISFACTION OF CODE THAT MAKES SENSE

There’s a moment in development I never tire of: a business rule finds a clear home, a difficult dependency becomes easy to substitute, or a small refactoring makes the code easier to explain. The software may do exactly what it did before, but working with it feels different. We can see where things belong and how to take the next step.

That’s the kind of understanding I want to share in Developing Software with AI. When we recognize the qualities that make code easier to work with, we can discuss them with teammates and AI. We have a reason to accept a suggestion, ask for a simpler solution, or examine a responsibility more closely.

We’ll connect principles, development practices, code quality, and testing through a common thread: a domain model that gives business rules a visible, testable home. From there, we’ll explore how to connect the model to databases, services, and other external systems without scattering those rules throughout the application.

These are key skills for developing software with AI. They help us guide implementation, understand the code that matters, and keep improving the software as we learn. Quality becomes something we can discuss and build into each increment.

WHAT THIS CAN CHANGE FOR YOUR TEAM

As a developer, you’ll gain ways to look beyond whether the code runs. Can you find the rule that controls a behavior? Can you test it without starting a database or building an elaborate test setup? Can you explain why a responsibility belongs in this object? Those questions help you direct AI and focus your attention where it is most valuable.

If you’re investing in your team’s development, a shared language for quality makes technical decisions easier to discuss. Developers can identify the coupling or duplication that makes a change difficult, explain the consequences, and consider a focused improvement. The aim is less avoidable rework and technical debt, with business rules that remain accessible as the system grows.

AI can help us inspect code, suggest alternatives, and generate tests. We’ll use principles and observable behavior to examine those suggestions, keeping development at the speed of understanding.

WHAT WE EXPLORE

Principles and Perspectives
Why does one design make a change straightforward while another makes it risky? We’ll explore principles that help us reason about responsibilities, dependencies, and variation. You’ll learn ways to discuss design tradeoffs with people and AI, grounded in the problem you’re solving.

AI Development Essentials
We’ll explore how to build and validate a domain model, first as a class diagram and then as code with behavioral tests. Entities encapsulate their responsibilities, and business rules stay separate from infrastructure. We’ll connect separation of concerns, encapsulation, and assertiveness to a model that can be tested in isolation and extended as requirements evolve.

CREATE Code Quality
What makes code easier to understand, test, and change? We’ll examine the CREATE code qualities through examples and use them to evaluate implementation choices. You’ll see how to give AI specific feedback about code quality and improve a solution incrementally without adding complexity for changes that haven’t been requested.

Testing Techniques with AI
We’ll explore dependency injection, fakes, hand-crafted mocks, and shunts, including when a small test double can make an interaction clear without a mocking framework. We’ll keep most business-rule tests close to the domain model and use interfaces at its edges to check how our code collaborates with external dependencies. We’ll also consider what those tests establish, what they leave unverified, and when additional testing is useful.

THE LEARNING EXPERIENCE

I teach through examples, diagrams, questions, and conversation. We’ll examine code and models together, discuss why a design is easy or difficult to work with, and use brief AI-assisted exercises to explore alternatives.

Bring the parts of software development that have been frustrating you. Sometimes a useful discovery begins with a simple question: “Why is this so hard to test?” We’ll look for the responsibilities and dependencies behind that difficulty and discuss what a smaller, clearer solution might look like.

WHO IT’S FOR

This course is for software developers who want to guide AI with a stronger understanding of software quality and design. Developers serving as technical leads or architects will find ways to make quality discussions more concrete and help their teams evaluate implementation choices together.

FORMAT AND MATERIALS

Four hours of live online instruction, including discussion, brief exercises, and breaks. Take it as a standalone private team course or as the third course in the AI Developer Essentials curriculum.

You’ll receive a PDF of the course slides, with substantive key points, examples, diagrams, and AI micro-habits to revisit after class. 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.

Helping developers recognize what makes code a pleasure to work with has been a continuing theme in my teaching. I’m excited to explore how that understanding can shape our collaboration with AI and help us build software we enjoy maintaining.

LET’S TALK ABOUT YOUR TEAM

If your team is using AI to build or change software, I’d enjoy hearing how you’re evaluating the results and where the work is becoming difficult. We can explore whether this course or the full curriculum would help your developers strengthen their judgment and make quality easier to build in.

Schedule a conversation: https://passprog.com/schedule-a-call/

Show More

What Will You Learn?

  • • Use design principles to explain choices about responsibilities, dependencies, and variation.
  • • Model domain entities and behaviors in a class diagram and connect them to testable code.
  • • Concentrate business rules in a pure domain model that can be tested independently of infrastructure.
  • • Use CREATE code qualities to evaluate code and give AI specific, actionable feedback.
  • • Apply separation of concerns and encapsulation to keep implementation easier to understand and change.
  • • Use dependency injection, hand-crafted mocks, and shunts to test interactions at the model's edges.
  • • Distinguish what tests with substitutes establish from what needs verification against real dependencies.
  • • Identify focused improvements that address current problems without anticipating unnecessary complexity.

Want to receive push notifications for all major on-site activities?

✕