dependencies, distributed code and engineering velocity

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

Upload: mike-mcgarr

Post on 23-Jan-2018

191 views

Category:

Technology


1 download

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