If your team is an object,
what is its API?
(Object-Oriented Team Design)
Andrew Annett
@akannett
November 30, 2017
PLEASE NOTE
SLIDES ≠ PRESENTATION
• These slides are designed to be viewed in
conjunction with a human being talking and
interacting with you.
• They may not make much sense to you if you
were not at the live session.
Ex-roughneck
Ex-programmer
Ex-project/program manager
Life-long learner
Coach
Lean change advocate
Conversation partisan
(+Offshore sailor)
Who is Andrew?
Please hold your questions
until you have one
The Simple idea:
Let’s talk with teams about
organizing work in terms they use
every day – object-oriented
design.
It’s a simple idea but not a small
one...
Why is this important to software?
…object-oriented design is
fundamentally different … it
produces
software architectures
that are largely outside the realm of
structured design culture.
- Grady Booch, 1991
Why is this important to teams?
…object-oriented design is
fundamentally different … it
produces
organizational architectures
that are largely outside the realm of
structured design culture.
- Me, 2017
Private Kitchen methods + knowledgeMessagesPublic Restaurant Interface
Diner – Kitchen Object Relationship
Relationship is the infrastructure for tasks
Methods
An object is autonomous and can DO
stuff:
An object KNOWS (private) stuff:
Methods
Variables
Because it has
behaviour, an
object can be
thought of as an
“animated data
store”
Methods
Variables
Interface
An object interacts with others
via messages.
Methods
Variables
Interface
“You don’t send messages
because you have objects, you
have objects because you send
messages” – Sandi Metz
An object's autonomy doesn't
extend to choices
in shared
standards and
protocols.
Methods
Variables
Interface
An object's autonomy doesn't
extend to choices
in shared
standards and
protocols.
Methods
Variables
Interface
Team objects
coordinate via
behavioural,
technical, and
cultural standards.
What is an API*?
Technically, an API is a set
of rules that two sides of
an interaction agree to
follow. It’s implemented as
a public INTERFACE.
* Application Programming Interface
The value of an API
It separates how an object works
from the way it’s used
It makes future (internal) change
easier
! Bypassing it to depend on a
private method is a form of technical
(and organizational) debt
Taking advantage of an API
Create public interfaces that allow
senders to get (or do) what they
want without knowing how your
team implements its behavior.
POST
GET
PUT
DELETE
RESTful* messages types
* REpresentational State Transfer
Work on this initiative
Add this team memberPOST
Typical RESTful messages sent to Teams
Work on this initiative
Add this team member
Do this thing differently
Can you also do this thing?
POST
PUT
Typical RESTful messages sent to Teams
Work on this initiative
Add this team member
Do this thing differently
Can you also do this thing?
What are you working on?
When will you be done?
What skillsets are needed?
Who is dependent on you?
What skillsets does your team have?
What risks are you accepting?
What are your dependencies?
What will be delivered?
How is team morale?
POST
GET
PUT
Typical RESTful messages sent to Teams
Work on this initiative
Add this team member
Do this thing differently
Can you also do this thing?
What are you working on?
When will you be done?
What skillsets are needed?
Who is dependent on you?
What skillsets does your team have?
What risks are you accepting?
What are your dependencies?
What will be delivered?
How is team morale?
Stop working on current item(s)
Reduce team size
POST
GET
PUT
DELETE
Typical RESTful messages sent to Teams
Work on this initiative
Add this team member
Do this thing differently
Can you also do this thing?
What are you working on?
When will you be done?
What skillsets are needed?
Who is dependent on you?
What skillsets does your team have?
What risks are you accepting?
What are your dependencies?
What will be delivered?
How is team morale?
Stop working on current item(s)
Reduce team size
POST
GET
PUT
DELETE
Story map, options board
Working Agreement
Story map, options board
Release plan
Story map
Skills matrix
Release plan
Risk assessment
Defect density plot
Throughput histogram
Dependency graph
Cumulative Flow Diagram
Happiness Index
Dependency graph
Skills matrix
Useful METHODS to respond to messages
Show Defect Density
Your Code as a Crime Scene: Adam Tornhill
Make risk visible
Make risk visible
Show capability – Skills Matrix
Show capability – Skills Matrix
Show Throughput
Troy McGinnis - https://github.com/FocusedObjective
Map dependencies
Show team health – Sentiment Maps
Make your work visible – Story Maps
Make your work visible – Cumulative Flow
If you’re a reader:
David A Taylor
Business Engineering
with Object Technology
Dave Grey
The Connected
Company
David West
Object Thinking
Sandi Metz
Practical Object-
Oriented Design in
Ruby
Helpful OOD principles
S ingle Responsibility….
L iscov Substitution…
O pen/Closed (Extension/Modification)…
D ependency Inversion…
I nterface segregation……………
Unhelpful non-OOD principles
S ingleton
T ight Coupling
U ntestable
P remature Optimization
I ndescriptive naming
D uplication
Thanks for your attention!
@akannett
andrew@leanintuit.com

If your team is an object what is its API?

  • 1.
    If your teamis an object, what is its API? (Object-Oriented Team Design) Andrew Annett @akannett November 30, 2017
  • 2.
    PLEASE NOTE SLIDES ≠PRESENTATION • These slides are designed to be viewed in conjunction with a human being talking and interacting with you. • They may not make much sense to you if you were not at the live session.
  • 3.
    Ex-roughneck Ex-programmer Ex-project/program manager Life-long learner Coach Leanchange advocate Conversation partisan (+Offshore sailor) Who is Andrew?
  • 4.
    Please hold yourquestions until you have one
  • 5.
    The Simple idea: Let’stalk with teams about organizing work in terms they use every day – object-oriented design. It’s a simple idea but not a small one...
  • 6.
    Why is thisimportant to software? …object-oriented design is fundamentally different … it produces software architectures that are largely outside the realm of structured design culture. - Grady Booch, 1991
  • 7.
    Why is thisimportant to teams? …object-oriented design is fundamentally different … it produces organizational architectures that are largely outside the realm of structured design culture. - Me, 2017
  • 8.
    Private Kitchen methods+ knowledgeMessagesPublic Restaurant Interface Diner – Kitchen Object Relationship Relationship is the infrastructure for tasks
  • 9.
    Methods An object isautonomous and can DO stuff:
  • 10.
    An object KNOWS(private) stuff: Methods Variables
  • 11.
    Because it has behaviour,an object can be thought of as an “animated data store” Methods Variables Interface
  • 12.
    An object interactswith others via messages. Methods Variables Interface
  • 13.
    “You don’t sendmessages because you have objects, you have objects because you send messages” – Sandi Metz
  • 14.
    An object's autonomydoesn't extend to choices in shared standards and protocols. Methods Variables Interface
  • 15.
    An object's autonomydoesn't extend to choices in shared standards and protocols. Methods Variables Interface Team objects coordinate via behavioural, technical, and cultural standards.
  • 16.
    What is anAPI*? Technically, an API is a set of rules that two sides of an interaction agree to follow. It’s implemented as a public INTERFACE. * Application Programming Interface
  • 17.
    The value ofan API It separates how an object works from the way it’s used It makes future (internal) change easier ! Bypassing it to depend on a private method is a form of technical (and organizational) debt
  • 18.
    Taking advantage ofan API Create public interfaces that allow senders to get (or do) what they want without knowing how your team implements its behavior.
  • 19.
    POST GET PUT DELETE RESTful* messages types *REpresentational State Transfer
  • 20.
    Work on thisinitiative Add this team memberPOST Typical RESTful messages sent to Teams
  • 21.
    Work on thisinitiative Add this team member Do this thing differently Can you also do this thing? POST PUT Typical RESTful messages sent to Teams
  • 22.
    Work on thisinitiative Add this team member Do this thing differently Can you also do this thing? What are you working on? When will you be done? What skillsets are needed? Who is dependent on you? What skillsets does your team have? What risks are you accepting? What are your dependencies? What will be delivered? How is team morale? POST GET PUT Typical RESTful messages sent to Teams
  • 23.
    Work on thisinitiative Add this team member Do this thing differently Can you also do this thing? What are you working on? When will you be done? What skillsets are needed? Who is dependent on you? What skillsets does your team have? What risks are you accepting? What are your dependencies? What will be delivered? How is team morale? Stop working on current item(s) Reduce team size POST GET PUT DELETE Typical RESTful messages sent to Teams
  • 24.
    Work on thisinitiative Add this team member Do this thing differently Can you also do this thing? What are you working on? When will you be done? What skillsets are needed? Who is dependent on you? What skillsets does your team have? What risks are you accepting? What are your dependencies? What will be delivered? How is team morale? Stop working on current item(s) Reduce team size POST GET PUT DELETE Story map, options board Working Agreement Story map, options board Release plan Story map Skills matrix Release plan Risk assessment Defect density plot Throughput histogram Dependency graph Cumulative Flow Diagram Happiness Index Dependency graph Skills matrix Useful METHODS to respond to messages
  • 25.
    Show Defect Density YourCode as a Crime Scene: Adam Tornhill
  • 26.
  • 27.
  • 28.
    Show capability –Skills Matrix
  • 29.
    Show capability –Skills Matrix
  • 30.
    Show Throughput Troy McGinnis- https://github.com/FocusedObjective
  • 31.
  • 32.
    Show team health– Sentiment Maps
  • 33.
    Make your workvisible – Story Maps
  • 34.
    Make your workvisible – Cumulative Flow
  • 35.
    If you’re areader: David A Taylor Business Engineering with Object Technology Dave Grey The Connected Company David West Object Thinking Sandi Metz Practical Object- Oriented Design in Ruby
  • 36.
    Helpful OOD principles Single Responsibility…. L iscov Substitution… O pen/Closed (Extension/Modification)… D ependency Inversion… I nterface segregation……………
  • 37.
    Unhelpful non-OOD principles Singleton T ight Coupling U ntestable P remature Optimization I ndescriptive naming D uplication
  • 38.
    Thanks for yourattention! @akannett andrew@leanintuit.com