Conference Presentation Abstracts (and Slides)
I’m an avid speaker at business and software development conferences. Most conferences require talk abstracts to describe the content and thrust of the talk, and it’s often easier to point the organizers to a comprehensive list than send abstracts piecemeal. This therefore is the list of presentations I submit to conferences for my current topics.
A note about the slides: I’m a firm believer (in fact, wrote a book about) using slides as a support mechanism, not the entire story–the presenter is the other half. Therefore, if you want to download the slides, feel free…however, be forewarned that they probably won’t make any sense with me standing in front of them talking, as you can only see half the story.
Keynotes differ from “regular” sessions in three important ways. First, they are shorter in duration (50-60 minutes). Second, I design keynotes to entertain a more diverse audience. Regular sessions tend to deep dive into one topic area, whereas keynotes may cover a wider variety of topics, exposing surprising connections between seemingly disparate subjects. Third, they are more abstract than regular sessions, encouraging Deep Thoughts in addition to pure factual exposition.
- Meta-modern Software Architecture Coming Sept 2021
Workshops (Half, Full, or Two day)
Workshops are multi-segment courses with deeper content and hands-on exercises.
90 Minute Sessions
A note about timing
I designed the presentations listed below for a particular duration. Presentations are not fractal: I cannot arbitrarily shortened or lengthened them. I may be able to produce a different duration version, but please ask before assuming.
- Architecture Foundations: Characteristics & Tradeoffs
- Architecture Foundations: Styles & Patterns
- Architecture: The Hard Parts
- Building Evolutionary Architectures
- Restructuring & Migrating Architectures
- Software Architecture by Example
The job Software Architect places in the top ten of most annual surveys of best jobs, yet no clear path exists from Developer to Architect. Why aren’t there more books and training materials to fill this demand? First, software architecture is a massive multidisciplinary subject, covering many roles and responsibilities, making it difficult to teach because so much context is required for the interesting subjects. Second, it’s a fast moving discipline, where entire suites of best practices become obsolete overnight. This workshop provides a foundation to build upon to start the journey towards software architect. I offer three different versions of this workshop based on length.
This workshop focuses on the foundational material required for success as a modern software architecture. It touches upon the major design elements of the role and discusses several soft skills such as communication as well.
- Software architecture defined
- Architecture characteristics
- Component-based thinking
- Architecture quantum
- Scope of architecture characteristics
- Exercise: Determine architecture quantum
- Automating architectural governance
- Architecture styles overview
- Event-driven architectures
- Orchestration-driven service-oriented architecture
- Space-based architecture
- Service-based architecture
- Choosing an architecture style
- Exercise: Choose an architecture
- Documenting architecture
- Exercise: Document communication styles
- Next steps
Building Evolutionary Architectures Hands-on [slides]
An evolutionary architecture supports incremental, guided change across multiple dimensions.
For many years, software architecture was described as the “parts that are hard to change later”. But then microservices showed that if architects build evolvability into the architecture, change becomes easier. This workshop, based on recent book, investigates the family of software architectures that support evolutionary change, along with how to build evolvable systems. Understanding how to evolve architecture requires understanding how different parts of architecture interact; I describe how to achieve appropriate coupling between components and services. Incremental change is critical for the mechanics of evolution; I cover how to build engineering and DevOps practices to support continuous change. Uncontrolled evolution leads to undesirable side effects; I cover how fitness functions build protective, testable scaffolding around critical parts to guide the architecture as it evolves.
The software development ecosystem exists in a state of dynamic equilibrium, where any new tool, framework, or technique leads to disruption and the establishment of a new equilibrium. Predictability is impossible when the foundation architects plan against changes constantly in unexpected ways. Instead, prefer evolvability over predictability. This hands-on workshop provides a high-level overview of a different way to think about software architecture.
- Evolutionary Architecture Defined
- Fitness Functions
- Exercise: Fitness Function Katas
- Engineering Incremental change
- Architectural Characteristics
- Exercise: determine appropriate characteristics
- Identifying Architectural Patterns
- Exercise: components and patterns
- Evaluating the Evolvability of Existing Architecture Styles
- Retrofitting Existing Architectures
- Building Evolvable Architectures
- Automating Governance
Architecture Foundations: Characteristics & Tradeoffs [slides]
Architects must translate domain requirements, external constraints, speculative popularity, and a host of other factors to determine the key characteristics of a software system: performance, scale, elasticity, and so on. Yet architects must also analyze the tradeoffs each characteristics entails, arriving at a design that manages to maximize as many beneficial properties as possible. This session describes how architects can identify architectural characteristics from a variety of sources, how to distinguish architectural characteristics from domain requirements, and how to build protection mechanisms around key characteristics. This session also describe a variety of tradeoff analysis techniques for architects, to try to best balance all the competing concerns on software projects.
Architecture Foundations: Styles & Patterns [slides]
A key building block for burgeoning software architects is understanding and applying software architecture styles and patterns. This session covers basic application and distributed architectural styles, analyzed along several dimensions (type of partitioning, families of architectural characteristics, and so on). It also provides attendees with understanding and criteria to judge the applicability of a problem domain to an architectural style.
Architecture: The Hard Parts [slides]
Architects often look harried and worried because they have no clean, easy decisions: everything is an awful tradeoff. Architecture has lots of difficult problems, which this talk highlights by investigating what makes architecture so hard. At the of core many architectural problems: getting good granularity, which we illustrate via event-driven architectures, teams, components, architectural quantum, and a host of other examples. We also illustrate reuse at the application, department, and enterprise level, and why reuse seems simple but isn’t. We also discuss difficult decisions, how to do tradeoff analysis, tools like MECE lists, and how to decouple services to achieve proper granularity. Architecture is full of hard parts; by tracing the common reasons and applying lessons more universally, we can make it softer.
Building Evolutionary Architectures [slides]
An evolutionary architecture supports incremental, guided change across multiple dimensions.
For many years, software architecture was described as the “parts that are hard to change later”. But then microservices showed that if architects build evolvability into the architecture, change becomes easier. This talk, based on my upcoming book, investigates the family of software architectures that support evolutionary change, along with how to build evolvable systems. Understanding how to evolve architecture requires understanding how architectural dimensions interact; I describe how to achieve appropriate coupling between components and services. Incremental change is critical for the mechanics of evolution; I cover how to build engineering and DevOps practices to support continuous change. Uncontrolled evolution leads to undesirable side effects; I cover how fitness functions build protective, testable scaffolding around critical parts to guide the architecture as it evolves.
The software development ecosystem exists in a state of dynamic equilibrium, where any new tool, framework, or technique leads to disruption and the establishment of a new equilibrium. Predictability is impossible when the foundation architects plan against changes constantly in unexpected ways. Instead, prefer evolvability over predictability. This talk illustrates how to achieve evolutionary architectures and how to retrofit existing systems to support better evolution.
Restructuring & Migrating Architectures [slides]
A common challenge facing many architects today involves restructuring their current architecture or migrating from one architectural style to another. For example, many companies start with monolithic applications for simplicity, but find they must migrate it to another architecture to achieve different architectural characteristics. This session shows patterns/antipatterns, techniques, engineering practices, and other details showing how to make major changes to architectures. This session introduces a new measure, the architectural quantum, as a way of measuring and analyzing coupling and portability within architectures.
Software Architecture by Example [coming soon...]
While many attendees learn from abstract concepts, others prefer to see concepts in action. This session eschews software architecture theory and instead illustrates the process of architecture design using two concrete examples: Silicon Sandwiches and Going, Going, Gone. For each of these problems, Neal shows how:
- to determine architecture characteristics
- to find architecture quanta
- to scope architecture characteristics
- to create and iterate on component desgin
- architecture characteristics & component design leads to architecture style selection
- to document important architecture decisions
Each step of the way, the two example problems illuminate the stages of architecture design and the considerations architects must make at each stage.