The Many Meanings
of Share and Reuse

(in Software Architecture)

Tomasz Ducin  •  ducin.dev  •  Bottega IT Minds

😱

Hi, I'm Tomasz

tomasz (at) ducin.dev

🦋 @ducin.dev

𝕏  @tomasz_ducin

Independent Consultant & Software Architect

Trainer, Speaker, Frontend & Backend

Bottega IT Minds, ArchitekturaNaFroncie.pl (ANF),

Developer Jutra .pl (DJ)

Warsaw, PL

STARTUP FOUNDING ENGINEER

reducer = (state, action) -> state

  • server state -> state
  • client state -> state
  • action -> side effects
  • interaction -> action

1 zespół

co może pójść nie tak

4 ludzi

1 codebase

chłopaki, w naszym klubie
jest jedna zasada:

800 LoC JSP file

being copied

800 LoC PHP file

800 LoC react file

chłopaki, w naszym klubie
jest jedna zasada:

DRY

"Every piece of knowledge must have a single, unambiguous, authoritative representation within a system"

 

- "The Pragmatic Programmer", A. Hunt, D Thomas

🤔

  • czy rozróżniamy kod domenowy od utilsów technicznych?
  • czy rozróżniamy CRUD od procesów biznesowych?
  • czy rozróżniamy znaczenie bytów biznesowych w zależności od kontekstu?
  • czy dany fragment UI służy temu samemu celowi biznesowemu

Write

Everything

Twice

Avoid

Hasty

Abstractions

monorepos

apps/

  app-A/...

  app-B/...

libs/

  lib-X/...

  lib-Y/...

  lib-Z/...

monorepos

apps/

  app-A/...

  app-B/...

libs/

  lib-X/...

  lib-Y/...

  lib-Z/...

monorepos

apps/

  app-A/...

  app-B/...

libs/

  lib-X/...

  lib-Y/...

  lib-Z/...

😁

  • szybsze buildy
  • łatwiejsze podbijanie paczek
  • większy "porządek"

module boundaries

apps/

  app-A/...

  app-B/...

libs/

  lib-X/...

  lib-Y/...

  lib-Z/...

monorepos

libs/

  flights/

  tickets/

  profiles/

  shared/

  ...

apps/

  application :)

db

api

ui

tickets

tickets

tickets

"DDD w Angularze"

DDD ~ monorepo 🤔

😁

robimy
monorepo
mordy 😁

inni robią, to i my

YOLO

przecież cię nie zwolnią w IT xD

⁉️

"Nothing is more dangerous than an idea when it is the only one you have."

 

- Emile Chartier Alain

🤔

  • jaki problem rozwiązujemy?
  • skąd wiemy, że problem jest?
  • co jest jego przyczyną problemu?
  • jakie są alternatywy?
  • jakie problemy wdrażamy "przy okazji"?

co jest ważniejsze 🤔

 

PYTANIA czy ODPOWIEDZI?

CODE

👎

kierunek:

FULLSTACK

firma produktowa

co może pójść nie tak

masa zespołów

niepoliczalna liczba repozytoriów

RAPORTY PDF

cześć, Bożydar 👋

  • (w porównaniu do innych usług)
    żądań będzie relatywnie niewiele
  • ale każde wymaga dużo danych z bazy
  • generowanie dużo dużych plików
  • czas na wygenerowanie: do 5 minut
  • powiadom po utworzeniu pliku

EVENT

QUERY

COMMAND

  • przeszłość
  • fakty
  • pewność
  • zdanie ozn.
  • teraźniejszość
  • stan
  • ewoluuje
  • pytanie
  • przyszłość
  • intencja
  • niepewny wynik
  • rozkaz

⁉️

nowa usługa

użyłbym istniejących tabel w bazie 😋

ech...

współdzielenie bazy

  • + baza już jest

  • + brak redundancji

  • + zapewniona spójność
    (single source of truth)

współdzielenie bazy

  • + baza już jest

  • + brak redundancji

  • + zapewniona spójność
    (single source of truth)

  • - synchronizacja pracy

  • - synchronizacja wdrożeń

  • - współdzielenie ograniczeń

pod co optymalizujesz?

pod co optymalizujesz?

  • szybkość działania / skalowanie
  • niezależność wdrożeń
  • TTM
  • izolacja complexity (cognitive overload)
  • redukcja kosztów
    etc...

Ty optymalizujesz pod TTM

  • jesteśmy w plecy, grożą nam kary
  • kod może być średni, to nieistotne
  • fakapy na monolicie VS twoje delivery
  • nie zawiedź mnie

to że ktoś coś robi
nie znaczy
że ty też musisz

feature toggles

jakość kodu nieistotna?

ważne tylko szybkie wdrożenie?

😱

  • współdzielenie bazy ma swoją cenę
  • izolacja też
  • (WSZYSTKO ma pewną cenę)
  • moje wymagania != twoje wymagania
  • moje podejście != twoje podejście

CODE

PERSISTANCE

cześć, Bożydar 👋

świetna robota,
likwidujemy twój zespół

A MOŻE BY TAK...

dołączysz
do nowego zespołu

  • automatyzujemy proces dotychczas realizowany ręcznie

  • rezerwacja zasobów, materiałów, czasu

  • pod budowę infrastruktury elektrycznej

  • integrując się z usługami logistycznymi

modelujemy proces

modelujemy proces

ZAMAWIAJĄCY:

  • określa cel inwestycji
  • definiuje potrzebne zasoby

SYSTEM:

  • dokonuje rezerwacji
  • określa horyzont czasowy
  • generuje szkic etapów realizacji

EKSPERT/ARCHITEKT:

  • nanosi poprawki w planie inwestycji

SYSTEM:

  • wspiera poczas realizacji (m.in. rozliczenia, czas)

rzeczowniki:

  • inwestycja
  • zasób
  • rezerwacja
  • budowa
  • plan
  • etap
  • płatność
    etc.

czasowniki:

  • określa cel inwestycji
  • definiuje zasoby
  • dokonuje rezerwacji
  • generuje szkic
  • nanosi poprawki
    etc.

kto i kiedy:

  • określa cel inwestycji
  • definiuje zasoby
  • dokonuje rezerwacji
  • generuje szkic
  • nanosi poprawki
    etc.

transformacja

inwestycja

pomysł / cel

potrzebne zasoby

wstępny plan realizacji

kosztorys

rezerwacje

realizacja

pomysł / cel

potrzebne zasoby

wstępny plan realizacji

kosztorys

rezerwacje

realizacja

rzeczowniki:

  • inwestycja
  • zasób
  • rezerwacja
  • budowa
  • plan
  • etap
  • płatność
    etc.

czasowniki:

  • określa cel inwestycji
  • definiuje zasoby
  • dokonuje rezerwacji
  • generuje szkic
  • nanosi poprawki
    etc.

inwestycja

being             behaving           becoming

inwestycja 🤔

  • opis, charakterystyka
  • informacje o potrzebnych zasobach
  • informacje o rezerwacjach
    • rezerwacjach aktualnych
    • zaproponowanych zamiennikach
    • oczekujących, brakujących
  • sekwencja/graf etapów
  • kosztorys
  • faktury, płatności

tak jest, Bożo
nie współdziel modelu
między kontekstami

CODE

MODEL

PERSISTANCE

5 years later...

Architect

"to zależy..."

GRANICE

zapobiegają współdzieleniu

  • kodu
  • danych
  • modeli i ich zastosowania
  • współpracy zespołowej

GRANICE

mikroserwisy

  • NIE współdzielimy baz
  • NIE wdrażamy razem
  • NIE współdzielimy semantyki
  • być może współdzielimy:
    • monitoring/infra
    • elementy techniczne 

mikrofrontendy

  • NIE współdzielimy stanu
  • NIE wdrażamy razem
  • być może współdzielimy:
    • biblioteki komponentów UI
    • endpointy serwerowe
  • nie każdy komponent jest tak samo istotny
  • komponenty mogą mieć różną architekturę
  • CEL determinuje architekturę

CODE

MODEL

ARCHITECTURE

PERSISTANCE

MOUNT ARCHITECTURE

MOUNT ARCHITECTURE

10 years later...

różne cele biznesowe

różne wymagania

różne problemy

różne rozwiązania

domeny core'owe

domeny wspierające

domeny generyczne

kluczowe pytanie:

PO CO?

  • nie każdy software trzeba pisać in-house
  • nie każdy problem trzeba rozwiązać softwarem
  • najlepszy problem to taki, którego rozwiązywać...
    nie trzeba

CODE

MODEL

ARCHITECTURE

BUSINESS GOALS

PERSISTANCE

it depends...

Thank you

Tomasz Ducin  •  ducin.dev

The Many Meanings of Share and Reuse in Software Architecture

By Tomasz Ducin

The Many Meanings of Share and Reuse in Software Architecture

  • 68