patterns for organic architecture codedive
DESCRIPTION
.TRANSCRIPT
![Page 1: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/1.jpg)
Patterns of Organic Architecture
Madman's diary
By
Jarosław Pałka
![Page 2: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/2.jpg)
… 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!!!
![Page 3: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/3.jpg)
and remember
you can always leave the room
you can always talk to me
and whatever people say
I am just a human being
![Page 4: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/4.jpg)
About me
work://chief_architect@lumesse
owner://symentis.pl
twitter://j_palka
blog://geekyprimitives.wordpress.com
scm:bitbucket://kcrimson
scm:github://kcrimson
![Page 5: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/5.jpg)
What does society think I do?
![Page 6: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/6.jpg)
![Page 7: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/7.jpg)
What does my wife think I do?
![Page 8: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/8.jpg)
![Page 9: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/9.jpg)
What do I really do?
![Page 10: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/10.jpg)
![Page 11: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/11.jpg)
~ 8 companies in 16 years~ 26 projects
![Page 12: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/12.jpg)
and just ...ONE...
project built from ...scratch...
![Page 13: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/13.jpg)
How do I feel about it?
![Page 14: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/14.jpg)
I am feeling lucky!
![Page 15: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/15.jpg)
What I will not learn today from this talk?
Which mixture of patterns, xDD,
languages, frameworks And paradigms
will lead me to success
![Page 16: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/16.jpg)
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
![Page 17: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/17.jpg)
![Page 18: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/18.jpg)
We are living in a
...Big Ball of Mud...
![Page 19: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/19.jpg)
Autogenerated StovepipeStovepipe Enterprise
JumbleStovepipe System
Cover Your AssetsVendor Lock-In
Wolf TicketArchitecture by Implication
Warm BodiesDesign by Committee
Swiss Army KnifeReinvent the Wheel
The Grand Old Duke of York
![Page 20: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/20.jpg)
What is common to all these cases?
![Page 21: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/21.jpg)
Complexity
![Page 22: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/22.jpg)
Do you need proof?
![Page 23: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/23.jpg)
Let me give you the proof!!!
![Page 24: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/24.jpg)
„I fucking love science”
![Page 25: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/25.jpg)
System's thinking
System dynamics
Complexity theory
Strange Attractor
![Page 26: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/26.jpg)
![Page 27: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/27.jpg)
![Page 28: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/28.jpg)
![Page 29: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/29.jpg)
The Gap
![Page 30: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/30.jpg)
How do organizations work around it?
![Page 31: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/31.jpg)
Let's hire more students!!!
![Page 32: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/32.jpg)
Let rewrite it from ...scratch...
(of course in newest, coolest technology we know shit about)
![Page 33: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/33.jpg)
![Page 34: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/34.jpg)
You may ask, why?
![Page 35: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/35.jpg)
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?
![Page 36: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/36.jpg)
If it all doesn't work, why not to try something
different?
![Page 37: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/37.jpg)
The Gap
![Page 38: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/38.jpg)
Patterns of organic architecture
![Page 39: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/39.jpg)
![Page 40: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/40.jpg)
Architecture is a process which goal is to
transform your system from one design to
another design
![Page 41: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/41.jpg)
Architecture is a process which goal is to
transform your system from one design to
another design
![Page 42: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/42.jpg)
Architecture is a process which goal is to
transform your system from one design to
another design
![Page 43: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/43.jpg)
Understand the Gap
↓
Understand Context
↓
Identify Constraints
![Page 44: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/44.jpg)
You can't control what you can't measure
Tom DeMarco,Controlling Software Projects,
![Page 45: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/45.jpg)
You can't reason about what you can't measure
@j_palkafrom a book which will never be written
![Page 46: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/46.jpg)
You can't reason about what you can't measure
@j_palkafrom a book which will never be written
![Page 47: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/47.jpg)
So, how to measure your architecture?
![Page 48: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/48.jpg)
Complexity Resilience
![Page 49: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/49.jpg)
Source code the truth will
tell you
![Page 50: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/50.jpg)
Listen to the system
you must
![Page 51: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/51.jpg)
SCM
Bug tracker
Continous integration
Static code analisys
![Page 52: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/52.jpg)
Let's find stable parts of the system
![Page 53: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/53.jpg)
# count complexity per each filefind . -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 changesecho '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
![Page 54: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/54.jpg)
![Page 55: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/55.jpg)
Michael Feathers Quadrant
![Page 56: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/56.jpg)
tools
uglystables designflaw
breedinggrounds
![Page 57: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/57.jpg)
Let's find fragile parts of the system
![Page 58: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/58.jpg)
#fetch all jobsjobs_rsp = requests.get("https://primitive.ci.cloudbees.com/job/roadrunner/api/python")#all builds urlsbuild_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
![Page 59: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/59.jpg)
(('.../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)
![Page 60: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/60.jpg)
Package principles
aka
Are my classes in a right place?
![Page 61: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/61.jpg)
(echo "<changes>" && hg log --template "<changeset>
{files % '<file>{file}</file>\n'}</changeset>\n"
&& echo "</changes>") > out.xml
![Page 62: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/62.jpg)
+Neo4j
(jqassistant)
![Page 63: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/63.jpg)
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"] | +-----------------------------------------------------------------------------------------------------------+
![Page 64: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/64.jpg)
Can you please show me these patterns of
organic architecture?
![Page 65: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/65.jpg)
Sow and Grow
![Page 66: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/66.jpg)
„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
![Page 67: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/67.jpg)
„visual management”
Define limited number of metrics
Use only these metrics which support your goals
because
„You get what you measure”
![Page 68: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/68.jpg)
Sow and harvestSow and harvest
![Page 69: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/69.jpg)
„aka” modularization
Modularize to stable parts of the system
otherwise you will make your system even more unstable
but before you start ...
![Page 70: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/70.jpg)
let's build some ...„framework” ...
![Page 71: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/71.jpg)
![Page 72: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/72.jpg)
Architecture is a process which goal is to
transform your system from one design to
another design
![Page 73: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/73.jpg)
… 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 ...
![Page 74: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/74.jpg)
![Page 75: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/75.jpg)
What if your architecture would look like this?
![Page 76: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/76.jpg)
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
![Page 77: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/77.jpg)
Every module has to inherit these principles
And can introduce new one which makes these system
wide principles more specific
![Page 78: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/78.jpg)
Composting
![Page 79: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/79.jpg)
But sometimes, despite our hard work,
knowledge and experience
![Page 80: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/80.jpg)
Complex
ity
![Page 81: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/81.jpg)
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”?
![Page 82: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/82.jpg)
How can I know it all?
![Page 83: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/83.jpg)
/var/log/httpd/access.log
Instrument your code?
Aspects?
Byteman?
Bug tracker?
People from support?
![Page 84: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/84.jpg)
Don't buy expensive tools
Invest in your creativity
You know your system better, then some third party provider
![Page 85: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/85.jpg)
But please don't comment out code
Use your SCM
… throw this shit out...
![Page 86: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/86.jpg)
What's next?
![Page 87: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/87.jpg)
Hierarchy
↓
Self-Organization
↓
Resilience
![Page 88: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/88.jpg)
System's resilience is often sacrificed for purposes ofshort-term productivity
and stability.
![Page 89: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/89.jpg)
Productivity and stability are the
usual excuses for turning creative human beings into
mechanical adjunctsto production processes.
![Page 90: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/90.jpg)
Or for establishing bureaucracies and theories
of knowledge thattreat people as if they were
only numbers.Donella Meadows, thinking in systems a primer
![Page 91: Patterns for organic architecture codedive](https://reader034.vdocuments.net/reader034/viewer/2022052316/559359b11a28ab70788b4788/html5/thumbnails/91.jpg)
Thank you!!!