SlideShare a Scribd company logo
1 of 99
Download to read offline
Software Architecture 
Anti-Patterns 
Eduards Sizovs 
eduards.sizovs@gmail.com 
@eduardsi
YAGNI Architecture
Story time
Some software is never intended to stand 
out from the crowd.
YAGNI KIND ASS Architecture
KEEP IT NEED DRIVEN AND SIMPLE, SIR
NEED-DRIVEN ?
NEED-DRIVEN ? 
REQUIREMENTS
NEED-DRIVEN ? 
REQUIREMENTS • RISKS
NEED-DRIVEN ? 
REQUIREMENTS • RISKS • CONSTRAINTS
Maslow's Hierarchy of Needs (of Software 
Development) 
http://gojko.net/2012/05/08/redefining-software-quality/
SIMPLE ?
Pick the tool you know well and ship the 
simplest possible solution.
Optimize for CHANGE.
Nano-Service Architecture 
When SOA goes wild.
You think that because you understand “one” that 
you must therefore understand “two” because one 
and one make two. But you forget that you must also 
understand “and.” 
— Sufi teaching story
By blindly splitting a system into "micro" services, you 
get all negative consequences with questionable 
benefits.
Micro Service-Oriented Architecture 
SIZE DOESN'T MATTER
Driving factors for decomposition
Driving factors for decomposition 
- Team boundaries
Driving factors for decomposition 
- Team boundaries 
- Frequency of change
Driving factors for decomposition 
- Team boundaries 
- Frequency of change 
- Different responsibilities
Driving factors for decomposition 
- Team boundaries 
- Frequency of change 
- Different responsibilities 
- Different (cross-functional) requirements
Driving factors for decomposition 
- Team boundaries 
- Frequency of change 
- Different responsibilities 
- Different (cross-functional) requirements 
- Different technical stack
Driving factors for decomposition 
- Team boundaries 
- Frequency of change 
- Different responsibilities 
- Different (cross-functional) requirements 
- Different technical stack 
- Prototyping / Experiments
Staying BIG is OK.
Structureless Architecture
Looks familiar?
Looks familiar? 
✗ reveal high-level components
Looks familiar? 
✗ reveal high-level components 
✗ reduce discovery cost
Looks familiar? 
✗ reveal high-level components 
✗ reduce discovery cost 
✗ improve comprehensibility
Looks familiar? 
✗ reveal high-level components 
✗ reduce discovery cost 
✗ improve comprehensibility 
✗ enable poka-yoke
What about this?
What about this? 
✔ reveal high-level components
What about this? 
✔ reveal high-level components 
✔ reduce discovery cost
What about this? 
✔ reveal high-level components 
✔ reduce discovery cost 
✔ improve comprehensibility
What about this? 
✔ reveal high-level components 
✔ reduce discovery cost 
✔ improve comprehensibility 
✔ enable poka-yoke
Apply micro service-oriented mindset to software 
structure. Keep services decoupled as if they were 
remote.
WHERE IS LAYERING?
Lasagna Architecture
Expected (doubtful) benefits from layering
Expected (doubtful) benefits from layering 
- Ability to distribute your layers over multiple physical tiers (ha-ha)
Expected (doubtful) benefits from layering 
- Ability to distribute your layers over multiple physical tiers (ha-ha) 
- Decoupling / abstracting for exhangeability (ha-ha)
Expected (doubtful) benefits from layering 
- Ability to distribute your layers over multiple physical tiers (ha-ha) 
- Decoupling / abstracting for exhangeability (ha-ha) 
- Decoupling / abstracting for independent evolution (ha-ha)
Expected (doubtful) benefits from layering 
- Ability to distribute your layers over multiple physical tiers (ha-ha) 
- Decoupling / abstracting for exhangeability (ha-ha) 
- Decoupling / abstracting for independent evolution (ha-ha) 
- Decoupling for reuse (ha-ha)
Expected (doubtful) benefits from layering 
- Ability to distribute your layers over multiple physical tiers (ha-ha) 
- Decoupling / abstracting for exhangeability (ha-ha) 
- Decoupling / abstracting for independent evolution (ha-ha) 
- Decoupling for reuse (ha-ha) 
- Separation of concerns (is particular layer our concern?)
Expected (doubtful) benefits from layering 
- Ability to distribute your layers over multiple physical tiers (ha-ha) 
- Decoupling / abstracting for exhangeability (ha-ha) 
- Decoupling / abstracting for independent evolution (ha-ha) 
- Decoupling for reuse (ha-ha) 
- Separation of concerns (is particular layer our concern?) 
- Related stuff co-location (are DAOs really related?)
Expected (doubtful) benefits from layering 
- Ability to distribute your layers over multiple physical tiers (ha-ha) 
- Decoupling / abstracting for exhangeability (ha-ha) 
- Decoupling / abstracting for independent evolution (ha-ha) 
- Decoupling for reuse (ha-ha) 
- Separation of concerns (is particular layer our concern?) 
- Related stuff co-location (are DAOs really related?) 
- Constraint enforcement (is there a better way?)
Layering is your service's detail and is 
internal to the service.
Keep services mind-sized so there is no 
need for internal layering. Break services 
into tiny modules. 
(and consider keeping modules in separate VCS tree)
Undocumented Architecture
Working software over comprehensive 
documentation. 
(c) Agile Manifesto
Architecture is code! 
...but level of abstraction of code is negligible
I remember everything!
Code has hard time telling you about
Code has hard time telling you about 
- Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc.
Code has hard time telling you about 
- Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc. 
- Significant Decisions and Agreements (e.g. rejected frameworks)
Code has hard time telling you about 
- Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc. 
- Significant Decisions and Agreements (e.g. rejected frameworks) 
- Surroundings (Dependencies, Service Consumers)
Code has hard time telling you about 
- Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc. 
- Significant Decisions and Agreements (e.g. rejected frameworks) 
- Surroundings (Dependencies, Service Consumers) 
- Onboarding (Source Repository, Building, QC, Deployment)
Code has hard time telling you about 
- Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc. 
- Significant Decisions and Agreements (e.g. rejected frameworks) 
- Surroundings (Dependencies, Service Consumers) 
- Onboarding (Source Repository, Building, QC, Deployment) 
- Birdseye Technical View
"That’s the page I read that made the 
difference" 
is a great sanity check
UML vs C4 
Context, Containers, Components, Classes
http://static.codingthearchitecture.com/c4.pdf
Optimistic Architecture
Fault tolerance is a lesson best learned offline.
Raise and keep your hand if you know ->
Raise and keep your hand if you know -> 
What connection and thread pools does your application have
Raise and keep your hand if you know -> 
What connection and thread pools does your application have 
Approximate size
Raise and keep your hand if you know -> 
What connection and thread pools does your application have 
Approximate size 
Utilization during peak load
Raise and keep your hand if you know -> 
What connection and thread pools does your application have 
Approximate size 
Utilization during peak load 
When pools will approach the size limit
Raise and keep your hand if you know -> 
What connection and thread pools does your application have 
Approximate size 
Utilization during peak load 
When pools will approach the size limit 
How does your app behave when pools become full
Raise and keep your hand if you know -> 
What connection and thread pools does your application have 
Approximate size 
Utilization during peak load 
When pools will approach the size limit 
How does your app behave when pools become full 
How to timely react on it
What if an integration point will start to fail?
What if an integration point will start to fail? 
What if it will send slow response for 5+ minutes without failing?
What if an integration point will start to fail? 
What if it will send slow response for 5+ minutes without failing? 
What if it will send back huge 1GB result set?
What if an integration point will start to fail? 
What if it will send slow response for 5+ minutes without failing? 
What if it will send back huge 1GB result set? 
If your service fails, can others handle additional load they take?
What if an integration point will start to fail? 
What if it will send slow response for 5+ minutes without failing? 
What if it will send back huge 1GB result set? 
If your service fails, can others handle additional load they take? 
If your service fails, how far that failure reaches into app 
landscape?
What if an integration point will start to fail? 
What if it will send slow response for 5+ minutes without failing? 
What if it will send back huge 1GB result set? 
If your service fails, can others handle additional load they take? 
If your service fails, how far that failure reaches into app 
landscape? 
Can you switch off functionality that produces unexpectedly high 
load?
Timeouts
Timeouts 
Retries
Timeouts 
Retries 
Circuit Breakers
Timeouts 
Retries 
Circuit Breakers 
Bulkheads
Timeouts 
Retries 
Circuit Breakers 
Bulkheads 
Handshaking
Timeouts 
Retries 
Circuit Breakers 
Bulkheads 
Handshaking 
Leaky Bucket 
...
Alchemy Architecture
Wear software architect's hat by 
understanding and impacting current state 
of affairs.
Run short design sessions before diving into 
implementation.
Make sure architecture is VISIBLE for 
everyone.
Run weekly meetup on issues and plan how 
to get better in small steps.
Change the architecture with baby steps
Change the architecture with baby steps 
~ 45 minutes a day / person
Change the architecture with baby steps 
~ 45 minutes a day / person 
~ 4 hours a week / person
Change the architecture with baby steps 
~ 45 minutes a day / person 
~ 4 hours a week / person 
~ 20 hours a week / 5 people
Change the architecture with baby steps 
~ 45 minutes a day / person 
~ 4 hours a week / person 
~ 20 hours a week / 5 people 
No excuse for not starting tomorrow.
Software Architecture Essentials 
11th of March, 2015 
Register at www.craftsmans.lv
Software Architecture Anti-Patterns

More Related Content

What's hot

My Career Journey: An Unconventional Path into DevOps
My Career Journey: An Unconventional Path into DevOpsMy Career Journey: An Unconventional Path into DevOps
My Career Journey: An Unconventional Path into DevOpsVMware Tanzu
 
How HipChat Ships and Recovers Fast with DevOps Practices
How HipChat Ships and Recovers Fast with DevOps PracticesHow HipChat Ships and Recovers Fast with DevOps Practices
How HipChat Ships and Recovers Fast with DevOps PracticesAtlassian
 
Incident Management in the Age of DevOps and SRE
Incident Management in the Age of DevOps and SRE Incident Management in the Age of DevOps and SRE
Incident Management in the Age of DevOps and SRE Rundeck
 
XRebel - Real Time Insight, Faster Apps
XRebel - Real Time Insight, Faster AppsXRebel - Real Time Insight, Faster Apps
XRebel - Real Time Insight, Faster AppsZeroTurnaround
 
Beyond Agile and DevOps: From Concepts to Products in Weeks, Not Months
Beyond Agile and DevOps: From Concepts to Products in Weeks, Not MonthsBeyond Agile and DevOps: From Concepts to Products in Weeks, Not Months
Beyond Agile and DevOps: From Concepts to Products in Weeks, Not MonthsAtlassian
 
CampDevOps keynote - DevOps: Using 'Lean' to eliminate Bottlenecks
CampDevOps keynote - DevOps: Using 'Lean' to eliminate BottlenecksCampDevOps keynote - DevOps: Using 'Lean' to eliminate Bottlenecks
CampDevOps keynote - DevOps: Using 'Lean' to eliminate BottlenecksSanjeev Sharma
 
The Carrier DevOps Trend (Presented to Okinawa Open Days Conference)
The Carrier DevOps Trend (Presented to Okinawa Open Days Conference)The Carrier DevOps Trend (Presented to Okinawa Open Days Conference)
The Carrier DevOps Trend (Presented to Okinawa Open Days Conference)Alex Henthorn-Iwane
 
The Last Mile Continued: Incident Management
The Last Mile Continued: Incident Management The Last Mile Continued: Incident Management
The Last Mile Continued: Incident Management Rundeck
 
A Product Manager's Place in a DevOps World
A Product Manager's Place in a DevOps WorldA Product Manager's Place in a DevOps World
A Product Manager's Place in a DevOps WorldAtlassian
 
Helping Ops Help You: Development’s Role in Enabling Self-Service Operations
Helping Ops Help You:  Development’s Role in Enabling Self-Service OperationsHelping Ops Help You:  Development’s Role in Enabling Self-Service Operations
Helping Ops Help You: Development’s Role in Enabling Self-Service OperationsRundeck
 
About DevOps in simple steps
About DevOps in simple stepsAbout DevOps in simple steps
About DevOps in simple stepsIhor Odynets
 
Operations: The Last Mile
Operations: The Last Mile Operations: The Last Mile
Operations: The Last Mile Rundeck
 
Chaos Engineering - The Art of Breaking Things in Production
Chaos Engineering - The Art of Breaking Things in ProductionChaos Engineering - The Art of Breaking Things in Production
Chaos Engineering - The Art of Breaking Things in ProductionKeet Sugathadasa
 
Continuous Delivery antipatterns from the wild - Matthew Skelton - Continuous...
Continuous Delivery antipatterns from the wild - Matthew Skelton - Continuous...Continuous Delivery antipatterns from the wild - Matthew Skelton - Continuous...
Continuous Delivery antipatterns from the wild - Matthew Skelton - Continuous...Skelton Thatcher Consulting Ltd
 
Self-Service Operations: Because Failure Still Happens (Developer Edition)
Self-Service Operations: Because Failure Still Happens (Developer Edition)Self-Service Operations: Because Failure Still Happens (Developer Edition)
Self-Service Operations: Because Failure Still Happens (Developer Edition)Rundeck
 
Embracing Jira Cloud: Tips from an ex-Server admin
Embracing Jira Cloud: Tips from an ex-Server adminEmbracing Jira Cloud: Tips from an ex-Server admin
Embracing Jira Cloud: Tips from an ex-Server adminAtlassian
 
Paving the Way for Agile Engineering Practices
Paving the Way for Agile Engineering PracticesPaving the Way for Agile Engineering Practices
Paving the Way for Agile Engineering PracticesAman King
 
Jax Devops 2017 Succeeding in the Cloud – the guidebook of Fail
Jax Devops 2017  Succeeding in the Cloud – the guidebook of FailJax Devops 2017  Succeeding in the Cloud – the guidebook of Fail
Jax Devops 2017 Succeeding in the Cloud – the guidebook of FailSteve Poole
 
Expecto Performa! The Magic and Reality of Performance Tuning
Expecto Performa! The Magic and Reality of Performance TuningExpecto Performa! The Magic and Reality of Performance Tuning
Expecto Performa! The Magic and Reality of Performance TuningAtlassian
 
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Rundeck
 

What's hot (20)

My Career Journey: An Unconventional Path into DevOps
My Career Journey: An Unconventional Path into DevOpsMy Career Journey: An Unconventional Path into DevOps
My Career Journey: An Unconventional Path into DevOps
 
How HipChat Ships and Recovers Fast with DevOps Practices
How HipChat Ships and Recovers Fast with DevOps PracticesHow HipChat Ships and Recovers Fast with DevOps Practices
How HipChat Ships and Recovers Fast with DevOps Practices
 
Incident Management in the Age of DevOps and SRE
Incident Management in the Age of DevOps and SRE Incident Management in the Age of DevOps and SRE
Incident Management in the Age of DevOps and SRE
 
XRebel - Real Time Insight, Faster Apps
XRebel - Real Time Insight, Faster AppsXRebel - Real Time Insight, Faster Apps
XRebel - Real Time Insight, Faster Apps
 
Beyond Agile and DevOps: From Concepts to Products in Weeks, Not Months
Beyond Agile and DevOps: From Concepts to Products in Weeks, Not MonthsBeyond Agile and DevOps: From Concepts to Products in Weeks, Not Months
Beyond Agile and DevOps: From Concepts to Products in Weeks, Not Months
 
CampDevOps keynote - DevOps: Using 'Lean' to eliminate Bottlenecks
CampDevOps keynote - DevOps: Using 'Lean' to eliminate BottlenecksCampDevOps keynote - DevOps: Using 'Lean' to eliminate Bottlenecks
CampDevOps keynote - DevOps: Using 'Lean' to eliminate Bottlenecks
 
The Carrier DevOps Trend (Presented to Okinawa Open Days Conference)
The Carrier DevOps Trend (Presented to Okinawa Open Days Conference)The Carrier DevOps Trend (Presented to Okinawa Open Days Conference)
The Carrier DevOps Trend (Presented to Okinawa Open Days Conference)
 
The Last Mile Continued: Incident Management
The Last Mile Continued: Incident Management The Last Mile Continued: Incident Management
The Last Mile Continued: Incident Management
 
A Product Manager's Place in a DevOps World
A Product Manager's Place in a DevOps WorldA Product Manager's Place in a DevOps World
A Product Manager's Place in a DevOps World
 
Helping Ops Help You: Development’s Role in Enabling Self-Service Operations
Helping Ops Help You:  Development’s Role in Enabling Self-Service OperationsHelping Ops Help You:  Development’s Role in Enabling Self-Service Operations
Helping Ops Help You: Development’s Role in Enabling Self-Service Operations
 
About DevOps in simple steps
About DevOps in simple stepsAbout DevOps in simple steps
About DevOps in simple steps
 
Operations: The Last Mile
Operations: The Last Mile Operations: The Last Mile
Operations: The Last Mile
 
Chaos Engineering - The Art of Breaking Things in Production
Chaos Engineering - The Art of Breaking Things in ProductionChaos Engineering - The Art of Breaking Things in Production
Chaos Engineering - The Art of Breaking Things in Production
 
Continuous Delivery antipatterns from the wild - Matthew Skelton - Continuous...
Continuous Delivery antipatterns from the wild - Matthew Skelton - Continuous...Continuous Delivery antipatterns from the wild - Matthew Skelton - Continuous...
Continuous Delivery antipatterns from the wild - Matthew Skelton - Continuous...
 
Self-Service Operations: Because Failure Still Happens (Developer Edition)
Self-Service Operations: Because Failure Still Happens (Developer Edition)Self-Service Operations: Because Failure Still Happens (Developer Edition)
Self-Service Operations: Because Failure Still Happens (Developer Edition)
 
Embracing Jira Cloud: Tips from an ex-Server admin
Embracing Jira Cloud: Tips from an ex-Server adminEmbracing Jira Cloud: Tips from an ex-Server admin
Embracing Jira Cloud: Tips from an ex-Server admin
 
Paving the Way for Agile Engineering Practices
Paving the Way for Agile Engineering PracticesPaving the Way for Agile Engineering Practices
Paving the Way for Agile Engineering Practices
 
Jax Devops 2017 Succeeding in the Cloud – the guidebook of Fail
Jax Devops 2017  Succeeding in the Cloud – the guidebook of FailJax Devops 2017  Succeeding in the Cloud – the guidebook of Fail
Jax Devops 2017 Succeeding in the Cloud – the guidebook of Fail
 
Expecto Performa! The Magic and Reality of Performance Tuning
Expecto Performa! The Magic and Reality of Performance TuningExpecto Performa! The Magic and Reality of Performance Tuning
Expecto Performa! The Magic and Reality of Performance Tuning
 
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
 

Similar to Software Architecture Anti-Patterns

The Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowThe Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowAll Things Open
 
Adrian Colyer - Keynote: NoSQL matters - NoSQL matters Dublin 2015
Adrian Colyer - Keynote: NoSQL matters - NoSQL matters Dublin 2015Adrian Colyer - Keynote: NoSQL matters - NoSQL matters Dublin 2015
Adrian Colyer - Keynote: NoSQL matters - NoSQL matters Dublin 2015NoSQLmatters
 
Reactive Microservice Architecture with Groovy and Grails
Reactive Microservice Architecture with Groovy and GrailsReactive Microservice Architecture with Groovy and Grails
Reactive Microservice Architecture with Groovy and GrailsSteve Pember
 
The Reactive Principles: Design Principles For Cloud Native Applications
The Reactive Principles: Design Principles For Cloud Native ApplicationsThe Reactive Principles: Design Principles For Cloud Native Applications
The Reactive Principles: Design Principles For Cloud Native ApplicationsJonas Bonér
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekDr. Felix Raab
 
The 7 quests of resilient software design
The 7 quests of resilient software designThe 7 quests of resilient software design
The 7 quests of resilient software designUwe Friedrichsen
 
How do we drive tech changes
How do we drive tech changesHow do we drive tech changes
How do we drive tech changesJaewoo Ahn
 
Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)Tomas Doran
 
2016 Mastering SAP Tech - 2 Speed IT and lessons from an Agile Waterfall eCom...
2016 Mastering SAP Tech - 2 Speed IT and lessons from an Agile Waterfall eCom...2016 Mastering SAP Tech - 2 Speed IT and lessons from an Agile Waterfall eCom...
2016 Mastering SAP Tech - 2 Speed IT and lessons from an Agile Waterfall eCom...Eneko Jon Bilbao
 
Javaland 2017: "You´ll do microservices now". Now what?
Javaland 2017: "You´ll do microservices now". Now what?Javaland 2017: "You´ll do microservices now". Now what?
Javaland 2017: "You´ll do microservices now". Now what?André Goliath
 
From Monoliths to Microservices at Realestate.com.au
From Monoliths to Microservices at Realestate.com.auFrom Monoliths to Microservices at Realestate.com.au
From Monoliths to Microservices at Realestate.com.auevanbottcher
 
Resilient Functional Service Design
Resilient Functional Service DesignResilient Functional Service Design
Resilient Functional Service DesignUwe Friedrichsen
 
The Junior Developer Survival Guide - GDI Ann Arbor 2/10/15
The Junior Developer Survival Guide -  GDI Ann Arbor 2/10/15The Junior Developer Survival Guide -  GDI Ann Arbor 2/10/15
The Junior Developer Survival Guide - GDI Ann Arbor 2/10/15James York
 
Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...
Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...
Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...Rosenfeld Media
 
Developer Best Practices - The secret sauce for coding modern software
Developer Best Practices - The secret sauce for coding modern softwareDeveloper Best Practices - The secret sauce for coding modern software
Developer Best Practices - The secret sauce for coding modern softwareKosala Nuwan Perera
 
Talk at the Boston Cloud Foundry Meetup June 2015
Talk at the Boston Cloud Foundry Meetup June 2015Talk at the Boston Cloud Foundry Meetup June 2015
Talk at the Boston Cloud Foundry Meetup June 2015Chip Childers
 
Surviving SOA - delivering (somewhat) continuously on a hostile planet
Surviving SOA - delivering (somewhat) continuously on a hostile planetSurviving SOA - delivering (somewhat) continuously on a hostile planet
Surviving SOA - delivering (somewhat) continuously on a hostile planetTomAkehurst
 
The Reactive Principles: Eight Tenets For Building Cloud Native Applications
The Reactive Principles: Eight Tenets For Building Cloud Native ApplicationsThe Reactive Principles: Eight Tenets For Building Cloud Native Applications
The Reactive Principles: Eight Tenets For Building Cloud Native ApplicationsLightbend
 

Similar to Software Architecture Anti-Patterns (20)

The Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowThe Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To Know
 
Adrian Colyer - Keynote: NoSQL matters - NoSQL matters Dublin 2015
Adrian Colyer - Keynote: NoSQL matters - NoSQL matters Dublin 2015Adrian Colyer - Keynote: NoSQL matters - NoSQL matters Dublin 2015
Adrian Colyer - Keynote: NoSQL matters - NoSQL matters Dublin 2015
 
Reactive Microservice Architecture with Groovy and Grails
Reactive Microservice Architecture with Groovy and GrailsReactive Microservice Architecture with Groovy and Grails
Reactive Microservice Architecture with Groovy and Grails
 
The Reactive Principles: Design Principles For Cloud Native Applications
The Reactive Principles: Design Principles For Cloud Native ApplicationsThe Reactive Principles: Design Principles For Cloud Native Applications
The Reactive Principles: Design Principles For Cloud Native Applications
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one week
 
The 7 quests of resilient software design
The 7 quests of resilient software designThe 7 quests of resilient software design
The 7 quests of resilient software design
 
How do we drive tech changes
How do we drive tech changesHow do we drive tech changes
How do we drive tech changes
 
Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)
 
2016 Mastering SAP Tech - 2 Speed IT and lessons from an Agile Waterfall eCom...
2016 Mastering SAP Tech - 2 Speed IT and lessons from an Agile Waterfall eCom...2016 Mastering SAP Tech - 2 Speed IT and lessons from an Agile Waterfall eCom...
2016 Mastering SAP Tech - 2 Speed IT and lessons from an Agile Waterfall eCom...
 
Javaland 2017: "You´ll do microservices now". Now what?
Javaland 2017: "You´ll do microservices now". Now what?Javaland 2017: "You´ll do microservices now". Now what?
Javaland 2017: "You´ll do microservices now". Now what?
 
From Monoliths to Microservices at Realestate.com.au
From Monoliths to Microservices at Realestate.com.auFrom Monoliths to Microservices at Realestate.com.au
From Monoliths to Microservices at Realestate.com.au
 
Resilient Functional Service Design
Resilient Functional Service DesignResilient Functional Service Design
Resilient Functional Service Design
 
The Junior Developer Survival Guide - GDI Ann Arbor 2/10/15
The Junior Developer Survival Guide -  GDI Ann Arbor 2/10/15The Junior Developer Survival Guide -  GDI Ann Arbor 2/10/15
The Junior Developer Survival Guide - GDI Ann Arbor 2/10/15
 
Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...
Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...
Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...
 
Developer Best Practices - The secret sauce for coding modern software
Developer Best Practices - The secret sauce for coding modern softwareDeveloper Best Practices - The secret sauce for coding modern software
Developer Best Practices - The secret sauce for coding modern software
 
Talk at the Boston Cloud Foundry Meetup June 2015
Talk at the Boston Cloud Foundry Meetup June 2015Talk at the Boston Cloud Foundry Meetup June 2015
Talk at the Boston Cloud Foundry Meetup June 2015
 
Surviving SOA - delivering (somewhat) continuously on a hostile planet
Surviving SOA - delivering (somewhat) continuously on a hostile planetSurviving SOA - delivering (somewhat) continuously on a hostile planet
Surviving SOA - delivering (somewhat) continuously on a hostile planet
 
Surviving SOA
Surviving SOASurviving SOA
Surviving SOA
 
Micro services
Micro servicesMicro services
Micro services
 
The Reactive Principles: Eight Tenets For Building Cloud Native Applications
The Reactive Principles: Eight Tenets For Building Cloud Native ApplicationsThe Reactive Principles: Eight Tenets For Building Cloud Native Applications
The Reactive Principles: Eight Tenets For Building Cloud Native Applications
 

More from Eduards Sizovs

Beyond Software Craftsmanship - Johnny's Road to Remarkable Career
Beyond Software Craftsmanship - Johnny's Road to Remarkable CareerBeyond Software Craftsmanship - Johnny's Road to Remarkable Career
Beyond Software Craftsmanship - Johnny's Road to Remarkable CareerEduards Sizovs
 
Architecting well-structured Java applications
Architecting well-structured Java applicationsArchitecting well-structured Java applications
Architecting well-structured Java applicationsEduards Sizovs
 
Micro Service Architecture
Micro Service ArchitectureMicro Service Architecture
Micro Service ArchitectureEduards Sizovs
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural AnalysisEduards Sizovs
 

More from Eduards Sizovs (7)

Beyond Software Craftsmanship - Johnny's Road to Remarkable Career
Beyond Software Craftsmanship - Johnny's Road to Remarkable CareerBeyond Software Craftsmanship - Johnny's Road to Remarkable Career
Beyond Software Craftsmanship - Johnny's Road to Remarkable Career
 
Architecting well-structured Java applications
Architecting well-structured Java applicationsArchitecting well-structured Java applications
Architecting well-structured Java applications
 
Micro Service Architecture
Micro Service ArchitectureMicro Service Architecture
Micro Service Architecture
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
SOLID
SOLIDSOLID
SOLID
 
Introduction to DDD
Introduction to DDDIntroduction to DDD
Introduction to DDD
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural Analysis
 

Recently uploaded

Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 

Recently uploaded (20)

Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 

Software Architecture Anti-Patterns

  • 1. Software Architecture Anti-Patterns Eduards Sizovs eduards.sizovs@gmail.com @eduardsi
  • 4. Some software is never intended to stand out from the crowd.
  • 5. YAGNI KIND ASS Architecture
  • 6. KEEP IT NEED DRIVEN AND SIMPLE, SIR
  • 10. NEED-DRIVEN ? REQUIREMENTS • RISKS • CONSTRAINTS
  • 11. Maslow's Hierarchy of Needs (of Software Development) http://gojko.net/2012/05/08/redefining-software-quality/
  • 13. Pick the tool you know well and ship the simplest possible solution.
  • 16. You think that because you understand “one” that you must therefore understand “two” because one and one make two. But you forget that you must also understand “and.” — Sufi teaching story
  • 17. By blindly splitting a system into "micro" services, you get all negative consequences with questionable benefits.
  • 18. Micro Service-Oriented Architecture SIZE DOESN'T MATTER
  • 19. Driving factors for decomposition
  • 20. Driving factors for decomposition - Team boundaries
  • 21. Driving factors for decomposition - Team boundaries - Frequency of change
  • 22. Driving factors for decomposition - Team boundaries - Frequency of change - Different responsibilities
  • 23. Driving factors for decomposition - Team boundaries - Frequency of change - Different responsibilities - Different (cross-functional) requirements
  • 24. Driving factors for decomposition - Team boundaries - Frequency of change - Different responsibilities - Different (cross-functional) requirements - Different technical stack
  • 25. Driving factors for decomposition - Team boundaries - Frequency of change - Different responsibilities - Different (cross-functional) requirements - Different technical stack - Prototyping / Experiments
  • 29. Looks familiar? ✗ reveal high-level components
  • 30. Looks familiar? ✗ reveal high-level components ✗ reduce discovery cost
  • 31. Looks familiar? ✗ reveal high-level components ✗ reduce discovery cost ✗ improve comprehensibility
  • 32. Looks familiar? ✗ reveal high-level components ✗ reduce discovery cost ✗ improve comprehensibility ✗ enable poka-yoke
  • 34. What about this? ✔ reveal high-level components
  • 35. What about this? ✔ reveal high-level components ✔ reduce discovery cost
  • 36. What about this? ✔ reveal high-level components ✔ reduce discovery cost ✔ improve comprehensibility
  • 37. What about this? ✔ reveal high-level components ✔ reduce discovery cost ✔ improve comprehensibility ✔ enable poka-yoke
  • 38. Apply micro service-oriented mindset to software structure. Keep services decoupled as if they were remote.
  • 42. Expected (doubtful) benefits from layering - Ability to distribute your layers over multiple physical tiers (ha-ha)
  • 43. Expected (doubtful) benefits from layering - Ability to distribute your layers over multiple physical tiers (ha-ha) - Decoupling / abstracting for exhangeability (ha-ha)
  • 44. Expected (doubtful) benefits from layering - Ability to distribute your layers over multiple physical tiers (ha-ha) - Decoupling / abstracting for exhangeability (ha-ha) - Decoupling / abstracting for independent evolution (ha-ha)
  • 45. Expected (doubtful) benefits from layering - Ability to distribute your layers over multiple physical tiers (ha-ha) - Decoupling / abstracting for exhangeability (ha-ha) - Decoupling / abstracting for independent evolution (ha-ha) - Decoupling for reuse (ha-ha)
  • 46. Expected (doubtful) benefits from layering - Ability to distribute your layers over multiple physical tiers (ha-ha) - Decoupling / abstracting for exhangeability (ha-ha) - Decoupling / abstracting for independent evolution (ha-ha) - Decoupling for reuse (ha-ha) - Separation of concerns (is particular layer our concern?)
  • 47. Expected (doubtful) benefits from layering - Ability to distribute your layers over multiple physical tiers (ha-ha) - Decoupling / abstracting for exhangeability (ha-ha) - Decoupling / abstracting for independent evolution (ha-ha) - Decoupling for reuse (ha-ha) - Separation of concerns (is particular layer our concern?) - Related stuff co-location (are DAOs really related?)
  • 48. Expected (doubtful) benefits from layering - Ability to distribute your layers over multiple physical tiers (ha-ha) - Decoupling / abstracting for exhangeability (ha-ha) - Decoupling / abstracting for independent evolution (ha-ha) - Decoupling for reuse (ha-ha) - Separation of concerns (is particular layer our concern?) - Related stuff co-location (are DAOs really related?) - Constraint enforcement (is there a better way?)
  • 49. Layering is your service's detail and is internal to the service.
  • 50. Keep services mind-sized so there is no need for internal layering. Break services into tiny modules. (and consider keeping modules in separate VCS tree)
  • 52. Working software over comprehensive documentation. (c) Agile Manifesto
  • 53. Architecture is code! ...but level of abstraction of code is negligible
  • 55. Code has hard time telling you about
  • 56. Code has hard time telling you about - Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc.
  • 57. Code has hard time telling you about - Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc. - Significant Decisions and Agreements (e.g. rejected frameworks)
  • 58. Code has hard time telling you about - Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc. - Significant Decisions and Agreements (e.g. rejected frameworks) - Surroundings (Dependencies, Service Consumers)
  • 59. Code has hard time telling you about - Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc. - Significant Decisions and Agreements (e.g. rejected frameworks) - Surroundings (Dependencies, Service Consumers) - Onboarding (Source Repository, Building, QC, Deployment)
  • 60. Code has hard time telling you about - Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc. - Significant Decisions and Agreements (e.g. rejected frameworks) - Surroundings (Dependencies, Service Consumers) - Onboarding (Source Repository, Building, QC, Deployment) - Birdseye Technical View
  • 61. "That’s the page I read that made the difference" is a great sanity check
  • 62. UML vs C4 Context, Containers, Components, Classes
  • 65. Fault tolerance is a lesson best learned offline.
  • 66. Raise and keep your hand if you know ->
  • 67. Raise and keep your hand if you know -> What connection and thread pools does your application have
  • 68. Raise and keep your hand if you know -> What connection and thread pools does your application have Approximate size
  • 69. Raise and keep your hand if you know -> What connection and thread pools does your application have Approximate size Utilization during peak load
  • 70. Raise and keep your hand if you know -> What connection and thread pools does your application have Approximate size Utilization during peak load When pools will approach the size limit
  • 71. Raise and keep your hand if you know -> What connection and thread pools does your application have Approximate size Utilization during peak load When pools will approach the size limit How does your app behave when pools become full
  • 72. Raise and keep your hand if you know -> What connection and thread pools does your application have Approximate size Utilization during peak load When pools will approach the size limit How does your app behave when pools become full How to timely react on it
  • 73.
  • 74. What if an integration point will start to fail?
  • 75. What if an integration point will start to fail? What if it will send slow response for 5+ minutes without failing?
  • 76. What if an integration point will start to fail? What if it will send slow response for 5+ minutes without failing? What if it will send back huge 1GB result set?
  • 77. What if an integration point will start to fail? What if it will send slow response for 5+ minutes without failing? What if it will send back huge 1GB result set? If your service fails, can others handle additional load they take?
  • 78. What if an integration point will start to fail? What if it will send slow response for 5+ minutes without failing? What if it will send back huge 1GB result set? If your service fails, can others handle additional load they take? If your service fails, how far that failure reaches into app landscape?
  • 79. What if an integration point will start to fail? What if it will send slow response for 5+ minutes without failing? What if it will send back huge 1GB result set? If your service fails, can others handle additional load they take? If your service fails, how far that failure reaches into app landscape? Can you switch off functionality that produces unexpectedly high load?
  • 83. Timeouts Retries Circuit Breakers Bulkheads
  • 84. Timeouts Retries Circuit Breakers Bulkheads Handshaking
  • 85. Timeouts Retries Circuit Breakers Bulkheads Handshaking Leaky Bucket ...
  • 86.
  • 87.
  • 89. Wear software architect's hat by understanding and impacting current state of affairs.
  • 90. Run short design sessions before diving into implementation.
  • 91. Make sure architecture is VISIBLE for everyone.
  • 92. Run weekly meetup on issues and plan how to get better in small steps.
  • 93. Change the architecture with baby steps
  • 94. Change the architecture with baby steps ~ 45 minutes a day / person
  • 95. Change the architecture with baby steps ~ 45 minutes a day / person ~ 4 hours a week / person
  • 96. Change the architecture with baby steps ~ 45 minutes a day / person ~ 4 hours a week / person ~ 20 hours a week / 5 people
  • 97. Change the architecture with baby steps ~ 45 minutes a day / person ~ 4 hours a week / person ~ 20 hours a week / 5 people No excuse for not starting tomorrow.
  • 98. Software Architecture Essentials 11th of March, 2015 Register at www.craftsmans.lv