Does coding with LLMs mean more microservices?

(ben.page)

39 points | by jer0me 9 hours ago

15 comments

  • jensneuse 12 minutes ago
    One thing I find interesting is how GraphQL has evolved from an API technology for API consumers with "different needs" to an API technology for agents. What helped organizations scale GraphQL across multiple teams is Federation, a way to split one supergraph into multiple subgraphs. So, what works well to scale teams actually works equally well for agents. The core value you can get from Federation is a "coordination" layer that is deterministic. Now, what's interesting is that you can scale agentic software development pretty well when you have a deterministic layer where everyone involved can agree. I wrote more about this on our blog if anyone is interested: https://wundergraph.com/blog/graphql-api-layer-for-ai-agents
  • iainmerrick 35 minutes ago
    Like almost all of these articles, there's really nothing AI- or LLM-specific here at all. Modularization, microservices, monorepos etc have all been used in the past to help scale up software development for huge teams and complex systems.

    The only new thing is that small teams using these new tools will run into problems that previously only affected much larger teams. The cadence is faster, sometimes a lot faster, but the architectural problems and solutions are the same.

    It seems to me that existing good practices continue to work well. I haven't seen any radically new approaches to software design and development that only work with LLMs and wouldn't work without them. Are there any?

    I've seen a few suggestions of using LLMs directly as the app logic, rather than using LLMs to write the code, but that doesn't seem scalable, at least not at current LLM prices, so I'd say it's unproven at best. And it's not really a new idea either; it's always been a classic startup trick to do some stuff manually until you have both the time and the necessity to automate it.

  • nikeee 2 hours ago
    What matters for LLMs is what matters for humans, which usually means DX. Most Microservice setups are extremely hard to debug across service boundaries, so I think in the future, we'll see more architectural decisions that make sense for LLMs to work with. Which will probably mean modular monoliths or something like that.
    • onlyrealcuzzo 57 minutes ago
      Aren't libraries just "services" without some transport layer / gateway?

      You should only ever have a separate "service" if there's a concrete reason to. You should never have a "service" to make things simpler (it inherently does not).

      Libraries on the other hand are much more subjective.

      • staticassertion 14 minutes ago
        > Aren't libraries just "services" without some transport layer / gateway?

        Libraries can share memory, mutable state, etc. Services can not.

        > (it inherently does not)

        That's going to be debatable.

    • zoho_seni 1 hour ago
      Definitively our approach is ai dev ex first.
  • int_19h 2 hours ago
    That's an argument for components with well-defined contracts on their interfaces, but making them microservices just complicates debugging for the model.

    It's also unclear whether tight coupling is actually a problem when you can refactor this fast.

    • jillesvangurp 37 minutes ago
      Whether you call it modularization, good design, SOLID principles, or micro services, etc. It all boils down to the same thing. I usually dumb it down to two easy to understeand metrics: cohesiveness and coupling. Something with high cohesiveness and low coupling tends to be small and easy to reason about.

      Things that are small, can be easily replaced, fixed, changed, etc. with relatively low risk. Even if you have a monolith, you probably want to impose some structure on it. Whenever you get tight coupling and low cohesiveness in a system, it can become a problem spot.

      Easy reasoning here directly translates into low token cost when reasoning. That's why it's beneficial to keep things that way also with LLMs. Bad design always had a cost. But with LLMs you can put a dollar cost on it.

      My attitude with micro services is that it's a lot of heavy handed isolation where cheaper mechanisms could achieve much of the same effects. You can put things in a separate git repository and force all communication over the network. Or you can put code in different package and guard internal package cohesiveness and coupling a bit and use well defined interfaces to call a functions through. Same net result from a design point of view but one is a bit cheaper to call and whole lot less hassle and overhead. IMHO people do micro-services mostly for the wrong reasons: organizational convenience vs. actual benefits in terms of minimizing resource usage and optimizing for that.

    • dist-epoch 2 hours ago
      You are taking the article argument too literally. They meant microservices also in the sense of microlibraries, etc, not strictly a HTTP service.
      • iainmerrick 1 hour ago
        No, I think you’re not reading it literally enough. “Microservices” generally does mean separate HTTP (or at least RPC) servers. Near the beginning, the article says:

        A microservice has a very well-defined surface area. Everything that flows into the service (requests) and out (responses, webhooks)

        • mexicocitinluez 53 minutes ago
          I think a better word would have been "modularization" than "microservices" as I also highly correlate "microservices" with http-based calls.
      • benfortuna 1 hour ago
        Why arbitrarily invent new meanings (for microservices) and new words (microlibraries) when there are already many adequate ways to describe modular, componentized architecures?

        A totally valid and important point but it has been diluted by talking about microservices rather than importance of modular architectures for agent-based coding.

        • mexicocitinluez 52 minutes ago
          > describe modular,

          Agreed. Modular is what they were probably after.

  • veselin 1 hour ago
    I think this is a promise, probably also for spec driven development. You write the spec, the whole thing can be reimplemented in rust tomorrow. Make small modules or libraries.

    One colleague describes monolith vs microservices as "the grass is greener of the other side".

    In the end, having microservices is that that the release process becomes much harder. Every feature spans 3 services at least, with possible incompatibility between some of their versions. Precisely the work you cannot easily automate with LLMs.

  • tatrions 3 hours ago
    The bounded surface area insight is right, but the actual forcing function is context window size. Small codebase fits in context, LLM can reason end-to-end. You get the same containment with well-defined modules in a monolith if your tooling picks the right files to feed into the prompt.

    Interesting corollary: as context windows keep growing (8k to 1M+ in two years), this architectural pressure should actually reverse. When a model can hold your whole monolith in working memory, you get all the blast radius containment without the operational overhead of separate services, billing accounts, and deployment pipelines.

    • stingraycharles 3 hours ago
      This makes no sense as you’re able to have similar interfaces and contracts using regular code.

      Microservices solve an organizational problem mostly — teams being able to work completely independently, do releases independently, etc — but as soon you’re going to actually do that, you’re introducing a lot of complexity (but gain organizational scalability).

      This has nothing to do with context sizes.

    • lyricalstring 2 hours ago
      Agree on the context window framing. If an LLM needs well-defined boundaries to work well, just write clean module interfaces. You don't need a network boundary for that.

      The part about "less scrutiny on PR review" and committing straight to main is telling too. That's not really about microservices, that's just wanting to ship faster with less oversight. Works until it doesn't.

      • Kim_Bruning 2 hours ago
        > The part about "less scrutiny on PR review" and committing straight to main is telling too. That's not really about microservices, that's just wanting to ship faster with less oversight. Works until it doesn't.

        And that's the reason I think the author proposes microservices I think. Doesn't need to be microservices, but something where your codebase is split up so that when-not-if it does blow up, you only roll back the one component and try again.

        Modularization is hardly a new idea, but might need a slight spin to allow agents to work by themselves a bit more. The speed advantages are too tantalizing not to.

        • Kim_Bruning 1 hour ago
          Expanding: Think of it this way: A typical sprint in current best practices is 1-2 weeks. Having to scrap a module and start over loses you a lot of time and money. A typical "AI sprint " is << 20 minutes. Several passes of failing a module and rewriting the spec is still only a few hours.

          A typical rant is "You claim only the output is what counts; but what about the human warmth?". Well, this is IT. If you can thoroughly prove that the inputs and outputs are identical to spec you have done the thing.

          Harder than it sounds: CDNs and suss libraries no one told you about, abysmal security, half baked features? Uh.... yeah that happens. But if the blast radius is small, it's fixable and survivable. Hopefully.

          Famous last words.

    • dist-epoch 2 hours ago
      Large context windows cost more money. So the pressure is still there to keep it tight.
  • Theaetetus 1 hour ago
    I don't think LLMs push us to use microservices as much as Borgers says they do. They don't avoid the problems microservices have always faced, and encapsulation is mostly independent from whether a boundary is a service-to-service boundary:

    https://www.natemeyvis.com/agentic-coding-and-microservices/

    • scotty79 1 hour ago
      service-to-service boundary is easiest to keep with the way we are using LLMs to code right now
  • siruwastaken 3 hours ago
    This seems like the idea of modularizing code, and using specific function sighatures for data exchange as an API is being re-invented by people using AI. Aren't we already mostly doing things this way, albeit via submodules in a monolith, due to the cognitive ctrain it puts on humans to understand the whole thing at any given time?
  • victorbjorklund 1 hour ago
    I think no. But I think it makes sense to break down your app into libraries etc
  • _pdp_ 3 hours ago
    This makes no sense. You can easily make a monolith and build all parts of it in isolation - i.e. modules, plugins, packages.

    In fact, my argument is that there will be more monolith applications due to AI coding assistants, not less.

  • c1sc0 3 hours ago
    Why microservices when small composable CLI tools seem a better fit for LLMs?
    • mrbungie 2 hours ago
      His argument is not about LLM tools but rather about which architecture is better suited for coding with LLMs.
  • Kim_Bruning 2 hours ago
    A typical rant (composed from memory) goes something like this:

    > "These AI types are all delusional. My job is secure. Sure your model can one-shot a small program in green field in 5 minutes with zero debugging. But make it a little larger and it starts to forget features, introduces more bugs than you can fix, and forget letting it loose on large legacy codebases"

    What if that's not a diagnosis? What if we see that as an opportunity? O:-)

    I'm not saying it needs to be microservices, but say you can constrain the blast radius of an AI going oops (compaction is a famous oops-surface, for instance); and say you can split the work up into self-contained blocks where you can test your i/o and side effects thoroughly...

    ... well, that's going to be interesting, isn't it?

    Programming has always supposed to be about that: Structured programming, functions (preferably side-effect-less for this argument), classes&objects, other forms of modularization including -ok sure- microservices. I'm not sold on exactly the latter because it feels a bit too heavy for me. But ... something like?

  • claud_ia 2 hours ago
    [dead]
  • jeremie_strand 9 hours ago
    [dead]
  • benh2477 9 hours ago
    [dead]