Bredemeyer Consulting
Software Architecture Workshop
Course Overview
This workshop focuses on:
architecture, answering the question: "what is software architecture?", addressing the concepts and concerns of architecture design work, and introducing architectural patterns, principles and mechanisms.
architecting, that is the process of creating and evolving an architecture. The major emphasis of the workshop is on system design. We move between probing what the system needs to become, to better fit its context and purpose, and determining how best to design the system to do that. We create drafts of the various architecture views and related decision sets, to convene discussions, share techniques, heuristics and insights, and practice architecture work. It creates a forum for instructor and peer mentoring, and allows questions to be raised in situ, providing contextual grounding for advice.
architects, addressing the role and responsibilities of architects (titles may vary) in complex system design and evolution, and expanding the focus of personal development from code to systems design and technical leadership, including strategic acuity. We also discuss architecture responsibilities and the architect role (whatever it happens to be called) within the organization.
2024 Open Enrollment Schedule
Remote
|
|
Please email training@bredemeyer.com for more information.
Why Do It?
We increasingly recognize that software is critical to competitive advantage even in industries we don't traditionally associate with software, from insurance and banking to automotive and shipping. Moreover, we're realizing that great design distinguishes top competitors. Software architecture is design to deliver service and product capabilities, address system complexity, and ensure we build the right system right. And evolve the system to maintain fit to purpose and to context, as the business needs shift and technology evolves. All this within the context of being agile, that is responsive and adaptive, with empowered teams and enough context to create systems with cohesive design integrity.
Software systems create value, and software systems—and the state of their architecture—enable and constrain the business, playing a critical role in an organization’s business success. Architects play a leading role in shaping technical strategy and designing system capabilities, while fostering system integrity. This workshop addresses the concepts, techniques and lessons from experience that helps architects be more effective in both the technical and organizational aspects of the role.
We have considerable experience helping architects and their organizations grapple with system design challenges, and the demands for strategic and facilitative design leadership. The software architecture workshop integrates extensive architecture experience, and builds on twenty years of working with architects and teaching software architecture workshops.
And it's fun!
Course Outline
This is a workshop, and small teams work on creating a draft architecture, drawing on the models and guidance in Visual Architecting. We follow the iterative architecting process, and weave concepts and architecting techniques into lectures/discussion that bookend work sessions. The lecture topics are driven by the concerns that are being addressed at that stage of the architecting process. This makes it a "non-traditional" format, but it is one that works well as it allows us to work end-to-end through the creation of a draft architecture.
Software Architecture
As we iterate through architecture design with its trade-offs, decision making, modeling and specification, we grapple with:
- system design: systems concepts, uncertainty and complexity, context, framing, constraints, forces and trade-offs.
- technical strategy: innovation and strategy concepts; technology landscape mapping; technical direction and architectural vision; architectural style and principles
- architectural patterns: structural patterns such as layers, hexagonal architecture, and microservices, and mechanisms that may be architecturally significant in various contexts (such as adapters, facades and bridges or mechanisms related to event driven architectures, etc.).
- architecture modeling including an introduction to C4 and (just enough, as relevant) UML/sysML, but drawing on other templates and modeling as appropriate to the design stage and its decision focus.
- architectural views: structural views help document and communicate the architecture in terms of the components and their relationships, and are useful in assessing architectural qualities like extensibility. Behavioral views are useful in thinking through how the components interact to accomplish their assigned responsibilities and evaluating the impact of what-if scenarios on the architecture. Behavioral views are especially useful in assessing run-time qualities such as performance and security. Execution views help in evaluating physical distribution options and documenting decisions.
- component specification: components are identified and assigned responsibilities that client components access through "contracted" interfaces (APIs, promises). Component interconnections specify communication and control mechanisms and allow component interactions to accomplish system behavior.
- key architectural design principles including abstraction, separation of concerns, postponing decisions, and simplicity, and related techniques such as interface hiding and encapsulation, as well as system decomposition principles, factoring and refactoring, and good interface design.
See "what is software architecture", for an overview of how we view architecture. Our white paper titled "Software Architecture: Central Concerns, Key Decisions" gives an introduction to our approach to architecture. Our slidedeck, The Architect's Clue Bucket, also provides an indication of our approach.
The Architecting Process
The principle focus of the workshop is doing architecture work. We cover:
- System Context: strategy and vision setting, and situational awareness through business and technology context mapping (the ecosystem: value flows and relationship networks, competitive landscape, trends and evolution; the business/ organization: capabilities, internal value flows and transformations, history).
- System Capabilities: eliciting needs/concerns and designing system capabilities -- that is, functional (i.e., behavioral) requirements and non-functional requirements (i.e., system properties including run-time qualities such as performance and reliability, and development-time qualities such as evolvability/extensibility and reusability).
- Architecture Design and Specification: iterating through technical strategy, and conceptual, logical and execution architecture views and decisions, we identify and address the various architectural concerns and challenges that typify each (including principles, styles, analogies; system decomposition and responsibility factoring, and mechanism sketching; API and mechanism design; system topology and distribution). We gain practice with various architectural models (noting that code is a key medium for design expression, but not the only one), evaluate architectural trade-offs, and document the system using different views. We explore heuristics and approaches to agility (responsiveness, adaptability, elasticity), system integrity and resilience, and sustainability (technical, economic, social and environmental).
- Architecture Improvement: decision traps and cognitive biases, fallacies, perceptual errors and what they mean for architectural design and improvement; checklists and other means to assess the system; deliberate discovery and sketch prototypes, pretendotypes, propotypes and evolutionary development; software visualization, reflection and ongoing design improvement.
We focus on experiencing these different facets of architecting, to anchor a discussion of architecture within the software development lifecycle, and implications of and for agile development.
This workshop assumes a programming background, and we focus on complementing our code design skills with system-focused design topics and techniques. We draw out what architects, and a focus on technical strategy and architecture, adds to the development process throughout evolutionary lifecycle of systems.
The Role and Responsibilities of Architects
Being (ultimately) responsible for shaping and leading system design, architects are boundary spanners — working on code, but well beyond too. This section relates the technical and "non-technical" responsibilities and associated skills and orientations of architects, such as:
- Strategy: strategy concepts, contextual understanding/situational awareness; the architect's center of gravity shifts from a technical focus, to creating business opportunity and competitive differentiation through technology, bringing technical insight to product/service (and for more senior architects business) strategy, and setting technical direction given keen understanding of business direction and context
- Leadership: what leadership means and how to be effective; leading teams and leading up and across in the organization
- Organizational effectiveness: organizational politics and the challenges it raises for architects; empathy and listening; persuasion and influence; negotiating and resolving tensions between divergent vested interests
- Consulting/coaching: coaching developers in design; model storming, pair programming and other techniques for sharing the architecture decisions and improving the architecture and system design.
See our white paper titled "The Role of the Architect" for an overview of the architect competency framework that organizes our approach to this section. It is also covered in this executive report: What It Takes to Be a Great Enterprise Architect, by Dana Bredemeyer and Ruth Malan
If you've read this far, it's safe to let you in on the real deal here: we ostensibly work on the draft architecture for a system, but it's really a lab for working on the next iteration of your self as architect. Bring your experience. Share it. Leave with your experience set in context, and added to by the working sessions and discussions with peer architects! It's as good a thing as we all make it together. Which is typically awesome! This workshop has a track record of attracting those who are constantly learning (not that surprising given that it requires a commitment of 4 days), with enough experience to direct their learning meaningfully, and we each have a lot to give and gain from each other. It's fun! Bright, energetic, challenging fun!
Workshop Format
Exercises form a large component of this four-day workshop, which is oriented toward building skills rather than simply exposing participants to new concepts. Also, case studies and stories from our experience are used to integrate real-world lessons into the workshop.
Audience
This workshop is designed for architects (those doing architecture work, whatever their title) and senior system design engineers. Managers of architecture teams will also benefit. Product owners may be interested too.
This workshop may also be of interest to developers who are interested in a system design approach that works across both capabilities design ("requirements," including properties or "non-functionals") and the design of the system internals (architecturally significant parts and interactions, and mechanisms).
Pricing
In-house: Pricing depends on number of students taking the class. Please contact us for details.
US Open Enrollment: The fee for the 4-day workshop is US$2,500.00 per student.
Europe Open Enrollment: The fee for the 4-day workshop is US$2,800.00 per student. This fee takes into account the higher cost structure when we run classes in Europe.
Early enrollment discount: 10% discount for enrollments completed (paid) by July 15, 2017 for both the Eindhoven workshop and the Chicago-Schaumburg workshop.
Note: We only accept a maximum of 16 participants, so register early to avoid disappointment. Workshop participants are responsible for their own accommodations.
For open enrollment workshops: we offer a 10% discount when you enroll 3 or more people from the same company in the same workshop at the same time.
On-site:
Most of our workshops are run on-site with clients, helping to ramp up an architecture focus, providing training for architects, running new product incubators with a core group of product owner/architects/developers, and so forth.
If 6 or more people from your company would like to attend this class, you may find it more cost effective (taking travel costs into account) to hold the class at your company site.
Suggest a venue: If there is a location and timing that you are particularly interested in, please let us know.
Copyright © 1999-2023 by Bredemeyer Consulting
URL: http://www.bredemeyer.com
Page Created: November 1999
Last Updated: November, 2023