Slide 1

Slide 1 text

Miroslav Jonaš / April 17th 2024 / nx.dev Nx Webinar Making the argument for monorepos

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Explorer Pioneer Defender Target group

Slide 4

Slide 4 text

7 Reasons

Slide 5

Slide 5 text

5 Features

Slide 6

Slide 6 text

3 Common mistakes

Slide 7

Slide 7 text

Senior Developer Productivity Engineer Miroslav Jonaš @meeroslav

Slide 8

Slide 8 text

Mono what?

Slide 9

Slide 9 text

App™ Monorepo & Monolith

Slide 10

Slide 10 text

Service Other service Other app Models UI elements Polyrepo App™

Slide 11

Slide 11 text

Polyrepo •Language & dependency constraints •Team autonomy •Increased velocity •Easier reasoning •Better architecture

Slide 12

Slide 12 text

Service Other service Other app Models UI elements Monorepo App™

Slide 13

Slide 13 text

Monorepo •Language & dependency constraints •Team autonomy •Increased velocity •Easier reasoning •Better architecture

Slide 14

Slide 14 text

7 Reasons

Slide 15

Slide 15 text

Service Other service Other app Models UI elements App™ 1. Atomic changes

Slide 16

Slide 16 text

App™ 2. Code sharing Other app Shared lib

Slide 17

Slide 17 text

Service Other service Other app Models UI elements App™ 3. Single set of dependencies Node v20 React v18.2 TS v5.

Slide 18

Slide 18 text

4. Consistent tooling Service Other service Other app Models UI elements App™ dotnet run npm remix-serve npm develop mvn exec:java tsc webpack serve other-service serve app serve other-app serve service build models build ui-elements

Slide 19

Slide 19 text

4. Consistent tooling Service Other service Other app Models UI elements App™ webpack dotnet run tsc npm develop mvn exec:java npm remix- serve other-service serve app serve other-app serve service build models build ui-elements

Slide 20

Slide 20 text

4. Consistent tooling •serve {project name} •build {project name} •test {project name} •deploy {project name} •{task name} {project name} •{task name} {project name}:{configuration}

Slide 21

Slide 21 text

5. No unnecessary steps Service Other service Other app Models UI elements App™

Slide 22

Slide 22 text

Service Other service Other app Models UI elements App™ 6. Enforced code constraints

Slide 23

Slide 23 text

6. Enforced code constraints •technology driven •scope/team driven •DDD driven •regulation driven

Slide 24

Slide 24 text

Service Other service Other app Models UI elements App™ 7. Cross-team collaboration

Slide 25

Slide 25 text

5 Features

Slide 26

Slide 26 text

1. Orchestration Test Build Lint Build Lint Test Build Lint Test

Slide 27

Slide 27 text

2. Visual representation

Slide 28

Slide 28 text

2. Visual representation

Slide 29

Slide 29 text

3. Local & remote caching test model deploy api build app

Slide 30

Slide 30 text

4. Task distribution

Slide 31

Slide 31 text

4. Task distribution

Slide 32

Slide 32 text

4. Task distribution

Slide 33

Slide 33 text

5. Automated updates & scaffolding •from week to minutes •from detailed investigation to simple command •automated scaffolding minimizes mistakes •custom tailored scaffolding ensures structure

Slide 34

Slide 34 text

3 Common mistakes

Slide 35

Slide 35 text

Service Other service Other app Models UI elements App™ 1 Monorepo to rule them all Embed app Marketing blog Native SDK

Slide 36

Slide 36 text

2. No rules, no structure, no automation •boundaries to prevent chaos •structure to give guidance •automation to make mistakes impossible

Slide 37

Slide 37 text

3. Ignoring speed Bad monorepos get converted back to polyrepos. Good monorepos are fast.

Slide 38

Slide 38 text

Whew...

Slide 39

Slide 39 text

Image by jcomp on Freepik

Slide 40

Slide 40 text

Image by slgckgc on Flickr

Slide 41

Slide 41 text

Image by freepic.diller on Freepik

Slide 42

Slide 42 text

Image by freepic.diller on Freepik AI Generated Images on Freepik

Slide 43

Slide 43 text

Vienna Philharmonic Orchestra on WikiMedia

Slide 44

Slide 44 text

Miroslav Jonaš nx.dev monorepo.tools @meeroslav Thank you!