SlideShare une entreprise Scribd logo
1  sur  82
Build the Roof
First
Brendon Page
@brendonpaginate
Who are you?
Developer
Engineer
Architect
Craftsmen
Overview
Challenge your
thinking on the
order in which
software is built
The
Wright
Brothers
Metaphor
Ship as
Aircraft
-VS-
Bicycle as
Aircraft
“The very ability that
allows us to
comprehend one
concept in terms of
another will necessarily
hide aspects of the
concept”
Ship metaphor
hides aspects
about aircraft
that the
bicycle metaphor
doesn’t
Stability
Are we like the
ship builders?
What is the
metaphor of
our industry?
Building
Metaphor
Is it hiding
anything?
What
aspects of
the
metaphor
don’t exist
in the
software
world but
manifest
Gravity
&
Hard to
change
Examine these in
terms of
Point of input
&
Direction of
execution
Quick definition
check
Point of input
“Any point at
which data enters
the system”
Point of input
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Point of input
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Direction of
Execution
“The order in
which code runs”
Direction of execution
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Direction of execution
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Gravity
In the
physical world
You can’t build
on top of nothing
Manifests in the
software world as
You can’t call
something that
doesn’t exist
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Against
direction
of
execution
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Start is far
from point
of input
What is the cost?
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Need to
guess all
the way to
the point of
input
guessing = hard, time consuming, open mistakes
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
…
…
…
Program.Load()
Greater the
distance
from point
of input,
greater the
more
guessing
needed
What is the
hidden option?
Currently
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Against
direction
of
execution
Hidden option
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
With
direction
of
execution
Code in direction of execution
Start at point
of input
Code in
direction
of
execution
Code in direction of execution
Program.Main(string[] args)
Start at point
of input
Code in
direction
of
execution
Code in direction of execution
Program.Main(string[] args)
Program.Calculate()
Start at point
of input
Code in
direction
of
execution
Code in direction of execution
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Start at point
of input
Code in
direction
of
execution
Code in direction of execution
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Start at point
of input
Code in
direction
of
execution
Refactor in direction of execution
Start at point
of input
Refactor in
direction
of
execution
Refactor in direction of execution
Program.Main(string[] args)
Start at point
of input
Refactor in
direction
of
execution
Refactor in direction of execution
Program.Main(string[] args)
Program.Calculate()
Start at point
of input
Refactor in
direction
of
execution
Refactor in direction of execution
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Start at point
of input
Refactor in
direction
of
execution
Refactor in direction of execution
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Start at point
of input
Refactor in
direction
of
execution
Abstract in direction of execution
Start at point
of input
Abstract in
direction
of
execution
Abstract in direction of execution
Program.Main(string[] args)
Start at point
of input
Abstract in
direction
of
execution
Abstract in direction of execution
Program.Main(string[] args)
ICalculator.Calculate()
Start at point
of input
Abstract in
direction
of
execution
Abstract in direction of execution
Program.Main(string[] args)
ICalculator.Calculate()
AlwaysZeroCalculator.Calculate()
Start at point
of input
Abstract in
direction
of
execution
Abstract in direction of execution
Program.Main(string[] args)
ICalculator.Calculate()
RealDealValidator.Calculate()
Start at point
of input
Abstract in
direction
of
execution
Abstract in direction of execution
Program.Main(string[] args)
ICalculator.Calculate()
RealDealValidator.Calculate()
IRepository.Load()
…
Start at point
of input
Abstract in
direction
of
execution
Hidden option
Start at point
of input
Build in
direction
of
execution
Hard to change
In the
physical world
Things are hard
to change once
built without
destroying them
Manifests in the
software world as
Code is hard to
change so it
needs to be built
right the first
time
Hard to change in the software
world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Hard to change in the software
world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load() Build all of
this
Hard to change in the software
world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Then build
all of this
Hard to change in the software
world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Then build
all of this
Hard to change in the software
world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Before you
get to the
point of
input
What is the cost?
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Risk
building
unneeded
or incorrect
things
Gravity in the software world
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Takes long
to build,
can only get
feedback
when point
of input is
reached
What is the
hidden option?
Currently
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Hidden option
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Iterate in direction of execution
Start at point
of input
Iterate in
direction
of
execution
Iterate in direction of execution
Program.Main(string[] args)
Start at point
of input
Iterate in
direction
of
execution
Only
building as
much as
you need
Iterate in direction of execution
Program.Main(string[] args)
Program.Calculate()
Start at point
of input
Iterate in
direction
of
execution
Only
building as
much as
you need
Iterate in direction of execution
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Start at point
of input
Iterate in
direction
of
execution
Only
building as
much as
you need
Iterate in direction of execution
Program.Main(string[] args)
Program.Calculate()
Program.Find()
Program.Load()
Start at point
of input
Iterate in
direction
of
execution
Only
building as
much as
you need
Hidden option
Start at point
of input
Iterate in
direction
of
execution
Review
Build
against
direction
of
execution
Gravit
y
Build the
whole of what
we’ve guessed
Hard to
change
Start far
from point
of input
Lengthens
feedback
loops
Requires
guessing what
to build
Review
Build in
direction
of
execution
Only building enough to
know what to build next
Start at
point of
input
Shortens
feedback
loops
Removes need
for guessing
what to build
Build the roof
first
Three rules of building the roof
first
1. Start at the point of input that
adds the most value.
2. Build in the direction of
execution.
3. Only build enough to know
what to build next in the
direction of execution.
Summary
Think about the
order in which
you build
software
Regardless of the
metaphor you
use,
ask what it is
hiding from you
Thank you!
Questions?
@brendonpaginate

Contenu connexe

Similaire à Build the Roof First

Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech Talk Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech Talk Ganesh Samarthyam
 
Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech TalkRefactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech TalkCodeOps Technologies LLP
 
High-level Programming Languages: Apache Pig and Pig Latin
High-level Programming Languages: Apache Pig and Pig LatinHigh-level Programming Languages: Apache Pig and Pig Latin
High-level Programming Languages: Apache Pig and Pig LatinPietro Michiardi
 
Eclipse Con 2015: Codan - a C/C++ Code Analysis Framework for CDT
Eclipse Con 2015: Codan - a C/C++ Code Analysis Framework for CDTEclipse Con 2015: Codan - a C/C++ Code Analysis Framework for CDT
Eclipse Con 2015: Codan - a C/C++ Code Analysis Framework for CDTElena Laskavaia
 
Java parallel programming made simple
Java parallel programming made simpleJava parallel programming made simple
Java parallel programming made simpleAteji Px
 
Aspect-Oriented Programming
Aspect-Oriented ProgrammingAspect-Oriented Programming
Aspect-Oriented ProgrammingAndrey Bratukhin
 
4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdf4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdfamitbhachne
 
.gradle 파일 정독해보기
.gradle 파일 정독해보기.gradle 파일 정독해보기
.gradle 파일 정독해보기경주 전
 
Computer network in java
Computer network in java Computer network in java
Computer network in java YasirAli74993
 
Cloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan GasimovCloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan GasimovGlobalLogic Ukraine
 
Maciej Treder "Server-side rendering with Angular—be faster and more SEO, CDN...
Maciej Treder "Server-side rendering with Angular—be faster and more SEO, CDN...Maciej Treder "Server-side rendering with Angular—be faster and more SEO, CDN...
Maciej Treder "Server-side rendering with Angular—be faster and more SEO, CDN...Fwdays
 
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)Ontico
 
Unit testing of spark applications
Unit testing of spark applicationsUnit testing of spark applications
Unit testing of spark applicationsKnoldus Inc.
 
Basic structure of C++ program
Basic structure of C++ programBasic structure of C++ program
Basic structure of C++ programmatiur rahman
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftOleksandr Stepanov
 
Big-data-analysis-training-in-mumbai
Big-data-analysis-training-in-mumbaiBig-data-analysis-training-in-mumbai
Big-data-analysis-training-in-mumbaiUnmesh Baile
 
Clojure, Plain and Simple
Clojure, Plain and SimpleClojure, Plain and Simple
Clojure, Plain and SimpleBen Mabey
 
Iwsm2014 measuring cosmic software size from functional execution traces of...
Iwsm2014   measuring cosmic software size from functional execution traces of...Iwsm2014   measuring cosmic software size from functional execution traces of...
Iwsm2014 measuring cosmic software size from functional execution traces of...Nesma
 
Quick Tour to Front-End Unit Testing Using Jasmine
Quick Tour to Front-End Unit Testing Using JasmineQuick Tour to Front-End Unit Testing Using Jasmine
Quick Tour to Front-End Unit Testing Using JasmineGil Fink
 

Similaire à Build the Roof First (20)

Icpc08b.ppt
Icpc08b.pptIcpc08b.ppt
Icpc08b.ppt
 
Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech Talk Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech Talk
 
Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech TalkRefactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech Talk
 
High-level Programming Languages: Apache Pig and Pig Latin
High-level Programming Languages: Apache Pig and Pig LatinHigh-level Programming Languages: Apache Pig and Pig Latin
High-level Programming Languages: Apache Pig and Pig Latin
 
Eclipse Con 2015: Codan - a C/C++ Code Analysis Framework for CDT
Eclipse Con 2015: Codan - a C/C++ Code Analysis Framework for CDTEclipse Con 2015: Codan - a C/C++ Code Analysis Framework for CDT
Eclipse Con 2015: Codan - a C/C++ Code Analysis Framework for CDT
 
Java parallel programming made simple
Java parallel programming made simpleJava parallel programming made simple
Java parallel programming made simple
 
Aspect-Oriented Programming
Aspect-Oriented ProgrammingAspect-Oriented Programming
Aspect-Oriented Programming
 
4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdf4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdf
 
.gradle 파일 정독해보기
.gradle 파일 정독해보기.gradle 파일 정독해보기
.gradle 파일 정독해보기
 
Computer network in java
Computer network in java Computer network in java
Computer network in java
 
Cloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan GasimovCloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan Gasimov
 
Maciej Treder "Server-side rendering with Angular—be faster and more SEO, CDN...
Maciej Treder "Server-side rendering with Angular—be faster and more SEO, CDN...Maciej Treder "Server-side rendering with Angular—be faster and more SEO, CDN...
Maciej Treder "Server-side rendering with Angular—be faster and more SEO, CDN...
 
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
 
Unit testing of spark applications
Unit testing of spark applicationsUnit testing of spark applications
Unit testing of spark applications
 
Basic structure of C++ program
Basic structure of C++ programBasic structure of C++ program
Basic structure of C++ program
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
 
Big-data-analysis-training-in-mumbai
Big-data-analysis-training-in-mumbaiBig-data-analysis-training-in-mumbai
Big-data-analysis-training-in-mumbai
 
Clojure, Plain and Simple
Clojure, Plain and SimpleClojure, Plain and Simple
Clojure, Plain and Simple
 
Iwsm2014 measuring cosmic software size from functional execution traces of...
Iwsm2014   measuring cosmic software size from functional execution traces of...Iwsm2014   measuring cosmic software size from functional execution traces of...
Iwsm2014 measuring cosmic software size from functional execution traces of...
 
Quick Tour to Front-End Unit Testing Using Jasmine
Quick Tour to Front-End Unit Testing Using JasmineQuick Tour to Front-End Unit Testing Using Jasmine
Quick Tour to Front-End Unit Testing Using Jasmine
 

Plus de brendonpage

Applying big data thinking to normal size data
Applying big data thinking to normal size dataApplying big data thinking to normal size data
Applying big data thinking to normal size databrendonpage
 
Lean outside in software development
Lean outside in software developmentLean outside in software development
Lean outside in software developmentbrendonpage
 
Delivering Technical Debt
Delivering Technical DebtDelivering Technical Debt
Delivering Technical Debtbrendonpage
 
The secret sauce behind {binding} in xaml
The secret sauce behind {binding} in xamlThe secret sauce behind {binding} in xaml
The secret sauce behind {binding} in xamlbrendonpage
 
String kata in 20 minutes
String kata in 20 minutesString kata in 20 minutes
String kata in 20 minutesbrendonpage
 
Connect and search your data
Connect and search your dataConnect and search your data
Connect and search your databrendonpage
 
Information radiators
Information radiatorsInformation radiators
Information radiatorsbrendonpage
 
Delivering technical debt
Delivering technical debtDelivering technical debt
Delivering technical debtbrendonpage
 

Plus de brendonpage (8)

Applying big data thinking to normal size data
Applying big data thinking to normal size dataApplying big data thinking to normal size data
Applying big data thinking to normal size data
 
Lean outside in software development
Lean outside in software developmentLean outside in software development
Lean outside in software development
 
Delivering Technical Debt
Delivering Technical DebtDelivering Technical Debt
Delivering Technical Debt
 
The secret sauce behind {binding} in xaml
The secret sauce behind {binding} in xamlThe secret sauce behind {binding} in xaml
The secret sauce behind {binding} in xaml
 
String kata in 20 minutes
String kata in 20 minutesString kata in 20 minutes
String kata in 20 minutes
 
Connect and search your data
Connect and search your dataConnect and search your data
Connect and search your data
 
Information radiators
Information radiatorsInformation radiators
Information radiators
 
Delivering technical debt
Delivering technical debtDelivering technical debt
Delivering technical debt
 

Dernier

HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 

Dernier (20)

HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 

Build the Roof First

Notes de l'éditeur

  1. Think about: The titles we use. How you identified yourself earlier. The phrases we use. Architecture, build, design, develop, patterns, systems.
  2. There are two things with “hard to change” to consider, first is the effort required to make a change once all thinking has been done, secondly the effort that goes into the thinking behind the change. Hard to change in this context does not refer to the thinking portion only the effort required to make the change itself. Interestingly in the physical world making the change is more effort than the thinking and in the software world this is inverted.
  3. Any point where data enters the system Button click Incoming HTTP call Command line input Sensor input
  4. TODO: - Invert call stack - Change Save to Load - Have a slide just to explain that these are functions that call into each other
  5. In the physical world you can’t build on top of nothing.
  6. In the software world conventional wisdom is that you can’t call something that doesn’t exist (compile failure).
  7. Encourages us to build software against the direction of execution.
  8. Encourages us to build software against the direction of execution.
  9. Encourages us to build software against the direction of execution.
  10. Encourages us to build software against the direction of execution.
  11. Encourages us to build software against the direction of execution.
  12. Encourages us to build software against the direction of execution.
  13. This means you normally start far away from the point of input.
  14. Cost You need to know/guess/plan all of the code from the point of input to the end of the chain of execution. You risk getting some or all of that code wrong and only realizing it when you get to the point of input.
  15. Cost You need to know/guess/plan all of the code from the point of input to the end of the chain of execution. You risk getting some or all of that code wrong and only realizing it when you get to the point of input.
  16. Cost You need to know/guess/plan all of the code from the point of input to the end of the chain of execution. You risk getting some or all of that code wrong and only realizing it when you get to the point of input.
  17. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  18. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  19. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  20. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  21. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  22. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  23. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  24. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  25. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  26. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  27. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  28. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  29. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  30. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  31. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  32. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  33. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  34. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  35. Hidden option Build software with in the direction of execution. Interfaces do allow you to call something doesn’t exist without compile failures Refactoring allows you to pull out methods for concepts that belong lower in the call stack after the code has been built
  36. In the software world conventional wisdom is that you can’t call something that doesn’t exist (compile failure).
  37. In the physical world things are hard to change once built, usually you have to destroy them to change them.
  38. In the software world the conventional wisdom is that code is hard to change so it needs to be built right the first time.
  39. Encourages building all of the code in the area you are working in before moving onto the next area. Because this usually starts faraway from the point of input, a lot of planning is required as you need to know (guess) the signatures of all those callers from the point of input to where you are starting.
  40. Encourages building all of the code in the area you are working in before moving onto the next area. Because this usually starts faraway from the point of input, a lot of planning is required as you need to know (guess) the signatures of all those callers from the point of input to where you are starting.
  41. Encourages building all of the code in the area you are working in before moving onto the next area. Because this usually starts faraway from the point of input, a lot of planning is required as you need to know (guess) the signatures of all those callers from the point of input to where you are starting.
  42. Encourages building all of the code in the area you are working in before moving onto the next area. Because this usually starts faraway from the point of input, a lot of planning is required as you need to know (guess) the signatures of all those callers from the point of input to where you are starting.
  43. Encourages building all of the code in the area you are working in before moving onto the next area. Because this usually starts faraway from the point of input, a lot of planning is required as you need to know (guess) the signatures of all those callers from the point of input to where you are starting.
  44. In the physical world you can’t build on top of nothing.
  45. Cost Risk building unneeded or incorrect things, and building all of them. Long feedback loops because you can’t show anything until you get to the point of input
  46. Cost Risk building unneeded or incorrect things, and building all of them. Long feedback loops because you can’t show anything until you get to the point of input
  47. Hidden option Don’t build or plan a whole layer (area) at once. Start from the point of input, and only build as much as you need in order to know what to build next in the direction of execution.
  48. Hidden option Don’t build or plan a whole layer (area) at once. Start from the point of input, and only build as much as you need in order to know what to build next in the direction of execution.
  49. Hidden option Don’t build or plan a whole layer (area) at once. Start from the point of input, and only build as much as you need in order to know what to build next in the direction of execution.
  50. Hidden option Don’t build or plan a whole layer (area) at once. Start from the point of input, and only build as much as you need in order to know what to build next in the direction of execution.
  51. Hidden option Don’t build or plan a whole layer (area) at once. Start from the point of input, and only build as much as you need in order to know what to build next in the direction of execution.
  52. Hidden option Don’t build or plan a whole layer (area) at once. Start from the point of input, and only build as much as you need in order to know what to build next in the direction of execution.
  53. Hidden option Don’t build or plan a whole layer (area) at once. Start from the point of input, and only build as much as you need in order to know what to build next in the direction of execution.
  54. Hidden option Don’t build or plan a whole layer (area) at once. Start from the point of input, and only build as much as you need in order to know what to build next in the direction of execution.
  55. In the physical world you can’t build on top of nothing.