Setting up a development environment is hard. I've seen teams where it takes days or even a week for a developer to get their laptop or workstation ready to work on a large project.

Differences between developer environments can cause the dreaded: "it works on my machine". Large projects may be difficult to run entirely on a laptop. Monorepos need special tooling. Companies worry about securing code and secrets on end-user machines.

More and more development environments are shifting to the cloud. Some products, like GitHub codespaces and Coder, are running full IDEs like VSCode remotely. This is possible because VSCode is built on Electron (of course, there are some rough edges). There are non-VSCode alternatives like Eclipse Che. There are also pure-cloud IDEs like AWS Cloud9 that have tight integration with the cloud.

VSCode also includes a more souped-up version of VSCode-over-ssh that seems to work fairly well. Just as remote IDEs need a few hacks to make it responsive, development-over-ssh requires its own set of hacks. The benefit is that all extensions work natively, and integration with the OS filesystem is much cleaner.

Network latency and browser extensibility have always made remote development challenging, but that's changing. Some companies are even moving the runtimes to the browser to mimic the "local" experience.

Personally, I have a hybrid approach. On my workstation, I use skaffold and switch between a local minikube cluster and a remote Kubernetes cluster. On my laptop, I've been experimenting with VSCode-over-ssh to remove the need for Docker-on-my-laptop completely. With Tailscale as an alternative to incessant port-forwarding or ngrok, it's not a bad setup.