SlideShare ist ein Scribd-Unternehmen logo
1 von 96
Downloaden Sie, um offline zu lesen
EagerDesign
by @_md
♞
marcelloduarte
Introducing
marcelloduarte
@_md
#EagerDesign
agileislazy
@_md#EagerDesign
"Makethecommitmentatthelast

responsiblemoment"
Preston Smith
decide later
softwareisaboutpeople
@_md#EagerDesign
ageofexcess
@_md#EagerDesign
subtraction
@_md#EagerDesign
subtraction
@_md#EagerDesign
lawsofsubtraction
@_md
lawsofsubtraction
whatisn’ttherecanoftentrumpwhatis.thesimplest
rulescreatethemosteffectiveexperience.limiting
informationengagesimagination.creativitythrives
underintelligentconstraints.breakistheimportant
partofbreakthrough.doingsomethingisn’talways
betterthandoingnothing.
Matthew E. May
EagerDesign
how
♞
Jumptotheproblemworthsolving
Eagerlyreplaceprimitiveswithtypes
Compose[thedomainalgebra] inside-out
Avoidmutablestate
#1
#2
#3
#4
@_md#EagerDesign
outside-in
♞
outside-in
unittest code
refactor
acceptance
ui/controller/views
orm,libs,domainobjects
frameworkstuff(forms…)
model/view/controller
events
outside-in
UI
Domain
core
Application
Infrastructure
mobileUI
port/adapter
port/adapterDB
https://pbs.twimg.com/media/CHyUAukWgAA5iYS.jpg
reads
writes
therightoutside
http://bit.ly/modellingbyexample
http://bit.ly/whencucumbersgobad
@_md#EagerDesign
{
outside-in
slow
misleading
complex
restrictscomposability
when?
EagerDesign
when
done
trivial
done

nottrivial
notdone
noidea
[based on Cynefin, Snowden 03]
@_md#EagerDesign
EagerDesign
when
done
trivial
done

nottrivial
notdone
noidea
[based on Cynefin, Snowden 03]
Outside-in
@_md#EagerDesign
EagerDesign
when
done
trivial
done

nottrivial
notdone
noidea
[based on Cynefin, Snowden 03]
EagerDesign
Outside-in
@_md#EagerDesign
EagerDesign
when
done
trivial
done

nottrivial
notdone
noidea
[based on Cynefin, Snowden 03]
EagerDesign
Outside-in
¯_(ツ)_/¯
@_md#EagerDesign
Example
{
chessapp
weaddplayers
itgeneratestheschedule
wecanentertheresults
wecanseetheranking
TRIVIAL
TRIVIAL
TRIVIAL
EagerDesign
@_md
{
domainrules
playerswillplaywitheveryotherplayer
playerscan'tplaytwiceinthesameround
everyplayermustplayineveryround
playersmustplaytwicewithanotherplayer
@_md
HowdoIconvert

alistofthings

intoalistofuniquelists

ofuniquepairs?
Letmethink
a b c d e f g h
List of things
a b c d e f g h
List of things
Pairs
a b c d
h g f e
Pairs
a b c d
h g f e
Shift to the right
a b c d
h g f ee
We haz roundz! :o)
a b c d
h g f ee
r1 r2 r3 r4
r5 r6 r7
+ r1 r2 r3 r4
r5 r6 r7
inverse
( )
r1 r2 r3 r4
r5 r6 r7 r8
r9 r10 r11 r12
r13 r14
shuffle
( )
lawsofsubtraction
whatisn’ttherecanoftentrumpwhatis.thesimplest
rulescreatethemosteffectiveexperience.limiting
informationengagesimagination.creativitythrives
underintelligentconstraints.breakistheimportant
partofbreakthrough.doingsomethingisn’talways
betterthandoingnothing.
Matthew E. May
#1Jumptotheproblemworthsolving
@_md#EagerDesign
http://github.com/MarcelloDuarte/phunkie
ImmList
a b c d e f g hhead
a b c d e f g htail
a b c d e f g hinit
a b c d e f g hlast
concat(
head($players),
last($players),
init(tail($players))
function shift(ImmList $players)
{
return concat(head($players),
last($players),
init(tail($players))
);
}
function shift(ImmList $players)
{
return concat(head($players),
last($players),
init(tail($players))
);
}
function round(ImmList $players)

{
$sides = $players->splitAt($players->length/2);
return $sides->_1->zip($sides->_2->reverse());
}
function rounds(ImmList $players)

{
}
function rounds(ImmList $players, $rounds = [])

{
$rounds[] = round($players);
return count($rounds) < $players->length - 1 ?
rounds(shift($players), $rounds) :

ImmList(...$rounds);
}
function rounds(ImmList $players, $rounds = [])

{
$rounds[] = round($players);
return count($rounds) < $players->length - 1 ?
rounds(shift($players), $rounds) :

ImmList(...$rounds);
}
function rounds(ImmList $players, $rounds = [])

{
$rounds[] = round($players);
return count($rounds) < $players->length - 1 ?
rounds(shift($players), $rounds) :

ImmList(...$rounds);
}
function rounds(ImmList $players, $rounds = [])

{
$rounds[] = round($players);
return count($rounds) < $players->length - 1 ?
rounds(shift($players), $rounds) :

ImmList(...$rounds);
}
#3Compose
function rounds(ImmList $players, $rounds = [])

{
$rounds[] = round($players);
return count($rounds) < $players->length - 1 ?
rounds(shift($players), $rounds) :

ImmList(...$rounds);
}
#4Avoidmutablestate
function rounds(ImmList $players, $rounds = [])

{
$rounds[] = round($players);
return count($rounds) < $players->length - 1 ?
rounds(shift($players), $rounds) :

ImmList(...$rounds);
}
function schedule(ImmList $players)

{
return concat(rounds($players),

inverse(rounds($players));
}
#2Eagerlyreplaceprimitiveswithtypes
@_md#EagerDesign
“Mymathbackgroundmademerealise
thateachobjectcouldhaveseveral
algebrasassociatedwithit,andthere
couldbefamiliesofthese,andthatthese
wouldbeveryveryuseful...
...Imadeupaterm"genericity"for

dealingwithgenericbehavioursina

quasi-algebraicform...
...Ididn'tlikethewaySimulaIorSimula
67didinheritance.SoIdecidedtoleave
outinheritanceasabuilt-infeatureuntilI
understooditbetter.”
AlanKay
http://bit.ly/meaning-­‐of-­‐oo
type Player = string;
type Players = ImmList<Player>;

type Match = Pair<Player,Player>

type Round = ImmList<Match>;

type Rounds = ImmList<Round>;

type Schedule = Rounds;



function shift(Players $players): Players
{
return concat(head($players),
last($players),
init(tail($players))
);
}
function round(Players $players): Round

{
$sides = $players->splitAt($players->length/2);
return $sides->_1->zip($sides->_2->reverse());
}
function rounds(Players $players, $rounds = [])

: Rounds
{
$rounds[] = round($players);
return count($rounds) < $players->length - 1 ?
rounds(shift($players), $rounds) :

ImmList(...$rounds);
}
function schedule(Players $players): Rounds

{
return concat(rounds($players),

inverse(rounds($players));
}
Composethedomainalgebra
inside-out
@_md#EagerDesign
namespace MdChessScheduleGeneration;
shift(Players $players): Players

round(Players $players): Round
rounds(Players $players): Rounds
schedule(Players $players): Schedule
♞
Players => Schedule
Players => Rounds => Schedule
♞
Players => Round => Rounds => Schedule
♞
domainrulesaredefined
againsttypes
@_md#EagerDesign
{
domainrules
playerswillplaywitheveryotherplayer
playerscan'tplaytwiceinthesameround
everyplayermustplayineveryround
playersmustplaytwicewithanotherplayer
@_md
richdomainmodelvs

leandomainmodel
S
S
S
S
S
S
@_md#EagerDesign
richdomain
ImmutableState
ImmutableState
ImmutableState
B B
leandomain
Laws
InterpretingServicesAgency
Example
@_md#EagerDesign
def request

def decline

def amend

def accept

def done

def request(details:JobDetails): Job

def decline(ref:JobRef): Job

def amend(details:JobDetails): Job => Option[TimeSheet]

def accept(ref:JobRef): Job => Option[TimeSheet]

def done(ref:JobRef): TimeSheet => Remittance
trait JobService
{

def request(details:JobDetails): Job

def decline(ref:JobRef): Job

def amend(details:JobDetails):Job => Option[TimeSheet]
def accept(ref:JobRef): Job => Option[TimeSheet]

def done(ref:JobRef): TimeSheet => Remittance
}
trait JobService
{

def request(details:JobDetails): Job

def decline(ref:JobRef): Job

def amend(details:JobDetails):Job => Option[TimeSheet]
def accept(ref:JobRef): Job => Option[TimeSheet]

def done(ref:JobRef): TimeSheet => Remittance
}
f(a:A):M[B]



g(a:B):M[C]
f(a:A):M[B]

f(a) map g = M[M[C]]


g(a:B):M[C]
f(a:A):M[B]

join f(a) map g = M[C]


g(a:B):M[C]
f(a:A):M[B]

andThen


g(a:B):M[C]
request andThen
amend andThen
done
def execute(input:Input): Unit
path = input("path").getOrElse("specs")
loadSpecs(path) andThen
runSpecs andThen
presentResults
what’stheeagerpoint?
@_md#EagerDesign
merging2cells!!
@_md#EagerDesign
{
3cases
samevalue
differentvalue
righthandsideis
empty
if ($this->value == $another->value) {
return Pair(Cell(),
Cell($this->value + $another->value));
} elseif ($another->isEmpty()) {
return Pair(Cell(), Cell($this->value));
}
return Pair(Cell($this->value), Cell($another->value));
if ($this->value == $another->value) {
return Pair(Cell(),
Cell($this->value + $another->value));
} elseif ($another->isEmpty()) {
return Pair(Cell(), Cell($this->value));
}
return Pair(Cell($this->value), Cell($another->value));
if ($this->value == $another->value) {
return Pair(Cell(),
Cell($this->value + $another->value));
} elseif ($another->isEmpty()) {
return Pair(Cell(), Cell($this->value));
}
return Pair(Cell($this->value), Cell($another->value));
function swipe($lines)
{

return $lines->map(function ($line) {


$lineCopy = mergeLine($line);

while (!isLineMerged($lineCopy)) {

$lineCopy = mergeLine($lineCopy);
}

return $lineCopy;

});

}
EagerDesign
♞
Jumptotheproblemworthsolving
Eagerlyreplaceprimitiveswithtypes
Compose[thedomainalgebra] inside-out
Avoidmutablestate
#1
#2
#3
#4
@_md#EagerDesign
marcelloduarte
@_md
#EagerDesign
Thankyou!
♞
@_md
bit.ly/inviqa-contact bit.ly/inviqa-careers
#EagerDesign

Weitere ähnliche Inhalte

Was ist angesagt?

SOLID Principle & Design Pattern.pdf
SOLID Principle & Design Pattern.pdfSOLID Principle & Design Pattern.pdf
SOLID Principle & Design Pattern.pdfrony setyawansyah
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~啓 杉本
 
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-previewAtsushi Nakamura
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門Yukei Wachi
 
【基礎編】社内向けMySQL勉強会
【基礎編】社内向けMySQL勉強会【基礎編】社内向けMySQL勉強会
【基礎編】社内向けMySQL勉強会Yuji Otani
 
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】DeNA
 
コンテナのユースケース考察
コンテナのユースケース考察コンテナのユースケース考察
コンテナのユースケース考察Shuji Yamada
 
Design Patterns (Tasarım Kalıpları)
Design Patterns (Tasarım Kalıpları)Design Patterns (Tasarım Kalıpları)
Design Patterns (Tasarım Kalıpları)nedirtv
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 FallYoshitaka Kawashima
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計増田 亨
 
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"InfraEngineer
 
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Scott Wlaschin
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Soudai Sone
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Scott Wlaschin
 
Celery: The Distributed Task Queue
Celery: The Distributed Task QueueCelery: The Distributed Task Queue
Celery: The Distributed Task QueueRichard Leland
 
Rapidly Iterating Across Platforms using Server-Driven UI
Rapidly Iterating Across Platforms using Server-Driven UIRapidly Iterating Across Platforms using Server-Driven UI
Rapidly Iterating Across Platforms using Server-Driven UILaura Kelly
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 

Was ist angesagt? (20)

SOLID Principle & Design Pattern.pdf
SOLID Principle & Design Pattern.pdfSOLID Principle & Design Pattern.pdf
SOLID Principle & Design Pattern.pdf
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
 
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
 
【基礎編】社内向けMySQL勉強会
【基礎編】社内向けMySQL勉強会【基礎編】社内向けMySQL勉強会
【基礎編】社内向けMySQL勉強会
 
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
 
コンテナのユースケース考察
コンテナのユースケース考察コンテナのユースケース考察
コンテナのユースケース考察
 
Design Patterns (Tasarım Kalıpları)
Design Patterns (Tasarım Kalıpları)Design Patterns (Tasarım Kalıpları)
Design Patterns (Tasarım Kalıpları)
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
 
Sprint retrospective
Sprint retrospectiveSprint retrospective
Sprint retrospective
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
 
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
 
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
 
Celery: The Distributed Task Queue
Celery: The Distributed Task QueueCelery: The Distributed Task Queue
Celery: The Distributed Task Queue
 
Rapidly Iterating Across Platforms using Server-Driven UI
Rapidly Iterating Across Platforms using Server-Driven UIRapidly Iterating Across Platforms using Server-Driven UI
Rapidly Iterating Across Platforms using Server-Driven UI
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 

Andere mochten auch

Functional Structures in PHP
Functional Structures in PHPFunctional Structures in PHP
Functional Structures in PHPMarcello Duarte
 
Tdd is Dead, Long Live TDD
Tdd is Dead, Long Live TDDTdd is Dead, Long Live TDD
Tdd is Dead, Long Live TDDJonathan Acker
 
Architecting your Content for the Unknown Consumer
Architecting your Content for the Unknown ConsumerArchitecting your Content for the Unknown Consumer
Architecting your Content for the Unknown ConsumerRichard Jones
 
Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Marcello Duarte
 
The framework as an implementation detail
The framework as an implementation detailThe framework as an implementation detail
The framework as an implementation detailMarcello Duarte
 

Andere mochten auch (8)

Empathy from Agility
Empathy from AgilityEmpathy from Agility
Empathy from Agility
 
Functional Structures in PHP
Functional Structures in PHPFunctional Structures in PHP
Functional Structures in PHP
 
Tdd is Dead, Long Live TDD
Tdd is Dead, Long Live TDDTdd is Dead, Long Live TDD
Tdd is Dead, Long Live TDD
 
Architecting your Content for the Unknown Consumer
Architecting your Content for the Unknown ConsumerArchitecting your Content for the Unknown Consumer
Architecting your Content for the Unknown Consumer
 
Deliberate practice
Deliberate practiceDeliberate practice
Deliberate practice
 
Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015
 
Barely Enough Design
Barely Enough DesignBarely Enough Design
Barely Enough Design
 
The framework as an implementation detail
The framework as an implementation detailThe framework as an implementation detail
The framework as an implementation detail
 

Ähnlich wie Introducing Eager Design

Metaprogramming and Folly
Metaprogramming and FollyMetaprogramming and Folly
Metaprogramming and FollyHaseeb Qureshi
 
4Developers: Norbert Wójtowicz- Data-Oriented Architecture
4Developers: Norbert Wójtowicz- Data-Oriented Architecture4Developers: Norbert Wójtowicz- Data-Oriented Architecture
4Developers: Norbert Wójtowicz- Data-Oriented ArchitecturePROIDEA
 
RubyEnRails2007 - Dr Nic Williams - DIY Syntax
RubyEnRails2007 - Dr Nic Williams - DIY SyntaxRubyEnRails2007 - Dr Nic Williams - DIY Syntax
RubyEnRails2007 - Dr Nic Williams - DIY SyntaxDr Nic Williams
 
Beyond Breakpoints: Advanced Debugging with XCode
Beyond Breakpoints: Advanced Debugging with XCodeBeyond Breakpoints: Advanced Debugging with XCode
Beyond Breakpoints: Advanced Debugging with XCodeAijaz Ansari
 
Getfilestruct zbksh
Getfilestruct zbkshGetfilestruct zbksh
Getfilestruct zbkshBen Pope
 
Getfilestruct zbksh(1)
Getfilestruct zbksh(1)Getfilestruct zbksh(1)
Getfilestruct zbksh(1)Ben Pope
 
Dart : one language to rule them all - MixIT 2013
Dart : one language to rule them all - MixIT 2013Dart : one language to rule them all - MixIT 2013
Dart : one language to rule them all - MixIT 2013Sébastien Deleuze
 
Architecture in an Agile World
Architecture in an Agile WorldArchitecture in an Agile World
Architecture in an Agile WorldDon McGreal
 
E-Primer Your Business Online
E-Primer Your Business OnlineE-Primer Your Business Online
E-Primer Your Business Onlineguestfc9d8a
 
Malli: inside data-driven schemas
Malli: inside data-driven schemasMalli: inside data-driven schemas
Malli: inside data-driven schemasMetosin Oy
 
optim function
optim functionoptim function
optim functionSupri Amir
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Damien Seguy
 
R Workshop for Beginners
R Workshop for BeginnersR Workshop for Beginners
R Workshop for BeginnersMetamarkets
 
Dip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityJames Titcumb
 
Dip Your Toes in the Sea of Security (CoderCruise 2017)
Dip Your Toes in the Sea of Security (CoderCruise 2017)Dip Your Toes in the Sea of Security (CoderCruise 2017)
Dip Your Toes in the Sea of Security (CoderCruise 2017)James Titcumb
 
Understanding our code with tests, schemas, and types
Understanding our code with tests, schemas, and typesUnderstanding our code with tests, schemas, and types
Understanding our code with tests, schemas, and typesMark Godfrey
 
pa-pe-pi-po-pure Python Text Processing
pa-pe-pi-po-pure Python Text Processingpa-pe-pi-po-pure Python Text Processing
pa-pe-pi-po-pure Python Text ProcessingRodrigo Senra
 
Padrino is agnostic
Padrino is agnosticPadrino is agnostic
Padrino is agnosticTakeshi Yabe
 

Ähnlich wie Introducing Eager Design (20)

Metaprogramming and Folly
Metaprogramming and FollyMetaprogramming and Folly
Metaprogramming and Folly
 
4Developers: Norbert Wójtowicz- Data-Oriented Architecture
4Developers: Norbert Wójtowicz- Data-Oriented Architecture4Developers: Norbert Wójtowicz- Data-Oriented Architecture
4Developers: Norbert Wójtowicz- Data-Oriented Architecture
 
RubyEnRails2007 - Dr Nic Williams - DIY Syntax
RubyEnRails2007 - Dr Nic Williams - DIY SyntaxRubyEnRails2007 - Dr Nic Williams - DIY Syntax
RubyEnRails2007 - Dr Nic Williams - DIY Syntax
 
Beyond Breakpoints: Advanced Debugging with XCode
Beyond Breakpoints: Advanced Debugging with XCodeBeyond Breakpoints: Advanced Debugging with XCode
Beyond Breakpoints: Advanced Debugging with XCode
 
Getfilestruct zbksh
Getfilestruct zbkshGetfilestruct zbksh
Getfilestruct zbksh
 
Getfilestruct zbksh(1)
Getfilestruct zbksh(1)Getfilestruct zbksh(1)
Getfilestruct zbksh(1)
 
Dart : one language to rule them all - MixIT 2013
Dart : one language to rule them all - MixIT 2013Dart : one language to rule them all - MixIT 2013
Dart : one language to rule them all - MixIT 2013
 
Introduction to Domain-Driven Design
Introduction to Domain-Driven DesignIntroduction to Domain-Driven Design
Introduction to Domain-Driven Design
 
Architecture in an Agile World
Architecture in an Agile WorldArchitecture in an Agile World
Architecture in an Agile World
 
E-Primer Your Business Online
E-Primer Your Business OnlineE-Primer Your Business Online
E-Primer Your Business Online
 
Malli: inside data-driven schemas
Malli: inside data-driven schemasMalli: inside data-driven schemas
Malli: inside data-driven schemas
 
optim function
optim functionoptim function
optim function
 
Quality code by design
Quality code by designQuality code by design
Quality code by design
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)
 
R Workshop for Beginners
R Workshop for BeginnersR Workshop for Beginners
R Workshop for Beginners
 
Dip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of Security
 
Dip Your Toes in the Sea of Security (CoderCruise 2017)
Dip Your Toes in the Sea of Security (CoderCruise 2017)Dip Your Toes in the Sea of Security (CoderCruise 2017)
Dip Your Toes in the Sea of Security (CoderCruise 2017)
 
Understanding our code with tests, schemas, and types
Understanding our code with tests, schemas, and typesUnderstanding our code with tests, schemas, and types
Understanding our code with tests, schemas, and types
 
pa-pe-pi-po-pure Python Text Processing
pa-pe-pi-po-pure Python Text Processingpa-pe-pi-po-pure Python Text Processing
pa-pe-pi-po-pure Python Text Processing
 
Padrino is agnostic
Padrino is agnosticPadrino is agnostic
Padrino is agnostic
 

Mehr von Marcello Duarte

Understanding craftsmanship
Understanding craftsmanshipUnderstanding craftsmanship
Understanding craftsmanshipMarcello Duarte
 
PhpSpec 2.0 ilustrated by examples
PhpSpec 2.0 ilustrated by examplesPhpSpec 2.0 ilustrated by examples
PhpSpec 2.0 ilustrated by examplesMarcello Duarte
 
Emergent design with phpspec
Emergent design with phpspecEmergent design with phpspec
Emergent design with phpspecMarcello Duarte
 
Pair Programming, TDD and other impractical things
Pair Programming, TDD and other impractical thingsPair Programming, TDD and other impractical things
Pair Programming, TDD and other impractical thingsMarcello Duarte
 
BDD For Zend Framework With PHPSpec
BDD For Zend Framework With PHPSpecBDD For Zend Framework With PHPSpec
BDD For Zend Framework With PHPSpecMarcello Duarte
 

Mehr von Marcello Duarte (10)

Transitioning to Agile
Transitioning to AgileTransitioning to Agile
Transitioning to Agile
 
Understanding craftsmanship
Understanding craftsmanshipUnderstanding craftsmanship
Understanding craftsmanship
 
Hexagonal symfony
Hexagonal symfonyHexagonal symfony
Hexagonal symfony
 
PhpSpec 2.0 ilustrated by examples
PhpSpec 2.0 ilustrated by examplesPhpSpec 2.0 ilustrated by examples
PhpSpec 2.0 ilustrated by examples
 
Emergent design with phpspec
Emergent design with phpspecEmergent design with phpspec
Emergent design with phpspec
 
Mocking Demystified
Mocking DemystifiedMocking Demystified
Mocking Demystified
 
Pair Programming, TDD and other impractical things
Pair Programming, TDD and other impractical thingsPair Programming, TDD and other impractical things
Pair Programming, TDD and other impractical things
 
BDD For Zend Framework With PHPSpec
BDD For Zend Framework With PHPSpecBDD For Zend Framework With PHPSpec
BDD For Zend Framework With PHPSpec
 
PHPSpec BDD for PHP
PHPSpec BDD for PHPPHPSpec BDD for PHP
PHPSpec BDD for PHP
 
PHPSpec BDD Framework
PHPSpec BDD FrameworkPHPSpec BDD Framework
PHPSpec BDD Framework
 

Kürzlich hochgeladen

H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 

Kürzlich hochgeladen (20)

E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 

Introducing Eager Design