Top Banner
Software Architecture Anti-Patterns Eduards Sizovs hello (at) sizovs.net @eduardsi
100

Software Architecture Anti-Patterns by Eduards Sizovs

Jan 06, 2017

Download

Technology

JavaDayUA
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Software Architecture Anti-Patterns by Eduards Sizovs

Software ArchitectureAnti-Patterns

Eduards Sizovshello (at) sizovs.net

@eduardsi

Page 2: Software Architecture Anti-Patterns by Eduards Sizovs

YAGNI Architecture

Page 3: Software Architecture Anti-Patterns by Eduards Sizovs

YAGNI Architecture

Page 4: Software Architecture Anti-Patterns by Eduards Sizovs

Story time

Page 5: Software Architecture Anti-Patterns by Eduards Sizovs

Some software is never intended to stand out from the crowd.

Page 6: Software Architecture Anti-Patterns by Eduards Sizovs

YAGNI KIND ASS Architecture

Page 7: Software Architecture Anti-Patterns by Eduards Sizovs

KEEP IT NEED DRIVEN AND SIMPLE, SIR

Page 8: Software Architecture Anti-Patterns by Eduards Sizovs

NEED-DRIVEN ?

Page 9: Software Architecture Anti-Patterns by Eduards Sizovs

NEED-DRIVEN ?

REQUIREMENTS

Page 10: Software Architecture Anti-Patterns by Eduards Sizovs

NEED-DRIVEN ?

REQUIREMENTS • RISKS

Page 11: Software Architecture Anti-Patterns by Eduards Sizovs

NEED-DRIVEN ?

REQUIREMENTS • RISKS • CONSTRAINTS

Page 12: Software Architecture Anti-Patterns by Eduards Sizovs

Maslow's Hierarchy of Needs (of Software Development)

http://gojko.net/2012/05/08/redefining-software-quality/

Page 13: Software Architecture Anti-Patterns by Eduards Sizovs

SIMPLE ?

Page 14: Software Architecture Anti-Patterns by Eduards Sizovs

Tiny by Chad Fowler

http://www.infoq.com/presentations/small-iteration-method-team

Page 15: Software Architecture Anti-Patterns by Eduards Sizovs

Making Badass Developer by Kathy Sierra

https://www.youtube.com/watch?v=FKTxC9pl-WM

Page 16: Software Architecture Anti-Patterns by Eduards Sizovs

Pick the tool you know well and ship the simplest possiblesolution.

Page 17: Software Architecture Anti-Patterns by Eduards Sizovs

Optimize for CHANGE.

Page 18: Software Architecture Anti-Patterns by Eduards Sizovs

Nano-Service Architecture

When SOA goes wild.

Page 19: Software Architecture Anti-Patterns by Eduards Sizovs

You think that because you understand “one” that you must thereforeunderstand “two” because one and one make two. But you forget that you

must also understand “and.”

— Sufi teaching story

Page 20: Software Architecture Anti-Patterns by Eduards Sizovs

By blindly splitting a system into "micro" services, you get all negativeconsequences with questionable benefits.

Page 21: Software Architecture Anti-Patterns by Eduards Sizovs

Micro Service-Oriented Architecture

SIZE DOESN'T MATTER

Page 22: Software Architecture Anti-Patterns by Eduards Sizovs

Driving factors for decomposition

Page 23: Software Architecture Anti-Patterns by Eduards Sizovs

Driving factors for decomposition

- Team boundaries

Page 24: Software Architecture Anti-Patterns by Eduards Sizovs

Driving factors for decomposition

- Team boundaries

- Frequency of change

Page 25: Software Architecture Anti-Patterns by Eduards Sizovs

Driving factors for decomposition

- Team boundaries

- Frequency of change

- Different responsibilities

Page 26: Software Architecture Anti-Patterns by Eduards Sizovs

Driving factors for decomposition

- Team boundaries

- Frequency of change

- Different responsibilities

- Different (cross-functional) requirements

Page 27: Software Architecture Anti-Patterns by Eduards Sizovs

Driving factors for decomposition

- Team boundaries

- Frequency of change

- Different responsibilities

- Different (cross-functional) requirements

- Different technical stack

Page 28: Software Architecture Anti-Patterns by Eduards Sizovs

Driving factors for decomposition

- Team boundaries

- Frequency of change

- Different responsibilities

- Different (cross-functional) requirements

- Different technical stack

- Prototyping / Experiments

Page 29: Software Architecture Anti-Patterns by Eduards Sizovs

Staying BIG is OK.

Page 30: Software Architecture Anti-Patterns by Eduards Sizovs

Structureless Architecture

Page 31: Software Architecture Anti-Patterns by Eduards Sizovs

Looks familiar?

Page 32: Software Architecture Anti-Patterns by Eduards Sizovs

Looks familiar?✗ reveal high-level components

Page 33: Software Architecture Anti-Patterns by Eduards Sizovs

Looks familiar?✗ reveal high-level components

✗ reduce discovery cost

Page 34: Software Architecture Anti-Patterns by Eduards Sizovs

Looks familiar?✗ reveal high-level components

✗ reduce discovery cost

✗ improve comprehensibility

Page 35: Software Architecture Anti-Patterns by Eduards Sizovs

Looks familiar?✗ reveal high-level components

✗ reduce discovery cost

✗ improve comprehensibility

✗ enable poka-yoke

Page 36: Software Architecture Anti-Patterns by Eduards Sizovs

What about this?

Page 37: Software Architecture Anti-Patterns by Eduards Sizovs

What about this?✔ reveal high-level components

Page 38: Software Architecture Anti-Patterns by Eduards Sizovs

What about this?✔ reveal high-level components

✔ reduce discovery cost

Page 39: Software Architecture Anti-Patterns by Eduards Sizovs

What about this?✔ reveal high-level components

✔ reduce discovery cost

✔ improve comprehensibility

Page 40: Software Architecture Anti-Patterns by Eduards Sizovs

What about this?✔ reveal high-level components

✔ reduce discovery cost

✔ improve comprehensibility

✔ enable poka-yoke

Page 41: Software Architecture Anti-Patterns by Eduards Sizovs

Apply micro service-oriented mindset to software structure. Keep servicesdecoupled as if they were remote.

Page 42: Software Architecture Anti-Patterns by Eduards Sizovs
Page 43: Software Architecture Anti-Patterns by Eduards Sizovs

WHERE IS LAYERING?

Page 44: Software Architecture Anti-Patterns by Eduards Sizovs

Lasagna Architecture

Page 45: Software Architecture Anti-Patterns by Eduards Sizovs

Expected (doubtful) benefits from layering

Page 46: Software Architecture Anti-Patterns by Eduards Sizovs

Expected (doubtful) benefits from layering

- Ability to distribute your layers over multiple physical tiers (ha-ha)

Page 47: Software Architecture Anti-Patterns by Eduards Sizovs

Expected (doubtful) benefits from layering

- Ability to distribute your layers over multiple physical tiers (ha-ha)

- Decoupling / abstracting for exhangeability (ha-ha)

Page 48: Software Architecture Anti-Patterns by Eduards Sizovs

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)

Page 49: Software Architecture Anti-Patterns by Eduards Sizovs

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)

Page 50: Software Architecture Anti-Patterns by Eduards Sizovs

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?)

Page 51: Software Architecture Anti-Patterns by Eduards Sizovs

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?)

Page 52: Software Architecture Anti-Patterns by Eduards Sizovs

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?)

Page 53: Software Architecture Anti-Patterns by Eduards Sizovs

Layering is your service's detail and is internal to the service.

Page 54: Software Architecture Anti-Patterns by Eduards Sizovs

Keep services mind-sized so there is no need for internallayering. Break services into tiny modules.

(and consider keeping modules in separate VCS tree)

Page 55: Software Architecture Anti-Patterns by Eduards Sizovs

Undocumented Architecture

Page 56: Software Architecture Anti-Patterns by Eduards Sizovs

Working software over comprehensive documentation.

(c) Agile Manifesto

Page 57: Software Architecture Anti-Patterns by Eduards Sizovs

Architecture is code!

...but level of abstraction of code is negligible

Page 58: Software Architecture Anti-Patterns by Eduards Sizovs

I remember everything!

Page 59: Software Architecture Anti-Patterns by Eduards Sizovs

Code has hard time telling you about

Page 60: Software Architecture Anti-Patterns by Eduards Sizovs

Code has hard time telling you about

- Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc.

Page 61: Software Architecture Anti-Patterns by Eduards Sizovs

Code has hard time telling you about

- Backups, Disaster Recovery, Redundancy, Failover, ETL, SLA, etc.

- Significant Decisions and Agreements (e.g. rejected frameworks)

Page 62: Software Architecture Anti-Patterns by Eduards Sizovs

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)

Page 63: Software Architecture Anti-Patterns by Eduards Sizovs

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)

Page 64: Software Architecture Anti-Patterns by Eduards Sizovs

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

Page 65: Software Architecture Anti-Patterns by Eduards Sizovs

"That’s the page I read that made the difference"

is a great sanity check

Page 66: Software Architecture Anti-Patterns by Eduards Sizovs

UML vs C4

Context, Containers, Components, Classes

Page 67: Software Architecture Anti-Patterns by Eduards Sizovs

http://static.codingthearchitecture.com/c4.pdf

Page 68: Software Architecture Anti-Patterns by Eduards Sizovs

Optimistic Architecture

Page 69: Software Architecture Anti-Patterns by Eduards Sizovs

Fault tolerance is a lesson best learned offline.

Page 70: Software Architecture Anti-Patterns by Eduards Sizovs

Raise and keep your hand if you know ->

Page 71: Software Architecture Anti-Patterns by Eduards Sizovs

Raise and keep your hand if you know ->

What connection and thread pools does your application have

Page 72: Software Architecture Anti-Patterns by Eduards Sizovs

Raise and keep your hand if you know ->

What connection and thread pools does your application have

Approximate size

Page 73: Software Architecture Anti-Patterns by Eduards Sizovs

Raise and keep your hand if you know ->

What connection and thread pools does your application have

Approximate size

Utilization during peak load

Page 74: Software Architecture Anti-Patterns by Eduards Sizovs

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

Page 75: Software Architecture Anti-Patterns by Eduards Sizovs

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

Page 76: Software Architecture Anti-Patterns by Eduards Sizovs

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

Page 77: Software Architecture Anti-Patterns by Eduards Sizovs
Page 78: Software Architecture Anti-Patterns by Eduards Sizovs

What if an integration point will start to fail?

Page 79: Software Architecture Anti-Patterns by Eduards Sizovs

What if an integration point will start to fail?

What if it will send slow response for 5+ minutes without failing?

Page 80: Software Architecture Anti-Patterns by Eduards Sizovs

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?

Page 81: Software Architecture Anti-Patterns by Eduards Sizovs

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?

Page 82: Software Architecture Anti-Patterns by Eduards Sizovs

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?

Page 83: Software Architecture Anti-Patterns by Eduards Sizovs

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?

Page 84: Software Architecture Anti-Patterns by Eduards Sizovs

Timeouts

Page 85: Software Architecture Anti-Patterns by Eduards Sizovs

Timeouts

Retries

Page 86: Software Architecture Anti-Patterns by Eduards Sizovs

Timeouts

Retries

Circuit Breakers

Page 87: Software Architecture Anti-Patterns by Eduards Sizovs

Timeouts

Retries

Circuit Breakers

Bulkheads

Page 88: Software Architecture Anti-Patterns by Eduards Sizovs

Timeouts

Retries

Circuit Breakers

Bulkheads

Handshaking

Page 89: Software Architecture Anti-Patterns by Eduards Sizovs

Timeouts

Retries

Circuit Breakers

Bulkheads

Handshaking

Leaky Bucket

...

Page 90: Software Architecture Anti-Patterns by Eduards Sizovs
Page 91: Software Architecture Anti-Patterns by Eduards Sizovs
Page 92: Software Architecture Anti-Patterns by Eduards Sizovs

Alchemy Architecture

Page 93: Software Architecture Anti-Patterns by Eduards Sizovs

Make sure architecture is VISIBLE for everyone.

Page 94: Software Architecture Anti-Patterns by Eduards Sizovs
Page 95: Software Architecture Anti-Patterns by Eduards Sizovs

Make sure everyone is involved in decision making andmaintain doc for those who were not.

Page 96: Software Architecture Anti-Patterns by Eduards Sizovs
Page 97: Software Architecture Anti-Patterns by Eduards Sizovs
Page 98: Software Architecture Anti-Patterns by Eduards Sizovs
Page 99: Software Architecture Anti-Patterns by Eduards Sizovs

Architectural pitch

Page 100: Software Architecture Anti-Patterns by Eduards Sizovs