Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

It means that I, as a dependency author, can make a breaking change and push not only the updates to my library, but also the updates to all my dependents in a single commit. Using a dependency packaging system like NuGet is a workaround for me not knowing who all my clients are. In a monorepo, I can have perfect knowledge.


  push not only the updates to my library, but also the
  updates to all my dependents in a single commit.
And what's more, you can run all their automated tests and address any problems your changes introduce. Which presumably means regular forced updates aren't the recipe for instability they would otherwise be.


Should you know who all your clients are? That seems to be a workaround for not having an adequate testing framework or a contract stating what your code will do. Do open source frameworks know everyone's code that is using it?

Plus you do have perfect knowledge if your CI tools builds everything on your commit. Which it will do anyway if you have a monorepo.


> That seems to be a workaround for not having an adequate testing framework or a contract

Sometimes you get that contract wrong, and you don't realize it until you've shipped it. If you want to evolve an API by introducing a breaking change, you can do it at Google. You just have to migrate the clients with the API change. It means your APIs can both improve and stay lean, without needing to carry around legacy cruft, which is great.

It's not really an option in open source.


That's a good point about not carrying cruft forward. I've often seen on projects where there's crazy methods like sendEmailOn3rdBirthdayAfterFullMoon as someone somewhere needed it for a single project but who knows if it is still in use.


You will not have perfect knowledge. Even at Google they don't truely have a mono repo, as there is several other projects that live outside the monorepo. A build system will also detect changes and run test, produce a build, and notify maintainers, when you update a dependency. Monorepo is not needed for this.


> Using a dependency packaging system like NuGet is a workaround for me not knowing who all my clients are.

Between published manifests and search indexed source code, you would know who all your clients are, even without a monorepo.


take debian. you write a new version. push the new package. everyone else's build will fail until they update.

its as bad as you describe, but more organized :)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: