Earlier quoted context omitted.
That pretty much forces tooling to try to rebase and run CI either way ? If it cannot rebase its up to the developer to fix his branch. Master should be always in a state of release at any moment. I just cannot imagine it was an unknown practice for some.
Except that with the amount of activity on the repo it's simply impossible. Every new merge on master would require to rebase several hundred branches being worked on or awaiting reviewed. Multiply this with the hundreds of commits merged on master every day and you end up with way too much CI jobs to run.
Successfully Merging the Work of 1000 Developers
101–108 of 108 posts
Re: Successfully Merging the Work of 1000 Developers
#102Earlier quoted context omitted.
> Trying to build CI on every branch before merging to master just won't work with the scale they are dealing with. Google does it with 50 times the developer count. > At 1000 developers, the rate of PRs coming in makes it impossible to determine what current master will be when the PR is ready to merge (i.e. when the branch has a green build). True, it is impossible to catch all errors like this, but you can catch a…
You have no idea how Google solved it. Basically everyone with a Monorepo (except Google) implements it as a cargo cult best practice. Mindlessly copying Google without understanding how Google actually does it.
Re: Successfully Merging the Work of 1000 Developers
#103Earlier quoted context omitted.
> Trying to build CI on every branch before merging to master just won't work with the scale they are dealing with. Google does it with 50 times the developer count. > At 1000 developers, the rate of PRs coming in makes it impossible to determine what current master will be when the PR is ready to merge (i.e. when the branch has a green build). True, it is impossible to catch all errors like this, but you can catch a…
You have no idea how Google solved it. Basically everyone with a Monorepo (except Google) implements it as a cargo cult best practice. Mindlessly copying Google without understanding how Google actually does it.
Re: Successfully Merging the Work of 1000 Developers
#104Earlier quoted context omitted.
It’s about providing a platform for enabling global commerce. Our engineering blog has other posts that goes into technical depth about a lot of the challenges we face, and our solutions. For context, here is some info about Black Friday/Cyber Monday for us last year: https://engineering.shopify.com/blogs/engineering/preparing-...
I understand its a hugely popular service and there is a lot that goes in to something so big but there are bigger websites that run on much much smaller teams of developers. I just don't understand how there is even enough surface area on the app that 1000 people could be working on it at the same time. Is that number counting people working on the ops stuff or building other tooling not part of the main app?
Re: Successfully Merging the Work of 1000 Developers
#105Earlier quoted context omitted.
The core shopify codebase is a monolithic one, hence the merging infrastructure described in the post. It's not a "single project" in any useful definition of the phrase.
Im interested how what looks to me like a fairly standard web store could have such an enormous amount if developers working on it. Is there some kind of insane complexity behind webstores I am not seeing here?
Re: Successfully Merging the Work of 1000 Developers
#106Earlier quoted context omitted.
Point 2 is very important and very hard to get right. For unit tests, there is a clear dependency on the code and you can easily just run a subset of the tests. But wouldn't you have to run any system and integration tests of the affected module, as it's not clear what effects the code change can have? This will blow up CI times again. How did Google deal with this?
Your integration test needed the system that you were integrating with, so you'd have to declare that as a dependency. My philosophy was to always have integration tests run in the normal CI system. This basically meant creating a test binary that happened to link in the systems you were integrating with, and run tests against that. This is easier when everything is written in the same programming language, and for t…
Re: Successfully Merging the Work of 1000 Developers
#107Re: Successfully Merging the Work of 1000 Developers
#108Earlier quoted context omitted.
Point 2 is very important and very hard to get right. For unit tests, there is a clear dependency on the code and you can easily just run a subset of the tests. But wouldn't you have to run any system and integration tests of the affected module, as it's not clear what effects the code change can have? This will blow up CI times again. How did Google deal with this?
Your integration test needed the system that you were integrating with, so you'd have to declare that as a dependency. My philosophy was to always have integration tests run in the normal CI system. This basically meant creating a test binary that happened to link in the systems you were integrating with, and run tests against that. This is easier when everything is written in the same programming language, and for t…
I've seen several blog posts from Google about using fakes and 'hermetic servers' for testing. We use GCP for our product, and unfortunately, Google doesn't seem to care much about making this easy. For example, I think I saw only one or two languages for which the Google Storage client libraries provided "fakes" of a Google Storage server. For PubSub (and maybe one or two other services?) there is the PubSub Emulator, which is unfortunately in Java and isn't supported by any of the CLI tools.
For all their love of fakes and hermetic servers, it would be awesome if they provided them for all the GCP services.