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>