This is a good take. In the consulting context, I've quickly realized that most problems at a business can be broken down into "this will destroy the project on its own" and "this is an annoyance to a good engineer". Language choice is basically always in the latter category, whereas poor management or one egotist is frequently in the former.

Like, my team doesn't know anything about Java, but we COULD ship in Java if forced to. We can't ship if the feedback loop is a 30-minute CI pipeline because there is no way to have a local dev environment.

My team ships with a multi-hour CI pipeline that works 50% of the time and effectively zero local development. It's awful in almost every way developer experience-wise, but rock bottom is deeper than you think!

Lol, that sums up the human experience. You should sell bumper stickers:

"Rock bottom is deeper than you think!"

I had local development in a previous job, but you had to start a whole Kubernetes cluster. No unit tests, but a whole suite of e2e tests. And forget about debuggers as it was all microservices.

When using Java or .NET, it is possible to plug debuggers into microservices, but that needs to be taken into account when designing their Dockerfiles.

Just as heads up for others.

They may not have existed back then, but between kind, and either Tilt or Skaffold, it's at least not as bad as it once was.

My team reimplemented a stripped down binary of what our primary service does just so we could run it on our local machines. Otherwise it would take up well over 100GB of RAM. Iteration was a lot more annoying before we did that :)

I remember being there and the large amount of work many people did to make things better. Dig in for a few years and you can too.