SlideShare a Scribd company logo
1 of 91
Download to read offline
Patterns of Organic 
Architecture 
Madman's diary 
By 
Jarosław Pałka
… A word of warning … 
It is not may intention to make you feel offended, 
this talk is 
my view of the world, 
my experience, 
my life, 
my twisted sens of humor 
Respect it!!!
and remember 
you can always leave the room 
you can always talk to me 
and whatever people say 
I am just a human being
About me 
work://chief_architect@lumesse 
owner://symentis.pl 
twitter://j_palka 
blog://geekyprimitives.wordpress.com 
scm:bitbucket://kcrimson 
scm:github://kcrimson
What does society think I do?
What does my wife think I do?
What do I really do?
~ 8 companies in 16 years 
~ 26 projects
and just 
...ONE... 
project built from 
...scratch...
How do I feel about it?
I am feeling 
lucky!
What I will not learn today 
from this talk? 
Which mixture of patterns, 
xDD, 
languages, 
frameworks And paradigms 
will lead me to success
But you will learn how to live 
with... 
Monolithic, legacy code base, 
which gets closer and closer with 
each line to borders of human 
capabilities, 
and is about to colapse 
into a black hole, 
which is going to suck all living 
developers within its reach
We are living in a 
...Big Ball of Mud...
Autogenerated Stovepipe 
Stovepipe Enterprise 
Jumble 
Stovepipe System 
Cover Your Assets 
Vendor Lock-In 
Wolf Ticket 
Architecture by Implication 
Warm Bodies 
Design by Committee 
Swiss Army Knife 
Reinvent the Wheel 
The Grand Old Duke of York
What is common to all these 
cases?
Complexity
Do you need proof?
Let me give you the proof!!!
„I fucking love science”
System's thinking 
System dynamics 
Complexity theory 
Strange Attractor
The Gap
How do organizations 
work around it?
Let's hire more students!!!
Let rewrite it from 
...scratch... 
(of course in newest, coolest technology 
we know shit about)
You may ask, why?
Time is not on our side 
Few „extra features” everybody is 
waiting for? 
Too much faith in technology? 
Too often these projects are seen as 
purely technical? 
Ignorance? 
Arogance?
If it all doesn't work, 
why not to try something 
different?
The Gap
Patterns of organic 
architecture
Architecture is a process 
which goal is to 
transform your system 
from one design to 
another design
Architecture is a process 
which goal is to 
transform your system 
from one design to 
another design
Architecture is a process 
which goal is to 
transform your system 
from one design to 
another design
Understand the Gap 
↓ 
Understand Context 
↓ 
Identify Constraints
You can't control what you 
can't measure 
Tom DeMarco, 
Controlling Software Projects,
You can't reason about what 
you can't measure 
@j_palka 
from a book which will never be written
You can't reason about what 
you can't measure 
@j_palka 
from a book which will never be written
So, how to measure your 
architecture?
Complexity Resilience
Source code 
the truth will 
tell you
Listen to 
the system 
you must
SCM 
Bug tracker 
Continous integration 
Static code analisys
Let's find stable parts of the 
system
# count complexity per each file 
find . -iname jacoco.csv 
| xargs tail -q -n +2 
| awk -F , '{gsub(".","/",$2);print ($1"/src/main/java/"$2"/"$3".java"),$10+ 
$11}' 
| sort > coverage.txt 
# count number of changes 
echo 'changeset="{files}"' > files.style; echo 'file="n{file}"' >> files.style 
hg log --style files.style 
| sort 
| uniq -c 
| awk '{print $2,$1}' > changes.txt 
# merge changes 
join coverage.txt changes.txt
Michael Feathers Quadrant
uglystables designflaw 
tools 
breedinggrounds
Let's find fragile parts of the 
system
#fetch all jobs 
jobs_rsp = requests.get( 
"https://primitive.ci.cloudbees.com/job/roadrunner/api/python") 
#all builds urls 
build_urls = [x['url'] for x in eval(jobs_rsp.content)['builds']] 
pairs = [] 
for build_url in build_urls: 
build = eval(requests.get("%sapi/python" % (build_url)).content) 
result = build['result'] 
changeSetItems = build['changeSet']['items'] 
if changeSetItems and not result == 'SUCCESS': 
affectedPaths = build['changeSet']['items'][0]['affectedPaths'] 
for i in itertools.permutations(affectedPaths,2): 
pairs.append(i) 
counter = collections.Counter(pairs).most_common(5) 
for pair in counter: 
print pair
(('.../cli/CliConfigurationBuilderTest.java', 
'.../cli/RunTest.java'), 3) 
(('.../cli/RunTest.java', ' 
.../cli/CliConfigurationBuilderTest.java'), 3) 
(('.../cli/CliConfigurationBuilderTest.java', 
'.../cli/BenchTest.java'), 3) 
(('.../cli/BenchTest.java', 
'.../cli/RunTest.java'), 3) 
(('.../cli/RunTest.java', 
'.../cli/BenchTest.java'), 3)
Package principles 
aka 
Are my classes in a right 
place?
(echo "<changes>" && hg log --template 
"<changeset> 
{files % '<file>{file}</file>n'} 
</changeset>n" 
&& echo "</changes>") > out.xml
+ 
Neo4j 
(jqassistant)
neo4j-sh (?)$ MATCH (a)-[c:`changeset`]->(b) RETURN labels(a),c.times,labels(b) order by c.times desc limit 
5; 
+-----------------------------------------------------------------------------------------------------------+ 
| labels(a) | c.times | labels(b) | 
+-----------------------------------------------------------------------------------------------------------+ 
| [".../listeners/SummaryScenarioListener.java"] | 13 | [".../listeners/LoggingScenarioListener.java"] | 
| [".../listeners/LoggingScenarioListener.java"] | 13 | [".../listeners/SummaryScenarioListener.java"] | 
| ["pom.xml"] | 12 | ["roadrunner-core/pom.xml] | 
| [".../cli/BenchTest.java"] | 12 | [".../cli/RunTest.java"] | 
| [".../cli/RunTest.java"] | 12 | [".../cli/BenchTest.java"] | 
+-----------------------------------------------------------------------------------------------------------+
Can you please show me these 
patterns of 
organic architecture?
Sow and Gro w
„aka” refactoring 
compulsive „refactoring” is evil 
no user stories „refactor X” 
before you start, think, is it worth it? 
don't ask for permissions, it is better to ask for 
forgivness 
give „technical debt” meaning
„visual management” 
Define limited number of metrics 
Use only these metrics which 
support your goals 
because 
„You get what you measure”
SSooww aanndd hhaarrvveesstt
„aka” modularization 
Modularize to stable parts of the system 
otherwise you will make your 
system even more unstable 
but before you start ...
let's build some 
...„framework” ...
Architecture is a process 
which goal is to 
transform your system 
from one design to 
another design
… clearly define goals … 
… strategy adjusted to needs and 
capabilties … 
… give yourself some design space … 
Don't get paralized by „big design (tm)” 
You don't need to know answers to all 
questions 
… because your goal is a moving target ...
What if your architecture 
would look like this?
Batch processing separated from online 
Modules communicate asynchronously 
Users see system as one 
And communicate with system 
synchronously 
The only thing we share is a model of 
our system 
mvn clean install < 60 sec
Every module has to 
inherit these principles 
And can introduce new one 
which makes these system 
wide principles more specific
Composting
But sometimes, 
despite our 
hard work, 
knowledge and 
experience
Complexity
Do you know how your users use 
your application? 
Do you know that your biggest 
customer is no longer using your 
system? 
Do you know that some „killer 
feature” is not sooo „killer”?
How can I know it all?
/var/log/httpd/access.log 
Instrument your code? 
Aspects? 
Byteman? 
Bug tracker? 
People from support?
Don't buy expensive tools 
Invest in your creativity 
You know your system better, 
then some third party provider
But please don't comment 
out code 
Use your SCM 
… throw this shit out...
What's next?
Hierarchy 
↓ 
Self-Organization 
↓ 
Resilience
System's resilience is often 
sacrificed for purposes of 
short-term productivity 
and stability.
Productivity and stability 
are the 
usual excuses for turning 
creative human beings into 
mechanical adjuncts 
to production processes.
Or for establishing 
bureaucracies and theories 
of knowledge that 
treat people as if they were 
only numbers. 
Donella Meadows, thinking in systems a primer
Thank you!!!

More Related Content

Viewers also liked

Single Family House
Single Family HouseSingle Family House
Single Family Houseichaussy
 
Decon graphics lecture
Decon graphics lectureDecon graphics lecture
Decon graphics lectureAlex Brown
 
International architecture before 1947
International architecture before 1947International architecture before 1947
International architecture before 1947Ghufran Ahmad Khan
 
Art102 deconstructivism
Art102 deconstructivismArt102 deconstructivism
Art102 deconstructivismSrujan Babu
 
Deconstructivism and Peter eisenman
Deconstructivism and Peter eisenmanDeconstructivism and Peter eisenman
Deconstructivism and Peter eisenmanjuzme_nad
 
HISTORY: Understanding Deconstructivism/ Critical Regionalism/ Phenomenology
HISTORY: Understanding Deconstructivism/ Critical Regionalism/ PhenomenologyHISTORY: Understanding Deconstructivism/ Critical Regionalism/ Phenomenology
HISTORY: Understanding Deconstructivism/ Critical Regionalism/ PhenomenologyArchiEducPH
 
Deconstructivism
Deconstructivism Deconstructivism
Deconstructivism jinghuiyew
 
Organic architecture and park güell
Organic architecture and park güellOrganic architecture and park güell
Organic architecture and park güellGurkan Guney
 
Humanities 100: Sculpture and Architecture
Humanities 100: Sculpture and ArchitectureHumanities 100: Sculpture and Architecture
Humanities 100: Sculpture and ArchitectureAndrea May Malonzo
 
Organic architecture
Organic architectureOrganic architecture
Organic architectureKhalid Salhe
 
ZAHA HADID
ZAHA HADIDZAHA HADID
ZAHA HADIDClaudia
 

Viewers also liked (20)

Single Family House
Single Family HouseSingle Family House
Single Family House
 
Decon graphics lecture
Decon graphics lectureDecon graphics lecture
Decon graphics lecture
 
International architecture before 1947
International architecture before 1947International architecture before 1947
International architecture before 1947
 
portfolio
portfolioportfolio
portfolio
 
Art102 deconstructivism
Art102 deconstructivismArt102 deconstructivism
Art102 deconstructivism
 
Deconstructivism and Peter eisenman
Deconstructivism and Peter eisenmanDeconstructivism and Peter eisenman
Deconstructivism and Peter eisenman
 
ARCH417Class08
ARCH417Class08ARCH417Class08
ARCH417Class08
 
HISTORY: Understanding Deconstructivism/ Critical Regionalism/ Phenomenology
HISTORY: Understanding Deconstructivism/ Critical Regionalism/ PhenomenologyHISTORY: Understanding Deconstructivism/ Critical Regionalism/ Phenomenology
HISTORY: Understanding Deconstructivism/ Critical Regionalism/ Phenomenology
 
Deconstructivism
Deconstructivism Deconstructivism
Deconstructivism
 
Zaha HADID
Zaha HADIDZaha HADID
Zaha HADID
 
Humanities - Architecture
Humanities - ArchitectureHumanities - Architecture
Humanities - Architecture
 
Organic architecture
Organic architectureOrganic architecture
Organic architecture
 
Organic architecture and park güell
Organic architecture and park güellOrganic architecture and park güell
Organic architecture and park güell
 
Humanities 100: Sculpture and Architecture
Humanities 100: Sculpture and ArchitectureHumanities 100: Sculpture and Architecture
Humanities 100: Sculpture and Architecture
 
Organic architecture
Organic architectureOrganic architecture
Organic architecture
 
Organic Architecture
Organic ArchitectureOrganic Architecture
Organic Architecture
 
Organic architecture
Organic architectureOrganic architecture
Organic architecture
 
ZAHA HADID
ZAHA HADIDZAHA HADID
ZAHA HADID
 
What is architecture
What is architectureWhat is architecture
What is architecture
 
Deconstructivism
DeconstructivismDeconstructivism
Deconstructivism
 

Similar to Patterns for organic architecture codedive

Data oriented design and c++
Data oriented design and c++Data oriented design and c++
Data oriented design and c++Mike Acton
 
Software Security : From school to reality and back!
Software Security : From school to reality and back!Software Security : From school to reality and back!
Software Security : From school to reality and back!Peter Hlavaty
 
2018 01-29 - brewbox - refactoring. sempre, senza pietà
2018 01-29 - brewbox - refactoring. sempre, senza pietà2018 01-29 - brewbox - refactoring. sempre, senza pietà
2018 01-29 - brewbox - refactoring. sempre, senza pietàRoberto Albertini
 
Monitoring your Python with Prometheus (Python Ireland April 2015)
Monitoring your Python with Prometheus (Python Ireland April 2015)Monitoring your Python with Prometheus (Python Ireland April 2015)
Monitoring your Python with Prometheus (Python Ireland April 2015)Brian Brazil
 
the productive programer: mechanics
the productive programer: mechanicsthe productive programer: mechanics
the productive programer: mechanicselliando dias
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageablecorehard_by
 
21st century problem… the cost of it department!
21st century problem… the cost of it department!21st century problem… the cost of it department!
21st century problem… the cost of it department!Krzysztof (Chris) Ozog
 
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Juraj Martinka
 
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmxMoved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmxMilen Dyankov
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)guestebde
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineersPawel Szulc
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineersPawel Szulc
 
Performance By Design
Performance By DesignPerformance By Design
Performance By DesignGuy Harrison
 
Building frameworks: from concept to completion
Building frameworks: from concept to completionBuilding frameworks: from concept to completion
Building frameworks: from concept to completionRuben Goncalves
 
Rails in the Large - Neal Ford
Rails in the Large - Neal FordRails in the Large - Neal Ford
Rails in the Large - Neal FordKmanthei
 
Tokens, Complex Systems, and Nature
Tokens, Complex Systems, and NatureTokens, Complex Systems, and Nature
Tokens, Complex Systems, and NatureTrent McConaghy
 
Server-Side Development for the Cloud
Server-Side Developmentfor the CloudServer-Side Developmentfor the Cloud
Server-Side Development for the CloudMichael Rosenblum
 

Similar to Patterns for organic architecture codedive (20)

10 Ways To Improve Your Code
10 Ways To Improve Your Code10 Ways To Improve Your Code
10 Ways To Improve Your Code
 
Data oriented design and c++
Data oriented design and c++Data oriented design and c++
Data oriented design and c++
 
Software Security : From school to reality and back!
Software Security : From school to reality and back!Software Security : From school to reality and back!
Software Security : From school to reality and back!
 
2018 01-29 - brewbox - refactoring. sempre, senza pietà
2018 01-29 - brewbox - refactoring. sempre, senza pietà2018 01-29 - brewbox - refactoring. sempre, senza pietà
2018 01-29 - brewbox - refactoring. sempre, senza pietà
 
Unleash The Monkeys
Unleash The MonkeysUnleash The Monkeys
Unleash The Monkeys
 
Monitoring your Python with Prometheus (Python Ireland April 2015)
Monitoring your Python with Prometheus (Python Ireland April 2015)Monitoring your Python with Prometheus (Python Ireland April 2015)
Monitoring your Python with Prometheus (Python Ireland April 2015)
 
the productive programer: mechanics
the productive programer: mechanicsthe productive programer: mechanics
the productive programer: mechanics
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageable
 
21st century problem… the cost of it department!
21st century problem… the cost of it department!21st century problem… the cost of it department!
21st century problem… the cost of it department!
 
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
 
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmxMoved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineers
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineers
 
Performance By Design
Performance By DesignPerformance By Design
Performance By Design
 
Azure from scratch part 4
Azure from scratch part 4Azure from scratch part 4
Azure from scratch part 4
 
Building frameworks: from concept to completion
Building frameworks: from concept to completionBuilding frameworks: from concept to completion
Building frameworks: from concept to completion
 
Rails in the Large - Neal Ford
Rails in the Large - Neal FordRails in the Large - Neal Ford
Rails in the Large - Neal Ford
 
Tokens, Complex Systems, and Nature
Tokens, Complex Systems, and NatureTokens, Complex Systems, and Nature
Tokens, Complex Systems, and Nature
 
Server-Side Development for the Cloud
Server-Side Developmentfor the CloudServer-Side Developmentfor the Cloud
Server-Side Development for the Cloud
 

More from magda3695

Prezentacja 20141129
Prezentacja 20141129Prezentacja 20141129
Prezentacja 20141129magda3695
 
Prezentacja personal branding
Prezentacja personal brandingPrezentacja personal branding
Prezentacja personal brandingmagda3695
 
Dlaczego firmy wdrażają er py info_meet kraków
Dlaczego firmy wdrażają er py info_meet krakówDlaczego firmy wdrażają er py info_meet kraków
Dlaczego firmy wdrażają er py info_meet krakówmagda3695
 
Systematic architect
Systematic architectSystematic architect
Systematic architectmagda3695
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous deliverymagda3695
 
Szczepan Faber mockito story (1)
Szczepan Faber   mockito story (1)Szczepan Faber   mockito story (1)
Szczepan Faber mockito story (1)magda3695
 
Sea surfing in asp.net mvc
Sea surfing in asp.net mvcSea surfing in asp.net mvc
Sea surfing in asp.net mvcmagda3695
 
Szczepan.faber.gradle
Szczepan.faber.gradleSzczepan.faber.gradle
Szczepan.faber.gradlemagda3695
 
Big data today and tomorrow
Big data today and tomorrowBig data today and tomorrow
Big data today and tomorrowmagda3695
 
Info meet katalog kraków 8 marca
Info meet katalog kraków 8 marcaInfo meet katalog kraków 8 marca
Info meet katalog kraków 8 marcamagda3695
 
Info meet 8 02-2014
Info meet 8 02-2014Info meet 8 02-2014
Info meet 8 02-2014magda3695
 
Ccpm jako metoda planowania i kontroli projektów
Ccpm jako metoda planowania i kontroli projektówCcpm jako metoda planowania i kontroli projektów
Ccpm jako metoda planowania i kontroli projektówmagda3695
 
Soft layer cloud without compromise
Soft layer   cloud without compromiseSoft layer   cloud without compromise
Soft layer cloud without compromisemagda3695
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajnościmagda3695
 
A rnav infomeet
A rnav infomeetA rnav infomeet
A rnav infomeetmagda3695
 
Agile zrobtosam infomeet
Agile zrobtosam infomeetAgile zrobtosam infomeet
Agile zrobtosam infomeetmagda3695
 
Abc zarządzania sobą
Abc zarządzania sobąAbc zarządzania sobą
Abc zarządzania sobąmagda3695
 
Dług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemyDług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemymagda3695
 
Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected worldmagda3695
 

More from magda3695 (20)

Prezentacja 20141129
Prezentacja 20141129Prezentacja 20141129
Prezentacja 20141129
 
7
77
7
 
Prezentacja personal branding
Prezentacja personal brandingPrezentacja personal branding
Prezentacja personal branding
 
Dlaczego firmy wdrażają er py info_meet kraków
Dlaczego firmy wdrażają er py info_meet krakówDlaczego firmy wdrażają er py info_meet kraków
Dlaczego firmy wdrażają er py info_meet kraków
 
Systematic architect
Systematic architectSystematic architect
Systematic architect
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous delivery
 
Szczepan Faber mockito story (1)
Szczepan Faber   mockito story (1)Szczepan Faber   mockito story (1)
Szczepan Faber mockito story (1)
 
Sea surfing in asp.net mvc
Sea surfing in asp.net mvcSea surfing in asp.net mvc
Sea surfing in asp.net mvc
 
Szczepan.faber.gradle
Szczepan.faber.gradleSzczepan.faber.gradle
Szczepan.faber.gradle
 
Big data today and tomorrow
Big data today and tomorrowBig data today and tomorrow
Big data today and tomorrow
 
Info meet katalog kraków 8 marca
Info meet katalog kraków 8 marcaInfo meet katalog kraków 8 marca
Info meet katalog kraków 8 marca
 
Info meet 8 02-2014
Info meet 8 02-2014Info meet 8 02-2014
Info meet 8 02-2014
 
Ccpm jako metoda planowania i kontroli projektów
Ccpm jako metoda planowania i kontroli projektówCcpm jako metoda planowania i kontroli projektów
Ccpm jako metoda planowania i kontroli projektów
 
Soft layer cloud without compromise
Soft layer   cloud without compromiseSoft layer   cloud without compromise
Soft layer cloud without compromise
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajności
 
A rnav infomeet
A rnav infomeetA rnav infomeet
A rnav infomeet
 
Agile zrobtosam infomeet
Agile zrobtosam infomeetAgile zrobtosam infomeet
Agile zrobtosam infomeet
 
Abc zarządzania sobą
Abc zarządzania sobąAbc zarządzania sobą
Abc zarządzania sobą
 
Dług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemyDług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemy
 
Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected world
 

Recently uploaded

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 

Recently uploaded (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 

Patterns for organic architecture codedive

  • 1. Patterns of Organic Architecture Madman's diary By Jarosław Pałka
  • 2. … A word of warning … It is not may intention to make you feel offended, this talk is my view of the world, my experience, my life, my twisted sens of humor Respect it!!!
  • 3. and remember you can always leave the room you can always talk to me and whatever people say I am just a human being
  • 4. About me work://chief_architect@lumesse owner://symentis.pl twitter://j_palka blog://geekyprimitives.wordpress.com scm:bitbucket://kcrimson scm:github://kcrimson
  • 5. What does society think I do?
  • 6.
  • 7. What does my wife think I do?
  • 8.
  • 9. What do I really do?
  • 10.
  • 11. ~ 8 companies in 16 years ~ 26 projects
  • 12. and just ...ONE... project built from ...scratch...
  • 13. How do I feel about it?
  • 14. I am feeling lucky!
  • 15. What I will not learn today from this talk? Which mixture of patterns, xDD, languages, frameworks And paradigms will lead me to success
  • 16. But you will learn how to live with... Monolithic, legacy code base, which gets closer and closer with each line to borders of human capabilities, and is about to colapse into a black hole, which is going to suck all living developers within its reach
  • 17.
  • 18. We are living in a ...Big Ball of Mud...
  • 19. Autogenerated Stovepipe Stovepipe Enterprise Jumble Stovepipe System Cover Your Assets Vendor Lock-In Wolf Ticket Architecture by Implication Warm Bodies Design by Committee Swiss Army Knife Reinvent the Wheel The Grand Old Duke of York
  • 20. What is common to all these cases?
  • 22. Do you need proof?
  • 23. Let me give you the proof!!!
  • 24. „I fucking love science”
  • 25. System's thinking System dynamics Complexity theory Strange Attractor
  • 26.
  • 27.
  • 28.
  • 30. How do organizations work around it?
  • 31. Let's hire more students!!!
  • 32. Let rewrite it from ...scratch... (of course in newest, coolest technology we know shit about)
  • 33.
  • 34. You may ask, why?
  • 35. Time is not on our side Few „extra features” everybody is waiting for? Too much faith in technology? Too often these projects are seen as purely technical? Ignorance? Arogance?
  • 36. If it all doesn't work, why not to try something different?
  • 38. Patterns of organic architecture
  • 39.
  • 40. Architecture is a process which goal is to transform your system from one design to another design
  • 41. Architecture is a process which goal is to transform your system from one design to another design
  • 42. Architecture is a process which goal is to transform your system from one design to another design
  • 43. Understand the Gap ↓ Understand Context ↓ Identify Constraints
  • 44. You can't control what you can't measure Tom DeMarco, Controlling Software Projects,
  • 45. You can't reason about what you can't measure @j_palka from a book which will never be written
  • 46. You can't reason about what you can't measure @j_palka from a book which will never be written
  • 47. So, how to measure your architecture?
  • 49. Source code the truth will tell you
  • 50. Listen to the system you must
  • 51. SCM Bug tracker Continous integration Static code analisys
  • 52. Let's find stable parts of the system
  • 53. # count complexity per each file find . -iname jacoco.csv | xargs tail -q -n +2 | awk -F , '{gsub(".","/",$2);print ($1"/src/main/java/"$2"/"$3".java"),$10+ $11}' | sort > coverage.txt # count number of changes echo 'changeset="{files}"' > files.style; echo 'file="n{file}"' >> files.style hg log --style files.style | sort | uniq -c | awk '{print $2,$1}' > changes.txt # merge changes join coverage.txt changes.txt
  • 54.
  • 56. uglystables designflaw tools breedinggrounds
  • 57. Let's find fragile parts of the system
  • 58. #fetch all jobs jobs_rsp = requests.get( "https://primitive.ci.cloudbees.com/job/roadrunner/api/python") #all builds urls build_urls = [x['url'] for x in eval(jobs_rsp.content)['builds']] pairs = [] for build_url in build_urls: build = eval(requests.get("%sapi/python" % (build_url)).content) result = build['result'] changeSetItems = build['changeSet']['items'] if changeSetItems and not result == 'SUCCESS': affectedPaths = build['changeSet']['items'][0]['affectedPaths'] for i in itertools.permutations(affectedPaths,2): pairs.append(i) counter = collections.Counter(pairs).most_common(5) for pair in counter: print pair
  • 59. (('.../cli/CliConfigurationBuilderTest.java', '.../cli/RunTest.java'), 3) (('.../cli/RunTest.java', ' .../cli/CliConfigurationBuilderTest.java'), 3) (('.../cli/CliConfigurationBuilderTest.java', '.../cli/BenchTest.java'), 3) (('.../cli/BenchTest.java', '.../cli/RunTest.java'), 3) (('.../cli/RunTest.java', '.../cli/BenchTest.java'), 3)
  • 60. Package principles aka Are my classes in a right place?
  • 61. (echo "<changes>" && hg log --template "<changeset> {files % '<file>{file}</file>n'} </changeset>n" && echo "</changes>") > out.xml
  • 63. neo4j-sh (?)$ MATCH (a)-[c:`changeset`]->(b) RETURN labels(a),c.times,labels(b) order by c.times desc limit 5; +-----------------------------------------------------------------------------------------------------------+ | labels(a) | c.times | labels(b) | +-----------------------------------------------------------------------------------------------------------+ | [".../listeners/SummaryScenarioListener.java"] | 13 | [".../listeners/LoggingScenarioListener.java"] | | [".../listeners/LoggingScenarioListener.java"] | 13 | [".../listeners/SummaryScenarioListener.java"] | | ["pom.xml"] | 12 | ["roadrunner-core/pom.xml] | | [".../cli/BenchTest.java"] | 12 | [".../cli/RunTest.java"] | | [".../cli/RunTest.java"] | 12 | [".../cli/BenchTest.java"] | +-----------------------------------------------------------------------------------------------------------+
  • 64. Can you please show me these patterns of organic architecture?
  • 66. „aka” refactoring compulsive „refactoring” is evil no user stories „refactor X” before you start, think, is it worth it? don't ask for permissions, it is better to ask for forgivness give „technical debt” meaning
  • 67. „visual management” Define limited number of metrics Use only these metrics which support your goals because „You get what you measure”
  • 69. „aka” modularization Modularize to stable parts of the system otherwise you will make your system even more unstable but before you start ...
  • 70. let's build some ...„framework” ...
  • 71.
  • 72. Architecture is a process which goal is to transform your system from one design to another design
  • 73. … clearly define goals … … strategy adjusted to needs and capabilties … … give yourself some design space … Don't get paralized by „big design (tm)” You don't need to know answers to all questions … because your goal is a moving target ...
  • 74.
  • 75. What if your architecture would look like this?
  • 76. Batch processing separated from online Modules communicate asynchronously Users see system as one And communicate with system synchronously The only thing we share is a model of our system mvn clean install < 60 sec
  • 77. Every module has to inherit these principles And can introduce new one which makes these system wide principles more specific
  • 79. But sometimes, despite our hard work, knowledge and experience
  • 81. Do you know how your users use your application? Do you know that your biggest customer is no longer using your system? Do you know that some „killer feature” is not sooo „killer”?
  • 82. How can I know it all?
  • 83. /var/log/httpd/access.log Instrument your code? Aspects? Byteman? Bug tracker? People from support?
  • 84. Don't buy expensive tools Invest in your creativity You know your system better, then some third party provider
  • 85. But please don't comment out code Use your SCM … throw this shit out...
  • 88. System's resilience is often sacrificed for purposes of short-term productivity and stability.
  • 89. Productivity and stability are the usual excuses for turning creative human beings into mechanical adjuncts to production processes.
  • 90. Or for establishing bureaucracies and theories of knowledge that treat people as if they were only numbers. Donella Meadows, thinking in systems a primer