grow your personal design heuristics keynote · talk with developers talk with end users system...
TRANSCRIPT
![Page 1: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/1.jpg)
Grow Your Personal Design
Heuristics Rebecca Wirfs-Brock
© 2020 Wirfs-Brock Associates
![Page 2: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/2.jpg)
1990 cover art by Phil Brock
![Page 3: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/3.jpg)
Nothing ever goes
exactly by the book
![Page 4: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/4.jpg)
![Page 5: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/5.jpg)
Nothing ever goes
exactly by the book
![Page 6: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/6.jpg)
![Page 7: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/7.jpg)
“any approach to problem solving, learning, or discovery that employs a practical method not guaranteed to be optimal or perfect, but sufficient for the immediate goals.”—Wikipedia
![Page 8: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/8.jpg)
Heuristic “anything that provides a plausible aid or direction in the solution of a problem but is in the final analysis unjustified, incapable of justification, and potentially fallible.” —Billy Vaughn Koen
Heuristic / euristic
![Page 9: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/9.jpg)
A Few General Engineering Heuristics by Billy
Always give an answer.
Solve problems by successive
approximations.
Always give yourself a chance to retreat.
Use feedback to stabilize your design.
![Page 10: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/10.jpg)
Context Inwhichsitua,ons
canIusethis pa0ern?
Problem Whatdoesittrytosolve?
Whatques,onsdoesitanswer?
Solution WhatcanI
dothatusuallyworks?
design patterns are
another nicely
“packaged” form
![Page 11: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/11.jpg)
1. Heuristics to Solve a
Design Problem
![Page 12: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/12.jpg)
transac'onscripts
database
a.Transac'onScriptPa3ern
database
ServiceLayer(businessserviceobjects)
DomainModel(en'ty,value,serviceobjects)
objecttodatabasemapper
c.DomainModelPa3ern
ServiceLayer(businessserviceobjects)
TableModule(databasetableobjects)
database
b.TableModulePa3ern
Three Approaches for Structuring the Domain Layer
Patterns of Enterprise Application Architecture
![Page 13: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/13.jpg)
transac'onscripts
database
a.Transac'onScriptPa3ern
database
ServiceLayer(businessserviceobjects)
DomainModel(en'ty,value,serviceobjects)
objecttodatabasemapper
c.DomainModelPa3ern
ServiceLayer(businessserviceobjects)
TableModule(databasetableobjects)
database
b.TableModulePa3ern
Three Approaches for Structuring the Domain Layer
Patterns of Enterprise Application Architecture
Heuristic: Use for simple apps and data
Heuristic: Use for complex logic and accept cost of db mapping
Heuristic: Use for complex existing data and logic applying to multiple “rows”
![Page 14: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/14.jpg)
Table Module Heuristic
p
Solvable problems
my problem
Rich Domain Model
Heuristic
Transaction Script
@rebeccawb
![Page 15: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/15.jpg)
@rebeccawb
![Page 16: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/16.jpg)
Our state-of-the-art is constantly
progressing
![Page 17: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/17.jpg)
@rebeccawb
![Page 18: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/18.jpg)
Patterns are never complete…
© Can Stock Photo / TopVectors
![Page 19: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/19.jpg)
![Page 20: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/20.jpg)
Subject
Attach (Observer) Detach(Observer) Notify()
ConcreteSubject
GetState() SetState() subjectState
subject
for all o in observers { o.update }
Design Patterns Gamma et al., 1995
Observer
Update()
ConcreteObserver
Update()
observerState return subjectState
observerState= subject->GetState()
observer
The Observer Pattern
![Page 21: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/21.jpg)
How should we really design this?
![Page 22: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/22.jpg)
Our own heuristics have to fill in the gaps… What info to send with a notify?
How should I handle an indeterminate number of observers? What are appropriate responses to update notices? Avoiding infinite react/change/react loops….
![Page 23: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/23.jpg)
2. Heuristics to Guide
Use of Other Heuristics
![Page 24: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/24.jpg)
First Contact Patterns
Talk with developers
Talk with end users
System experts
Pattern 3.1: Chat with the Maintainers
Pattern 3.4: Interview During Demo
Compile it
Read about it
Software System
Pattern 3.2: Read All the Code in One Hour
Pattern 3.5: Do a Mock Installation
Pattern 3.3: Skim the Documentation
Read it
Talk about it
Verify what you hear
Each chapter in Object-Oriented Reengineering Patterns is a small language @rebeccawb
![Page 25: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/25.jpg)
3. Heuristics that
Determine our Attitude and Behavior
![Page 26: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/26.jpg)
Examples
![Page 27: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/27.jpg)
Examples
![Page 28: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/28.jpg)
“Value consistency over cleverness.”
![Page 29: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/29.jpg)
Our Values Drive Behavior
principle: acceptance of something as truth
value: a person’s personal belief for or against something (in a particular context)
![Page 30: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/30.jpg)
Value evidence over speculation
Design for what I know now
Learn, then adapt
Simple design (uncomplicated) if possible, not simplistic
Expect the architecture to evolve
My Agile Design Values
Photo courtesy of https://www.flickr.com/photos/notbrucelee/7113385543
![Page 31: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/31.jpg)
*Thanks, Alex Balboaca for sharing
Checklists and Working Agreements at Mozaic Works*
![Page 32: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/32.jpg)
How can you quickly record
heuristics?
![Page 33: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/33.jpg)
![Page 34: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/34.jpg)
Say more on Question, Heuristic, Example (QHE) Cards
![Page 35: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/35.jpg)
Question-Heuristic-Example Cards
This part I turn into a heuristic
![Page 36: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/36.jpg)
Heuristic: Generate multiple events for a business process when downstream business processes react differently. Make each event discrete.
![Page 37: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/37.jpg)
Heuristic Gists*
*gist – the main point or part; essence. Similar to pattern thumbnails.
Multiple Events for a Single Process You need to balance passing along information needed by downstream processes in a single business event with creating multiple event records, each designed to convey specific information needed by a specific downstream process. Summary of Problem How do you know how many events to generate from a single business process? Summary of Solution If processes downstream react differently, generate different discrete events. For example, handling a “rental car return” request might generate two events and event records: “car returned” and “mileage recorded.” Even though the mileage is recorded at the time a car is returned, mileage could be recorded at any other time as well. It is a cleaner design to generate two events, rather than cram information into a single, overloaded “car returned” event.
![Page 38: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/38.jpg)
Not all Heuristics are Candidates for Patternhood
ü Works in different contexts
ü Not obvious × Not good candidates:
× Specific to a particular situation × Can be stated simply:
do X when you see Y....
![Page 39: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/39.jpg)
![Page 40: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/40.jpg)
Challenge Others’ Heuristics
© Can Stock Photo / 4774344sean
![Page 41: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/41.jpg)
How Big Should a Microservice Be?
![Page 42: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/42.jpg)
“…small enough and no smaller” —Sam Newman
![Page 43: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/43.jpg)
“In my view a single deployable service should be no bigger than a bounded context, but no smaller than an aggregate.”
–Ben Morris
![Page 44: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/44.jpg)
“Single Responsibility Principle: there should only be a single service impacted by a change to the definition of this data. As a result, you’ll tend to see services that aren’t all that small, and probably not so many of them. In my experience, I’ve seen between 7 and 15 services the majority of the time.”
—Udi Dahan
![Page 45: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/45.jpg)
![Page 46: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/46.jpg)
Heuristics Often Conflict…
© Can Stock Photo / DaneeShe
![Page 47: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/47.jpg)
Choose the heuristic to use from what you take to be the best option at the
time you are required to choose.
![Page 48: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/48.jpg)
![Page 49: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/49.jpg)
Some Of Your Heuristics Have
Aged Well!
© Can Stock Photo / Noofoo
![Page 50: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/50.jpg)
50
Distill your cherished heuristics: �Record Your Design Values & Goto
Practices
![Page 51: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/51.jpg)
DDD Heuristics Website
![Page 52: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/52.jpg)
![Page 53: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/53.jpg)
![Page 54: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/54.jpg)
Have a Lean Coffee Heuristics Hunting Session
© Can Stock Photo / sunnymars
![Page 55: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/55.jpg)
![Page 56: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/56.jpg)
“As a rule, the more demanding the application, the more leverage you get from using a powerful language.
But plenty of projects are not demanding at all. Most programming probably consists of writing little glue
programs, and for little glue programs you can use any language that you’re already familiar with and that has
good libraries for whatever you need to do” — Paul Graham, Revenge of the Nerds
![Page 57: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/57.jpg)
© Can Stock Photo / gameover
Paul’s Heuristic It doesn’t matter what programming language you use if you have a simple program. Use programming languages, tools, and frameworks and libraries you are familiar with.
![Page 58: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/58.jpg)
My Imaginary Debate with Paul
But Paul, what about when something starts
out simple but you know it will grow more
complex over time?
And my lifelong heuristic: Learn something new. Don’t always do things the same way. That’s soul sucking!
![Page 59: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/59.jpg)
![Page 60: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/60.jpg)
My First Heuristics Distillation Conversation with Mathias Verraes
What’s a heuristic you use when you
model events?
Heuristic: Events are records of things that have happened, not
things that will happen in the future.
The event is “a reservation has been made” or “service has been scheduled”
![Page 61: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/61.jpg)
Examples Keep the Conversation
Flowing Here’s another heuristic: A bounded context should keep its internal details private.
Say if you keep monetary units with 10 digits
precision internally in a service, pass out an amount
with 2 digits precision because that’s all other consumers of the event
would need.
![Page 62: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/62.jpg)
We Dig Deeper…
Perhaps there’s another heuristic?
Don’t design message or event contents for specific subscribers to that event?
Design agreed upon standard formats based on standard usage.
![Page 63: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/63.jpg)
And then it got really interesting…
What happens if a new process needs extra precision?
Maybe it belongs within the bound context of the process that knows 10 digits precision?
![Page 64: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/64.jpg)
Which led to this insight… These two heuristics compete!
Heuristic: Design agreed upon standard formats based on expected usage.
Heuristic: When designing information in an event, don’t lose necessary precision.
![Page 65: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/65.jpg)
Distiller Advice × Listen. × Let the conversation flow.
× Ask questions: × Can you give me an example? × What happens if…?
× Do not record every heuristic in real time. × Photograph scribbles and drawings. × Record conversations for later.
![Page 66: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/66.jpg)
![Page 67: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/67.jpg)
When?
as you attempt something new you have a ½ hour
![Page 68: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/68.jpg)
Thirdsession’snotes
OnJune28thjoinedthemobwhenitwasverysmall(justtwo).Theywereworkingonanotherenhancement:Addingtheabilitytoapprovearelease.AtonepointitwasjustmewithJulian…soIwasreallyonlyobserving/chippingincommentswhentherewasadiscussion.
Sametimewewerebattlingnewpub/subwayofgettingeventinfo….
Heuristic:WhogoesnextasDriveristheonewhohasthemosttolearn(whenrejoiningthemoborperhapswhenenteringanewpartofthesystemunfamiliartothem).Anotherwaytosaythis:Thestupidestpersongoesnext.
ObservationbyMatt:Therehasbeenanongoingtensionbetweenwhatisinthedomainvswhatisinthereadmodel
Observation:Thereisalsoatensionbetweenwhattheapisshouldbe,whatshouldbeinprojections….whatinformationshouldbepresent,etc.Thedevilisinthedetails.
Myobservation:Tomakethesmallestmovepossiblewhilekeeping(mostofthetestspassing),theteamreadilyaddsscaffoldingcode(e.g.keepingthecode/APIthesamewhilemakingsmall,incrementalchangestothecodebase.
Observation:Sometimesthisextrascaffoldingbecomesmoreworkthananticipated.
Heuristic:Whenthereissomethingincomplete/notthoroughabouttestcodeadd@wipnotation(ignoredbyCItooling)---examples@wiponincompleteassertions
Mattstated,we’velearnednottonamethetestsfortheevent(there’saheuristichereabouttestnames,Isuspect)
Wediscussedaboutwhat“approval”meansandwhenareleaseis“frozen”w/respecttoitstests.[Isuspectthatif“approval”isgoingtobeaninformalprocess,andthateventuallymultiplepeoplemightwantto“approve”arelease,thenitmightmakesenseto“freeze”areleaseanditstestsatthetime…orkeeptrackofreleaseapprovalsandthetests(thatmightbedifferent?).Thisshouldnotbeoverlycomplicatedimo.Istherealreq’tauditability+visibilityofcollaborativestate?Or???)]
Notes from a Remote Mobbing Session with Cucumber folks
![Page 69: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/69.jpg)
Distill what you decide: �Document Design Decisions*
Title Context - Forces at play Decision - Stated with active voice: "We will ..." Status - “proposed” or “accepted” later may be “deprecated” or “superseded” Consequences positive, negative, and neutral that affect the team and project in the future
*Thanks to Michael Nygard http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions Useful link to github project on decision records: https://github.com/joelparkerhenderson
![Page 70: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/70.jpg)
Michiel Overeem
5. Distill What You Hear
![Page 71: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/71.jpg)
![Page 72: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/72.jpg)
Some of My Cherished Heuristics for Validating Data
× Perform simple edits (syntactic) in browser code
× Don’t trust browser-validated edits.
× Reapply them if receiving requests from an untrusted source
× Consistently assign validation responsibilities to framework-specific validation classes
× Consistently use domain validation and constraint enforcement patterns
![Page 73: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/73.jpg)
One of My Heuristics: By characterizing a domain entity’s attributes you can identify needed system behaviors
× Descriptive Attributes reflect a domain’s properties (not identity).
× Time-dependent attributes Where maintaining a history of past values is important.
× Lifecycle state attributes Some entities go through a one-way lifecycle, from initial to final state.
× Operational state Some entities switch between different states. The state it is currently in determines how it behaves.
2001
![Page 74: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/74.jpg)
![Page 75: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/75.jpg)
Heuristic*: Distinguish between “superficial” and “domain” validations and handle them differently
1. “superficial”: what must be true, regardless of the state of the domain Heuristic: Validate these before issuing a command, ideally on the client side as well as the server side
2. “superficial” but requires lookup of other information Heuristic: Validate in the service before invoking the command
3. “domain”: validity of a command is dependent on the state of the model Heuristic: Validate in domain objects
*http://danielwhittaker.me/2016/04/20/how-to-validate-commands-in-a-cqrs-application/
![Page 76: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/76.jpg)
Let’s Just Get On With It
© Can Stock Photo / Zinkevych
![Page 77: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/77.jpg)
Sorting things out…
![Page 78: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/78.jpg)
![Page 79: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/79.jpg)
Practice being intentional
Write and share your heuristics with others
Expect them to grow and evolve
Keep Your Heuristics Alive
@rebeccawb
![Page 80: Grow Your Personal Design Heuristics Keynote · Talk with developers Talk with end users System experts Pattern 3.1: Chat with the Maintainers Pattern 3.4: Interview During Demo Compile](https://reader035.vdocuments.mx/reader035/viewer/2022070918/5fb8628247c8c56ab475a402/html5/thumbnails/80.jpg)
Thank you! [email protected] www.wirfs-brock.com/blog www.wirfs-brock.com Heuristics blog posts: wirfs-brock.com/blog/2019/03/20/growing-your-personal-design-heuristics wirfs-brock.com/blog/2019/04/04/what-do-typical-design-heuristics-look wirfs-brock.com/blog/2019/04/12/writing wirfs-brock.com/blog/2019/04/19/nothing-ever-goes-exactly-by-the-book wirfs-brock.com/blog/2019/04/25/what-we-say-versus-what-we-do DDD Heuristics website: https://www.dddheuristics.com
@rebeccawb