watch your language, young man!
TRANSCRIPT
Watch your language, young man!
A short story about an impact of language on software development.
$ whoami
● Paweł Wacławczyk
● I am passionate about making life easier.
Which applies to software development too :-)
● Software developer at Clearcode
since November 2014.
● @pawaclawczyk
What is a language?
What is a language?
Wikipedia:
„Language is the human ability to acquire and use complex systems of communication, and a language is any specific example of such a system.”
What is a language?
Wikipedia:
„Language is the human ability to acquire and use complex systems of communication, and a language is any specific example of such a system.”
What is a language?
Wikipedia:
„Language is the human ability to acquire and use complex systems of communication, and a language is any specific example of such a system.”
Why shall we care about
language?
„There are only two hard things in Computer Science: cache invalidation
and naming things.”
-- Phil Karlton
„There are only two hard things in Computer Science: cache invalidation
and naming things.”
-- Phil Karlton
„There are only two hard things in Computer Science: cache invalidation, naming things and off-by-one errors.”
:-)
If we care, then we can benefit from it.
● understanding and focusing on the bussiness value,
If we care, then we can benefit from it.
● understanding and focusing on the bussiness value,
● understanding the problem domain and it's environment,
If we care, then we can benefit from it.
● understanding and focusing on the bussiness value,
● understanding the problem domain and it's environment,
● deeper exploring of the domain,
If we care, then we can benefit from it.
● understanding and focusing on the bussiness value,
● understanding the problem domain and it's environment,
● deeper exploring of the domain,
● deliberated discovery,
If we care, then we can benefit from it.
● understanding and focusing on the bussiness value,
● understanding the problem domain and it's environment,
● deeper exploring of the domain,
● deliberated discovery,
● use complex architectural and design patterns,
If we care, then we can benefit from it.
● understanding and focusing on the bussiness value,
● understanding the problem domain and it's environment,
● deeper exploring of the domain,
● deliberated discovery,
● use complex architectural and design patterns,
● knowledge sharing.
If we care, then we can benefit from it.
How can we work with
language?
Understand where are you going?
And what is more important - why?
Talk the same language as your bussiness is.
Focus on goal your bussiness want to achieve.
„Good goals should be translatable to money, so we can decide what the appropriate return on
investment is.”
-- Gojko Adzic
Impact mapping
„Make impacts, not software.”
-- Gojko Adzic
Impact mapping
„Impact Mapping: Making a big impact with software products and projects”
Gojko Adzic (2012)
Impact mapping
Impact mapping
WHY?
● Why are we doing this?
● State goals for the problem to be solved.
Impact mapping
WHO?
● Who can produce the desired effect?
● Who can obstruct it?
● Who will consume and buy our product?
● Who will be impacted by it?
Impact mapping
HOW?
● How should our actors behavior change?
● How can they help us to achieve the goal?
● How can they obstruct or prevent us from
succeding?
Impact mapping
WHAT?
● What can we deliver?
● This may, or may not, be software features.
Explore the domain
Event storming
Event storming
Event storming
Event storming
● invite the right people,
Event storming
● invite the right people,
● provide unlimited space,
Event storming
● invite the right people,
● provide unlimited space,
● explore domain starting from domain events,
Event storming
● invite the right people,
● provide unlimited space,
● explore domain starting from domain events,
● look for aggregates,
Event storming
● invite the right people,
● provide unlimited space,
● explore domain starting from domain events,
● look for aggregates,
● explore subdomains,
Event storming
● invite the right people,
● provide unlimited space,
● explore domain starting from domain events,
● look for aggregates,
● explore subdomains,
● explore bounded contexts.
Event storming
It is all about the knowledge!
Learn as much as possible in the
shortest possible time.
Ubiquitous Language
„Domain-Driven Design: Tackling Complexity in the Heart of Software” (aka „Blue Book”)
by Eric Evans (2003)
Ubiquitous Language
The idea is to use this language as a way to explore our Domain and, with the help of the
Domain experts, capture it in a Domain Model - a useful abstraction of the business, captured in the
code.
Ubiquitous Language
The idea is to use this language as a way to explore our Domain and, with the help of the
Domain experts, capture it in a Domain Model - a useful abstraction of the business, captured in the
code.
Ubiquitous Language
The idea is to use this language as a way to explore our Domain and, with the help of the
Domain experts, capture it in a Domain Model - a useful abstraction of the business, captured in the
code.
Design and develop
Behavior-Driven Development
BDD. Specification by Example
1) elaborate requirements
BDD. Specification by Example
1) elaborate requirements
2) use domain language
BDD. Specification by Example
1) elaborate requirements
2) use domain language
3) became tests
BDD. Specification by Example
„Specification by Example: How Successful Teams Deliver the Right Software”
Gojko Adzic (2011)
Behavior-Driven Development
Brings together the idea of Test-Driven
Development and the Ubiquitous Language from
Domain-Driven Design.
Behavior-Driven Development
Brings together the idea of Test-Driven
Development and the Ubiquitous Language from
Domain-Driven Design.
Behavior-Driven Development
Brings together the idea of Test-Driven
Development and the Ubiquitous Language from
Domain-Driven Design.
Behavior-Driven Development
1) Can have a form of user story from Agile Software Develpoment.
Feature: [Doing things] In order to [achieve conrete business goal] As [an actor who can achieve the goal] I want to [perform actions towards achieving the goal]
Behavior-Driven Development
Feature: Register transaction In order to track incoming payments As an owner I want to register transaction
Scenario: Register transaction ...
Scenario: Register transaction for non existing payment subscription ...
Scenario: Register transaction with different currency than subscription currency ...
Behavior-Driven Development
Behavior-Driven Development
2) It can also be applied on more technical level. In that case it takes a form of specification.
tests\unit\...\PaymentSubscription
[x] it settles new payment subscription [x] it registers transactions [x] it registers unsuccessful transactions
Behavior-Driven Development
Pattern Language
Pattern Language
„A Pattern Language:
Towns, Buildings, Construction”
Christopher Alexander (1977)
Pattern Language
„Using Pattern Languages
for Object-Oriented Programs”
Kent Beck and Ward Cunnigham
(OOPSLA, 1987)
Pattern Language
1) Context
Pattern Language
1) Context
2) Problem
Pattern Language
1) Context
2) Problem
3) Solution
Pattern Language
1) Context
2) Problem
3) Solution
4) Relation with another patterns
Thank you :-)
One more thing...
join me at xDD ninjas meetings.
Q & A