Okay, I gave it 10 minutes and tried to find out what "Polylith" is about, skimming reading material found by following down links starting at the PyPi page.<p>What I found was 10 minutes of LEGO-bricks analogies.<p>What I didn't find, is an answer how this is supposed to be that much different from Microservices or libraries.<p><a href="https://polylith.gitbook.io/polylith/" rel="nofollow noreferrer">https://polylith.gitbook.io/polylith/</a><p><pre><code> Polylith addresses these challenges by introducing simple,
composable, LEGO-like bricks, which can easily be shared across
teams and services. The choice of bricks determines what each
artifact does and how it's exposed.
</code></pre>
Okay, sounds neat, but ... doesn't that pretty much describe a Microservice? A somewhat-self-contained building block that exposes an interface?<p>And if it doesn't, isn't this just describing a module/package/library?<p>Sure, I mean, the idea of having all these libraries in one repository is neat, but...where is the difference from having all of them externally, in their own repos, and leaving the rest to the build pipeline?<p>Again, this is just based on what I found in 10 minutes of lazy skimming, so if anyone wants to point out something important I overlooked or didn't understand, I'm happy to be corrected.
Am I misunderstanding something or does this look like the worst possible incarnation of a monolith? Everything seems to be sharing everything, so whenever you modify anything, everything is impacted. Which in turn, means that a developer who wants to make any changes, has to understand the whole system in order to not break things or make a mess - which of course leads the cautious developer to write new, duplicate code for the piece of shared functionality that they want, defeating the whole purpose.<p>Happy to be corrected, I hope I'm wrong.
Microservices are about the data, not the code. Sharing code is really not an issue. Defining data domain boundaries and data change protocols is the challenging issue in application level architecture. See no mention of data here, so...moving on.
Like many others here I gave up after a while. The author fails to address any of the questions I had when reading:<p>- How many deployment artifacts do we have? How many nodes/machines running different processes?<p>- How do we ensure clear separation of domain boundaries (something which microservices excel at) while still staying flexible when those boundaries change (something which a monolith excels at)? Essentially: How do we prevent chaos?<p>- When changing one of the LEGO bricks, who is responsible for updating their usage downstream? What is the contract here?
Communicating new ideas is hard, and there’s probably still a lot of work left in that department. I think the focus has been on the tools so far, but as they start to mature the focus could shift to explanation.<p>I’ve found Polylith a wonderful way of structuring projects over the years. One of the things I really enjoy is having “interfaces” again, instead of relying on anonymous/private functions (in eg clojure) to hide implementation.
Docs need to be drastically streamlined. I went through page after page and still don't have a clear idea of what polylith does or what motivation there is to drive me to continue parsing the docs.
I have tried hard to write docs that explain the architecture and the usage of the tool primarily in the Python space. You will find it here, and if you prefer videos there are links in there too: <a href="https://davidvujic.github.io/python-polylith-docs/" rel="nofollow noreferrer">https://davidvujic.github.io/python-polylith-docs/</a>
There is something to be said for questions like "what is the best way to organize code, many small codebases or one big one?". Code can have many properties. It can be easy or hard to read, to extend, performance, scalable and a number of other things.<p>But poly- or monolithic is a way to describe how the code is organized. It must never be an end goal in itself. That way lies madness.
As far as I understand this is Python specific.<p>Most monorepos I work with do not use a single language but many. It's pointless to use multiple tools for the same thing instead of one that works with all languages, like nx for example.
I am not smart enough to full understand what this does? I just don’t full understand the use. Does someone have a good rundown of how this would help me?