Live data from Hacker News

Devpod: Remote development environment at Uber

uber.com

81–90 of 235 posts

Re: Devpod: Remote development environment at Uber

#81

We already have something like this at Meta for improving developer experience. All our dev environments are remote

Any externally visible docs on it? Google's is documented at https://cloud.google.com/blog/topics/developers-practitioner...

I don't think it's been discussed externally yet. It's called on-demand (some references to it here - https://developers.facebook.com/blog/post/2022/11/15/meta-de...).

Re: Devpod: Remote development environment at Uber

#82
so I can't really tell from the text. are they using some remote mode in the IDEs that keeps the editor itself local or are they doing NX type stuff?

also curious about the terminal access. does it maintain state on the remote (like screen/tmux) or are the sessions subject to reset under network cuts.

i'd also be curious about settings since the pods are ephemeral. i suppose people would have scripts to grab their dot files, but some things like say, the android avd tool, can store settings in myriad ways.

that said, looks very cool!

Re: Devpod: Remote development environment at Uber

#83
post #56

Can someone explain the rationale behind switching to a monorepo? I just don't get it. Does it mean also having a single unified production environment build? I have been managing a stack composed of 500+ repositories, communicating through webservices, files and ABIs for many years now, and never quite hit much of the issues cited as reasons to switch to monorepos. Having multiple small independent environments for…

>Does it mean also having a single unified production environment build?

No, the way you store the source code for projects is independent to how you ship them.

>Not having to update dependencies globally has been a feature as well.

For a large upgrade where a bot can't fix what will break it is typical to introduce it and have both versions in the monorepo at the same time. You still migrate each project one at a time and eventually remove the old version. Of course you could never finish migrating and have to support both versions at the same time.

>I found that if the structuring of projects in repositories make sense

I don't see how that makes any less sense than putting projects into folders.

>The deployment seems like a nightmare too, having to update the whole stack at once because you then have no idea which individual service changed between releases.

If your landing page is edited there is no reason that you should be deploying a new version of your mobile app. Deploying everything overran every commit is a tooling issue.

>Not to mention I really don't want people to spend time migrating project X - that does its work perfectly without issue since 5 years - to the latest version of LibFooBar just because project Y wants it.

Then pay the cost of supporting two versions of LibFooBar in your monorepo.

You can completely emulate what you do with multirepo with a monorepo. A monorepo gives you extra things like a single revision that can let you see the state of everything from when a build was made or making it easy to depend on the latest version of libraries without having to constantly bump it either manually or via bots.

Re: Devpod: Remote development environment at Uber

#84
Let's face it: monorepos are just huge monoliths. If you want modular software, you WILL have to pay the price of fragmentation.

Someone needs to think about the boundaries between different parts of a system. If those boundaries are defined by functions, classes, packages or services, it doesn't matter that much. Yes, it is always a pain.

Shipping the entire forest of modules in a single repo seems like a good compromise. It stops being a good compromise when you start creating a complicated network of soft dependencies between those modules. And when you have everything in a single repository, it's hard NOT to do that.

By the way, there's nothing wrong with monoliths. They're just better if you design them as such. There's nothing wrong with microservices as well. It shouldn't be a surprise though that neither of them are actually silver bullets.

I understand why these solutions were created. I see it as an ephemeral thing. Once someone figures out the tooling and practices to automate all of that painful management locally, developers will always prefer that. Then when it's fast and easy, we'll break it once again (like we did with classes, packages, containers, etc).

Re: Devpod: Remote development environment at Uber

#85
post #56

Can someone explain the rationale behind switching to a monorepo? I just don't get it. Does it mean also having a single unified production environment build? I have been managing a stack composed of 500+ repositories, communicating through webservices, files and ABIs for many years now, and never quite hit much of the issues cited as reasons to switch to monorepos. Having multiple small independent environments for…

A monorepo is indeed not necessarily the one true best way for everyone. But it is _a_ way that works well for certain large corps, such as Google, that can dedicate teams to solve challenges that indeed come with it.

Some advantages off the top of my head:

- Let's say I am getting an error in production, and it was built from version X of the repo. In 3 seconds I am navigating the source tree of all of my tens of thousands of dependencies at that exact version.

- While developing, doing experiments, or reproing a bug, I can trivially make temporary changes to any dependency. It's a zero effort thing, so I often jump into any dependency without hesitating. For example for adding some extra logging.

- Step debugging into code from any library dependency is trivial.

- Making changes to a library let me use the build and test system to find if it breaks any user. Because the build and test system is completely consistent across the monorepo, I can easily dig into any user's code, fix it, and run their tests with my changed library.

The "Software Engineering At Google" book page discusses more pros and cons: https://abseil.io/resources/swe-book/html/ch16.html#version_...

Re: Devpod: Remote development environment at Uber

#87
post #48

Earlier quoted context omitted.

It had some good ideas, but that was the extent of it. Every iteration of the solution since then has agreed that streaming all application UI is always going to be janky and needless. It's a lot better to host the data on the server side and let the client handle visual rendering by itself.

These days lots of people stream games and CAD sessions over the internet using software like parsec. It works quite well and is often better than the UI running locally on an underpowered GPU.

I heard Stadia was actually pretty good, especially for a game that wasn't super sensitive to fast reactions like RDR2.

Re: Devpod: Remote development environment at Uber

#88
post #77

Earlier quoted context omitted.

What's old is new again. How soon until we realize the X window system actually had some good ideas again and start running desktop apps on cloud servers for remote work?

I bet on LAN X11 forwarding was pretty sweet, but when I tried it over Wi-Fi/tethering is was pretty janky (and before someone suggests xpra, that wasn't buttery smooth either). But I do like the idea of what X11 forwarding is, better than VNC where whole desktop is shared. I read that on Windows RDP can "stream" only the window, whereas on Linux the implementation is full desktop only? (please correct me if I'm wron…

Honestly, I think xpra is probably the best open solution you will find. It does have (too) many knobs to configure so it takes time to try out different codecs and settings to find a sweet spot using their session info toolset. And the mailing list is very helpful. For example, if bandwidth is plenty, you can use the straight RGB encoding and it performs well. Turning on audio can have effect on your latency as well.

Re: Devpod: Remote development environment at Uber

#89
post #48

Earlier quoted context omitted.

It had some good ideas, but that was the extent of it. Every iteration of the solution since then has agreed that streaming all application UI is always going to be janky and needless. It's a lot better to host the data on the server side and let the client handle visual rendering by itself.

These days lots of people stream games and CAD sessions over the internet using software like parsec. It works quite well and is often better than the UI running locally on an underpowered GPU.

Sure but most regular consumer or business applications don't really need that level of graphical power. Rendering a menu or button or blurb of text locally from some layout language is always going to be more performant than streaming raw pixels from a server.

Re: Devpod: Remote development environment at Uber

#90
post #71

Earlier quoted context omitted.

But I don’t really have those concerns—they’re better mitigated. If source control goes down, I have a complete clone on my machine and so do my coworkers (yay git). I have done code reviews by pasting `git am` formatted patches between coworkers during particularly long GitHub outages. CI/CD is more problematic, but I only need those things to integrate work. I can still do work and verify correctness with tests tha…

Depends on the scale you're working with. If your complete code can fit locally, you're working at a different scale. Huge monorepos won't fit on a laptop-sized local disk these days, and a full local dev env would take a half dozen VMs to even replicate half-successfully.

We’re talking generally here about all software development, so of course we can find exceptional cases to refute anything anyone says. Let’s scope the discussion to what is likely a common developer scenario where `git clone` works and it’s possible to run a reasonable facsimile of the application locally (maybe with some simulators for cloud services).
Post reply on HN