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.
- 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
- Techniques for designing ‘solutions’ posed by complex systems and modifications to complex
- 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.
- Identifying ‘dependencies” and therefore ‘side-effects’ that can/will arise from introducing change
- Isolating and initiating change
- Techniques for implementing your designs, including code
- Programs and code that is as adaptable as your system (changeable as rapidly as your system changes)
- Revisiting the Object model for code
- Techniques for establishing development processes compatible with complex systems design
managing those processes
- Team development and discrete developmental tasks
- What to do when things blow up in your face
- Managing the work — lessons from Extreme Programming
- Individual challenges and how you can be a better designer/developer
About the instructor
Dave West began his computing career as a Computer Operator / Programmer in 1968 — the same year that “Software Engineering” became a profession. He has participated in every movement and revolution in computing since then, including: structured development, databases- and data-driven development, object development, agile development, patterns, domain-driven design, and design thinking. He pursued simultaneous careers as a professional developer and academic. Today he provides mentoring, training, coaching, and consulting services to teams and organizations seeking transformative change.