DDD Academy
No upcoming sessions

Techniques For Complex Domains

Essentials
English

Your Instructors

About the workshop

Complexity changes everything.

For fifty plus years software development has used abstraction and simplification to define domains and problems that were amenable to formal, engineering, solutions.

The engineering approach with its artificial domains must give way to an understanding of complex domains and the challenges they present to the software and system developer.

What you'll learn

This workshop begins with a discussion of the differences between ‘artificial’ (complicated) and natural (complex) systems. This will lead to an understanding of the characteristics of complex systems and the challenges they present for software developers. Attendees are likely to have already encountered some of these challenges.

The workshop will address specific techniques, both design and coding, for architecture, for modularity, for autonomy, and for adaptability.

Most aspects of the development process will require modification to successfully meet the demands of complexity. Recommendations for making those modifications, based on existing best practices and overlooked techniques from past approaches, will be covered.

Covered topics:

  • A brief overview of ultra-large scale and complex adaptive systems
  • "Wicked Problems" and specific, critical, challenges posed by ultra-large scale complex systems.
  • Techniques for analyzing, modeling and understanding complex systems
    • Lessons from General Systems
    • Simple tools for modeling complex systems
    • How to isolate targets for change without losing context and connection to the rest of the system
  • <li>Techniques for designing ‘solutions’ posed by complex systems and <strong>modifications to complex
    systems</strong>
    <ul>
    <li>Identifying the behavior of individual elements and relationships participating in the complex
    system;
    i.e. what behavior do they contribute to the system and/or other elements within that system.
    </li>
    <li>Identifying ‘dependencies” and therefore ‘side-effects’ that can/will arise from introducing
    change
    </li>
    <li>Isolating and initiating change</li>
    </ul>
    </li>
    <li>Techniques for <strong>implementing your designs, including code</strong>
    <ul>
    <li>Programs and code that is as adaptable as your system (changeable as rapidly as your system changes)
    </li>
    <li>Revisiting the Object model for code</li>
    </ul>
    </li>
    <li>Techniques for establishing <strong>development processes compatible with complex systems design</strong>
    and
    managing those processes
    <ul>
    <li>Team development and discrete developmental tasks</li>
    <li>What to do when things blow up in your face</li>
    <li>Managing the work — lessons from Extreme Programming</li>
    <li>Individual challenges and how you can be a better designer/developer</li>
    </ul>
    </li>

Sessions & Booking

Upcoming Sessions

No upcoming sessions yet.

Get in touch and we'll keep you posted.

Book for your team

We can organize this workshop privately for your company, tailored to your domain.

Contact us

Stay in the Loop

Get notified about new workshops, early-bird discounts, and exclusive content on DDD, Architecture, and Software Design.

No spam, unsubscribe anytime. Join 5,000+ developers.