Building software architectures – hands-on
This three-day hands-on architecture workshop provides you with the knowledge and skills necessary to effectively create, document, and present software architectures. Through interactive course materials and architecture exercises, this course teaches how to analyse your business and technical needs, select the right architecture style and pattern, define architectural components, and effectively diagram and document your software architecture.
Through interactive exercises you learn how to identify key architectural characteristics that shape your software architecture. Using those characteristics, you then learn how to analyse and use various architecture patterns and styles to make intelligent choices to determine which architecture style best suits your particular needs.
Pattern coverage takes up a large part of this workshop because architects need to understand the trade-offs inherent in each one to effectively analyse characteristics to choose the correct pattern. While knowing what architecture pattern best fits your situation is critical to the success of your architecture, that is only the start. Creating an architecture is also about the ability to identify and define architectural components that form the building blocks of any software architecture. In this workshop you also learn how to identify architectural components and iteratively refine the granularity of those components. You also learn about component coupling and cohesion and the important role they play in creating and maintaining an architecture, how to identify and repair structural decay in architecture, and to test architectural characteristics. Effective communication is one of several critical soft skills for architects, so this workshop covers how to communicate and present architectural concepts to both developers and non-technical co-workers.
The last day of the workshop covers building evolutionary architectures, techniques to preserve and protect architectural characteristics using fitness functions. The constantly changing ecosystem of the software development world requires modern engineering techniques to adapt and evolve systems without breaking them. The last day covers myriad techniques and perspectives to build modern, resilient software architectures.
This workshop also covers some advanced topics such as how to build reactive architectures using simple event queues (rather than heavyweight frameworks), and how to build evolutionary architectures that support graceful change over time.
Over the three days there will be a large number of team-based hands-on exercises, using Architecture Katas. Each team is assigned a problem which they cumulatively work on throughout the workshop, gradually defining and revising their architectural solution.
This workshop is designed to be technology-agnostic, so all of the materials presented apply to any platform or language.
- Workshop logistics and introductions
- Identifying architecture characteristics
- Exercise: Architecture characteristic
- Understanding monolithic architecture patterns
- Understanding distributed architecture patterns
- Event Driven
- Domain-specific architecture patterns
- Exercise: choosing proper pattern
- Creating hybrid architecture patterns
- Identifying architectural components
- Refining component granularity
- Exercise: defining components
- Understanding component coupling
- Understanding component cohesion
- Understanding structural decay
- Exercise: present your architecture solution
- Composite architectures
- Building reactive architectures with simple event queues
- Hybrid service/microservice architectures
- Migrating between architectures
- Building evolutionary architectures
- Testing architectural characteristics
- Automating architectural governance
- Exercise: define fitness functions to protect architecture characteristics
Neal is a director, software architect, and meme wrangler at ThoughtWorks, a global IT consultancy with an exclusive focus on end-to-end software development and delivery. He is also the designer and developer of applications, magazine articles, video/DVD presentations, and author and/or editor of eight books spanning a variety of subjects and technologies, including Presentation Patterns and Functional Thinking. He focuses on designing and building large-scale enterprise applications. He is also an internationally acclaimed speaker, and has delivered more than 2000 presentations at over 300 software conferences in the UK, USA, Germany, Brazil, Norway, and various other countries.