then do you have some kind of developer tooling to do jump-to-definition across the RPC boundaries?
Not sure what you mean by “jump to definition”, I assume “how do we know which services do what?”
There’s somethings that help:
- All of our services use the same grammatical structure for RPCs
 Once you learn this, you can pretty much guess roughly what an RPC will look like Services also follow obvious naming patterns (service.emoji deals with emoji, service.plushie deals with the Monzo Plushie etc etc – these are just fake example services) Services also follow obvious naming patterns (service.emoji deals with emoji, service.plushie deals with the Monzo Plushie etc etc – these are just fake example services)
- We have shell completion for all RPC calls so if you can approximately guess what an RPC looks like, you can autocomplete it  
- We have extensive documentation around most services and RPCs. For more on this, see Jen’s forum posts Monzonaut AMA - Jen - Knowledge Management Lead 📚
We also use a monorepo ( https://twitter.com/obeattie/status/1080497735680307200 for source) which means “jump to definition” in a code editor is very easy, as it’s all under the same repo 