Presentations

2023


Expanding your Design Heuristic Repertoire One Experiment at a Time

Rebecca Wirfs-Brock
09 Jun 2023
Domain-Driven Design Europe 2023
(Slides)

Slides for two hour hands-on lab on using structured experiments to stretch a software design umwelt

Abstract

With experience, we learn to nudge our designs in directions we want them to go, using patterns along with countless (unnamed) personal design heuristics. Our perception of our current design context, as well as personal preferences and design values, lead us to apply particular heuristics and choose a course of action. When learning about any new software design patterns, techniques or heuristics, we view them through the unique lens of their past experiences. And we implicitly add and enrich any new design technique or practice based on our existing design umwelt. Umwelt, from the German, means "environment" or "surroundings” and includes our perceptions of the world as well as our actions to produce a desired effect or change. Our umwelt isn’t static; we reshape our umwelt as we interact with our world, gaining skills and learning to perceive differently. It is our umwelt that both drives and limits our potential actions.

One way to learn how to exercise judgment, develop discernment, and stretch our design umwelt is to perform structured experiments. In this hands-on session, we’ll start off sharing some of our cherished design and testing heuristics and practices. We’ll speculate on some of the “whys” behind why some of our favored heuristics work the way they do. And we’ll practicing picking up subtle cues from our design contexts that may lead us to either apply adapt specific heuristics, discard them as not fitting our current design context, or to seek out new ones.

2022


Critically Engaging with Models

Mathias Verraes
Rebecca Wirfs-Brock
23 Jun 2022
Domain-Driven Design Europe 2022
YouTube (Slides)

Models are a powerful lens for perceiving a subject, and we should be deliberate when wielding them

Abstract

Models, whether for a software system, a development process, diseases, political systems, or otherwise, are a way to look at (a part of) the world. They make a choice about what is important, what categories we classify things in, what we see, what’s invisible, what’s valued, or even what’s valid. They are reductionist, that is, they only show a selection of the subject they’re describing. And they are biased: They implicitly reflect the assumptions, constraints, and values of the model’s author.

Most of the time, when you adopt a model created by someone else, you assimilate it into your worldview without much thought. You acquire a new way of seeing something. But when you do that, you may not understand the model’s limitations.

You can choose to look at someone’s model more intentionally. You can critically assess whether this model fits your needs. If you’re looking at a model for the first time, you can use that fresh perspective to see what the model includes and what it leaves out. Models are a powerful lens for perceiving a subject, and we should be deliberate when wielding them. This talk gives you tools for critically evaluating any models that come your way.

2020


Elephants, Patterns, and Heuristics

Rebecca Wirfs-Brock
Christian Kohls
07 Feb 2020
Domain-Driven Design Europe 2020
YouTube

This talk will explore the dilemma faced by patterns authors: What to include in a pattern and what to leave out?

Abstract

Elephants are an observable phenomenon, a pattern in nature. Software patterns are observable phenomena of design solutions. Many different descriptions, representations, and accounts of elephants exist. And many people claim to know what an elephant is. Yet they actually have little or limited knowledge of them. This analogy helps to understand how at the same time we both know and do not know what a thing is. This talk will explore the dilemma faced by patterns authors: What to include in a pattern and what to leave out? We also show how experienced designers unfold and generate new solutions based on pre-existing design knowhow and the central role personal design heuristics play in the design process. As this folding and unfolding of information and knowledge seems to be quite an abstract concept, we will choose to make our case by discussing elephants.

2018


Distilling Your Design Heuristics: A Report and a Challenge

Rebecca Wirfs-Brock
01 Feb 2018
Domain-Driven Design Europe 2018
YouTube

This talk shares design and modeling heuristics that were gathered during a pre-conference workshop. It reflects on the difference between what works in theory and what we see in practice. And it challenges you to grow as a designer by becoming more aware of your personal design heuristics.

Abstract

Over time, we build up a personal toolkit of design heuristics. I’m been designing software for many years and I’ve seen many alternative design solution solutions that work, so I am hesitant to say any one is “best.” Yet I have my own style and distinct design preferences I have accumulated over years of experience. You do as well. This talk will share a few design and modeling heuristics that were distilled during our pre-conference workshop and reflect on the difference between what works in theory and what we see in practice. And it will challenge you to grow as a designer by becoming more aware of your personal design heuristics and how they are shaped and evolve. You can grow as a designer by examining and reflecting on the decisions you make and their impacts, becoming more aware of seemingly minor decisions that were more important than you thought, and putting your own spin on the advice of experts.

2017


Cultivating Your Design Heuristics

Rebecca Wirfs-Brock
21 Oct 2017
Explore DDD 2017
YouTube (Slides)

Challenges designers to grow by putting their own spin on the design advice of others and to keep refining their state of the art.

Abstract

The ouroboros (οὐροβόρος in the original Greek) is an image or archetype of a serpent shaped into a circle, clinging to or devouring its own tail in an endless cycle of self-destruction, self-creation, and self-renewal. Becoming a good software designer sometimes feels like that.

Over time, we consciously and unconsciously build up our personal toolkit of design heuristics. Because I’ve seen so many workable solutions, I am hesitant to say any one is “best.” Yet, some are aesthetically more pleasing to me. I have my own style and distinct design preferences because of my background, that is, the collected set of heuristics and experiences I have assimilated. To grow as designers, we need to do more than simply design and implement working software. We need to examine and reflect on our work, put our own spin on the advice of experts, and continue to learn better ways of designing.

Design Matters

Rebecca Wirfs-Brock
03 Feb 2017
Domain-Driven Design Europe 2017
YouTube

Christopher Alexander has stated that as designers, “We are searching for some kind of harmony between two intangibles: a form which we have not yet design and a context which we cannot properly describe.” In this talk I first introduced the idea of personal design heuristics, how heuristics relate to patterns, and some useful ways to look at designs.

2015


Why We Need Architects (And Architecture) on Agile Projects.

Rebecca Wirfs-Brock
04 Nov 2015
The Second Israeli Conference on Software Architecture 2015
YouTube

Is there a place for software architecture in agile development? I think so. This talk explains how architecture can be done on agile projects and what an agile architect does.

Abstract

Complex software always has an architecture, even if it isn’t intentional. But being agile isn’t enough to enough guarantee a sustainable architecture. It isn’t prudent to just keep your code clean and hope that good architecture will just emerge. Especially when there is a lot of technical risk, interdependencies, and conflicting priorities. Good architecture requires ongoing attention and stewardship. This talk presents several techniques and architectural activities that are useful on agile projects and explains how an agile architect’s role can and should differ from that of a traditional software architect.

Why We Need Architects (And Architecture) on Agile Projects.

Rebecca Wirfs-Brock
04 Jun 2015
Phily ETE 2015 Conference (Emerging Technology for the Enterprise)
YouTube (Slides)

Is there a place for software architecture in agile development? I think so. This talk explains how architecture can be done on agile projects and what an agile architect does.

Abstract

Complex software always has an architecture, even if it isn’t intentional. But being agile isn’t enough to enough guarantee a sustainable architecture. It isn’t prudent to just keep your code clean and hope that good architecture will just emerge. Especially when there is a lot of technical risk, interdependencies, and conflicting priorities. Good architecture requires ongoing attention and stewardship. This talk presents several techniques and architectural activities that are useful on agile projects and explains how an agile architect’s role can and should differ from that of a traditional software architect.

Exploiting Fast and Slow Thinking

Rebecca Wirfs-Brock
30 Apr 2015
SATURN Conference 2015
YouTube (Slides)

Thinking, Fast and Slow, by Daniel Kahneman explains two systems that drive how we think. System 1 thinking is fast, intuitive, and emotional; System 2 is slow, deliberate, and logical. In this talk I explain how fast and slow thinking affects your reactions, behaviors, and decision-making. I also expose how several common software development practices can amplify and exploit your thinking abilities, where they might lead you astray, and what you can do to shift your thinking."

Abstract

As team leaders or architects, we can benefit from knowing more about how we think, deliberate, and decide. Thinking, Fast and Slow, by Daniel Kahneman, explains two systems that drive how we think. System 1 thinking is fast, intuitive, and emotional; System 2 is slow, deliberate, and logical.

In this session, you will learn how fast and slow thinking affects your decision making. You’ll explore how common development practices, with an emphasis on agile practices, can amplify your thinking abilities and how they might lead you astray. For example, Given-When-Then behavior-driven development (BDD) scenarios are concrete and specific. They prevent us from leaping to conclusions about expected results. Those same BDD specs can also lead you to believe that’s all there is. The Pomodoro Technique helps block work into manageable chunks, making time for uninterrupted slow thinking. But what else might you do?

Fast thinking works well in familiar contexts. You save time when you don’t have to deliberate over details to make informed decisions. But fast thinking can lead to poor decisions. You might jump to conclusions, be wildly optimistic, or under-assess risks and rewards. You need to exploit both fast and slow thinking on agile projects. And you need to be aware of when fast thinking is tripping you up.

During this session, you will explore some impacts of fast and slow thinking and share where you might need to slow down or speed up. You will practice reframing questions about specific situations in terms of fast and slow thinking. And you’ll identify specific situations where your thinking needs to shift and explore how to make those shifts.

2014


Object Design Roots And New Directions

Rebecca Wirfs-Brock
07 Nov 2014
Smalltalks 2014
YouTube (Slides)

Over twenty years ago, based on observing really great Smalltalk programmers, I developed a set of design principles and practices called Responsibility-Driven Design. Today, many design approaches are known by what drives them. You can be Test-Driven, Behavior-Driven, Domain Driven, Agile Model Driven, Feature Driven, and even Acceptance Test Driven! While many driven practices have common roots, they also have distinct areas of emphasis and different design values and aesthetics. This talk will explain some these distinctions and challenge you to understand what design practices you can use to build habitable software.

Discovering Alexander's Properties In Your Code

Rebecca Wirfs-Brock
05 Nov 2014
Smalltalks 2014
YouTube (Slides)

As designers we are empowered to design our software in ways we find pleasing. Knowing about Christopher Alexander's 15 properties that give life and wholeness to the designed world (including software) can help us develop a discerning eye about the code we create.

2013


Why We Need Architects (And Architecture) on Agile Projects.

Rebecca Wirfs-Brock
18 Jan 2013
JDD Conference 2013
YouTube (Slides)

Is there a place for software architecture in agile development? I think so. This talk explains how architecture can be done on agile projects and what an agile architect does.

Abstract

The rhythm of agile software development is to always be working on the next known, small batch of work. Is there a place for software architecture in this style of development? Some people think that software architecture should simply emerge and doesn't require ongoing attention. But it isn't always prudent to let the software architecture emerge at the speed of the next iteration. Complex software systems have lots of moving parts, dependencies, challenges, and unknowns. Counting on the software architecture to spontaneously emerge without any planning or architectural investigation is at best risky.

So how should architecting be done on agile projects? It varies from project to project. But there are effective techniques for incorporating architectural activities into agile projects. This talk explains how architecture can be done on agile projects and what an agile architect does.

2011


Why We Need Architects (And Architecture) on Agile Projects.

Rebecca Wirfs-Brock
04 Jul 2011
YOW! 2011
YouTube (Slides)

This talk presents several techniques for incorporating architectural activities into complex agile projects and explains how an agile architect’s role differs from traditional software architects.

Abstract

Complex software always has an architecture, even if it isn't intentional. Being agile isn't enough. It isn't prudent to just keep your code clean and hope that good architecture will simply emerge. Especially when there is a lot of technical risk, interdependencies, and conflicting priorities. Good architecture requires ongoing attention and stewardship. This talk presents several techniques for incorporating architectural activities into complex agile projects and explains how an agile architect's role differs from traditional software architects.