IMO it’s language dependent.<p>Thinking back on my work experience I’ve worked on:<p>1. Pure JS/TS
2. JVM/Kotlin/Java
3. Polyglot Kotlin+Python
4. Polyglot JVM+Cpp+TS+Python<p>I’ll address each one and what I used at the time.<p>But first I’ll address my dev flow for a greenfield project. Initially after some cursory documentation I build a scaffold. Over the years my scaffold has pretty much boiled down to two main directories, packages and services. Packages expose functionality, services consume functionality from packages and distribute it over RPC. It’s served me well.As for service standup, it goes: local host to incubate it, docker compose to integrate it and develop , kubernetes to deploy it.<p>For the pure TS code base, at the time I used yarn workspaces and lerna. This worked well at the time and I had no complaints from what I can remember. I think I remember having to volume mount my whole repo into each individual service to get hot reloading working, which was no fun.<p>For Pure JVM stacks, I found gradle was the way to go. It seems like a pain in the ass at first but once you grok it, and stay on a stable version it rocks. You can orchestrate whole workflows in it.<p>Polyglot Kotlin and Python. So I went about this a couple ways until I settled on something I liked. First I said, ahh yeah gradle can do everything, so I wrote a poetry wrapper and had my python services pretend they were like JVM services. This ended up not working so well in the long term. Especially because python library sharing is a lot different than JVM. The I went for a hybrid approach where there were multiple layers. Gradle for JVM code, poetry for python code. This was good but switching context kinda sucked and there were too many commands to remember, and ctrl+r history and tab only gets you so far.<p>For the last one, Polyglot JVM, Cpp, Python, JS/TS… I think I finally have something I’m happy with (for now at least), like I feel productive and I don’t dread having to do like anything in the codebase. The final touch was, take the gradle for JVM, poetry for Python, use turbo repo with pnpm in a web directory for all your JS/TS code. I then tie everything together in a combination of gradle scripts but more importantly, a python tooling package that uses click cli and poetry. The python tooling package has logic for anything I want to script, and I expose a CLI for it. Then I have one of my modular make files expose the functionality by calling into the python package.<p>Seems like quite the contraption but it works.<p>Judging from other comments I might want to check out bazel.