Top Banner
Dependencies, Distributed code and engineering velocity Mike McGarr @SonOfGarr © J. Michael McGarr, 2017
72

Dependencies, distributed code and engineering velocity

Jan 23, 2018

Download

Technology

Mike McGarr
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: Dependencies, distributed code and engineering velocity

Dependencies,Distributed codeand engineering velocity

Mike McGarr@SonOfGarr© J. Michael McGarr, 2017

Page 2: Dependencies, distributed code and engineering velocity

I have a problem...

© J. Michael McGarr, 2017

Page 3: Dependencies, distributed code and engineering velocity

...that impacts every engineer at Netflix.

© J. Michael McGarr, 2017

Page 4: Dependencies, distributed code and engineering velocity

Affects you too.

© J. Michael McGarr, 2017

Page 5: Dependencies, distributed code and engineering velocity

I don't know the solution.

© J. Michael McGarr, 2017

Page 6: Dependencies, distributed code and engineering velocity

direction

© J. Michael McGarr, 2017

Page 7: Dependencies, distributed code and engineering velocity

So what is this problem?

© J. Michael McGarr, 2017

Page 8: Dependencies, distributed code and engineering velocity

SHAREDCODE© J. Michael McGarr, 2017

Page 9: Dependencies, distributed code and engineering velocity

cloud microservices

© J. Michael McGarr, 2017

Page 10: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 11: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 12: Dependencies, distributed code and engineering velocity

client libraries

© J. Michael McGarr, 2017

Page 13: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 14: Dependencies, distributed code and engineering velocity

transitive dependencies

© J. Michael McGarr, 2017

Page 15: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 16: Dependencies, distributed code and engineering velocity

consuming librariesshould beeasy

© J. Michael McGarr, 2017

Page 17: Dependencies, distributed code and engineering velocity

software isn't static

© J. Michael McGarr, 2017

Page 18: Dependencies, distributed code and engineering velocity

semantic versions

© J. Michael McGarr, 2017

Page 19: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 20: Dependencies, distributed code and engineering velocity

(*) 3.1.133.1.143.1.153.1.163.2.03.2.13.2.23.2.3

4.0.0-RC1

© J. Michael McGarr, 2017

Page 21: Dependencies, distributed code and engineering velocity

Which version is good?

© J. Michael McGarr, 2017

Page 22: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 23: Dependencies, distributed code and engineering velocity

(*) 3.1.13 ❌3.1.14 ❌3.1.15 ❌3.1.16 ✔3.2.0 ❌3.2.1 ❌3.2.2 ✔3.2.3 ❌

4.0.0-RC1 ❓

© J. Michael McGarr, 2017

Page 24: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 25: Dependencies, distributed code and engineering velocity

Semantic versioning is insufficient

© J. Michael McGarr, 2017

Page 26: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 27: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 28: Dependencies, distributed code and engineering velocity

Which version of guava will you get?

© J. Michael McGarr, 2017

Page 29: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 30: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 31: Dependencies, distributed code and engineering velocity

Pinning versions is technical debt

© J. Michael McGarr, 2017

Page 32: Dependencies, distributed code and engineering velocity

Just give me a version thatworks!

© J. Michael McGarr, 2017

Page 33: Dependencies, distributed code and engineering velocity

consuming librariesis actuallyhard

© J. Michael McGarr, 2017

Page 34: Dependencies, distributed code and engineering velocity

Well, at leastpublishing

is the easy, right?© J. Michael McGarr, 2017

Page 35: Dependencies, distributed code and engineering velocity

Need to change foobar-client:3.2.2→ Bug fix? 3.2.3

→ Behavior change? 3.2.0→ API change? 4.0.0

© J. Michael McGarr, 2017

Page 36: Dependencies, distributed code and engineering velocity

Who will I break?

© J. Michael McGarr, 2017

Page 37: Dependencies, distributed code and engineering velocity

Who is consumingmy library?

© J. Michael McGarr, 2017

Page 38: Dependencies, distributed code and engineering velocity

Who is using thisAPI

that I want to change?© J. Michael McGarr, 2017

Page 39: Dependencies, distributed code and engineering velocity

Publishers lack

organization-widevisibility

© J. Michael McGarr, 2017

Page 40: Dependencies, distributed code and engineering velocity

There are solutions out

there...© J. Michael McGarr, 2017

Page 41: Dependencies, distributed code and engineering velocity

Option #1:

Just deal with pain

© J. Michael McGarr, 2017

Page 42: Dependencies, distributed code and engineering velocity

Option #2:

Share nothing

© J. Michael McGarr, 2017

Page 43: Dependencies, distributed code and engineering velocity

Option #2:

Share nothing little

© J. Michael McGarr, 2017

Page 44: Dependencies, distributed code and engineering velocity

Option #3:

Monorepo

© J. Michael McGarr, 2017

Page 45: Dependencies, distributed code and engineering velocity

→ all code in a single repository→ source integration→ head is production

→ no versions→ atomic API changes

→ lock step deployments

© J. Michael McGarr, 2017

Page 46: Dependencies, distributed code and engineering velocity

constraints

© J. Michael McGarr, 2017

Page 47: Dependencies, distributed code and engineering velocity

monorepo depends on gates

© J. Michael McGarr, 2017

Page 48: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 49: Dependencies, distributed code and engineering velocity

Our approach...© J. Michael McGarr, 2017

Page 50: Dependencies, distributed code and engineering velocity

Can we get the benefitsof a monorepo,

without the constraints?© J. Michael McGarr, 2017

Page 51: Dependencies, distributed code and engineering velocity

Publisher feedbackManaged source

Distributed refactoring© J. Michael McGarr, 2017

Page 52: Dependencies, distributed code and engineering velocity

Publisher feedback

© J. Michael McGarr, 2017

Page 53: Dependencies, distributed code and engineering velocity

AstridNiagara

© J. Michael McGarr, 2017

Page 54: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 55: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 56: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 57: Dependencies, distributed code and engineering velocity

I now know who I will break!

© J. Michael McGarr, 2017

Page 58: Dependencies, distributed code and engineering velocity

Managed source© J. Michael McGarr, 2017

Page 59: Dependencies, distributed code and engineering velocity

eliminate reduceconsumer pain

© J. Michael McGarr, 2017

Page 60: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 61: Dependencies, distributed code and engineering velocity

© J. Michael McGarr, 2017

Page 62: Dependencies, distributed code and engineering velocity

Shorten adoption curve

© J. Michael McGarr, 2017

Page 63: Dependencies, distributed code and engineering velocity

Give me a version thatworks!

© J. Michael McGarr, 2017

Page 64: Dependencies, distributed code and engineering velocity

Distributed refactoring

© J. Michael McGarr, 2017

Page 65: Dependencies, distributed code and engineering velocity

Gradle Lint

© J. Michael McGarr, 2017

Page 66: Dependencies, distributed code and engineering velocity

How do IChange my API

across hundreds of repos?

© J. Michael McGarr, 2017

Page 67: Dependencies, distributed code and engineering velocity

1. Find all repositories2. Find all API calls

3. Refactor all API calls4. Issue pull requests en masse

© J. Michael McGarr, 2017

Page 68: Dependencies, distributed code and engineering velocity

experimental

© J. Michael McGarr, 2017

Page 69: Dependencies, distributed code and engineering velocity

Publisher feedbackManaged source

Distributed refactoring© J. Michael McGarr, 2017

Page 70: Dependencies, distributed code and engineering velocity

"Eventually consistent distributed monorepo"-- Avi Bryant (Stripe)

© J. Michael McGarr, 2017

Page 71: Dependencies, distributed code and engineering velocity

Will this work?

© J. Michael McGarr, 2017

Page 72: Dependencies, distributed code and engineering velocity

Thank youMike McGarr@SonOfGarr

[email protected]© J. Michael McGarr, 2017