We're about to move into new offices and something that appeals is the potential for developers to work in smaller 'project' areas. Thinking semi-open-plan, with quiet rooms for getting stuff done, then as I say semi-partitioned areas (not closed room) with a few desks for those working on each project.<p>Anyway, part of this idea involves moving between areas or projects. Laptops are one obvious answer - possibly outfitting desks with additional monitors, equipment as necessary. However we build fairly chunky (large) enterprise systems and sometimes running databases, FE tools, BE tools and the app (which might consist of a few components/services) takes a lot of resources. In terms of performance, battery considerations, upgradability and cost, desktops have many advantages. Point being, for the cost of a killer laptop, the corresponding desktop machine wipes the floor with it and I'd favour the responsiveness and performance.<p>My question is, is there a viable tech solution to facilitate modern (backend/fullstack) software development using some remote access/terminal arrangement. In the same office - gigabit LAN etc - with dedicated machines hiding in a cupboard or rack somewhere. BE/fullstack dev is currently in Windows land.<p>I guess for me that means working with multiple monitors and ideally multiple desktops.<p>In years gone by I've seen Citrix, terminal services, RDC, VNC.. but I'd like to know if it's viable for software engineering itself, and what kind of issues might crop up. Is the tech viable?<p>(Struggling to find an appropriate place to ask this question. Forgive me if this is off-topic for an Ask HN, but it's about efficiency in a growing team of hackers.. if I can swing it that way!)
From the Valve employee handbook (<a href="http://www.valvesoftware.com/company/Valve_Handbook_LowRes.pdf" rel="nofollow">http://www.valvesoftware.com/company/Valve_Handbook_LowRes.p...</a>):<p>> <i>Why does your desk have wheels?</i> Think of those wheels as a symbolic reminder that you should always be considering where you could move yourself to be more valuable. But also think of those wheels as literal wheels, because that’s what they are, and you’ll be able to actually move your desk with them.<p>> You’ll notice people moving frequently; often whole teams will move their desks to be closer to each other. There is no organizational structure keeping you from being in close proximity to the people who you’d help or be helped by most.<p>> The fact that everyone is always moving around within the company makes people hard to find. That’s why we have <a href="http://user" rel="nofollow">http://user</a> — check it out. We know where you are based on where your machine is plugged in, so use this site to see a map of where everyone is right now.
I've had a good experience running Windows 10 on Azure DevLabs VMs accessed via Remote Desktop from Mac and PC. Even with the VMs running in Ireland (I'm in London), they're very snappy and can happily use Visual Studio, Eclipse, etc. Even video and light 3D works well. I wrote up a blog post on it: <a href="https://www.mcleodmoores.com/blog" rel="nofollow">https://www.mcleodmoores.com/blog</a>
Inspired by Valve, here's the $15 solution we use:<p><a href="https://www.amazon.com/Mount-Adjustable-Universal-Computer-Holder/dp/B01N1ZIGM9/ref=sr_1_4?ie=UTF8&qid=1510406800&sr=8-4&keywords=computer+case+caddy" rel="nofollow">https://www.amazon.com/Mount-Adjustable-Universal-Computer-H...</a>
Desks with wheels; each desk with an ethernet switch and a power strip so you're down to two wires when you move the desk. Moving is really simple.<p>Additionally, teams may want to rearrange desks (e.g., in a circle, or back-to-back, or whatever). There's no reason not to have flexibility here.<p>You'll find that most people will still accumulate stuff, and will need some kind of storage. People also get attached to their chairs and their working posture (sitting/standing, monitor height) as well as their particular keyboard and mouse brand, etc. -- hot-desking seems bad for this.
I've often thought about this myself, and there's really no perfect solution.<p>The most practical option is just give people the hardware they need, then facilitate their comfort and mobility accordingly. Desktops and laptops being used simultaneously at the same desk is very common. I'd also suggest desks with wheels.<p>As far as remote solutions for your situation, I don't think there are any acceptable ones. Low-latency video streaming wouldn't even cut it. Personally I'd limit myself to solutions that actually run the display signal itself. There might be some clever things you can do with the latest versions of Thunderbolt/USB/HDMI/DisplayPort; I'm not fully up to speed.<p>If you do end up theorycrafting that approach, one additional point of consideration might be virtualization with direct hardware passthrough. You could probably do some cool things like assign one GPU per hotdesking location, and pool any unused GPUs as computing resources. Storage could be a similar story, with neat separation.<p>That said, running your own on-premises AWS can become very complicated and very expensive. I wouldn't go that route unless you're really, really set on the hotdesking thing.
There is an amazon product to this effect but that's obviously not local. I know one team inside a very large engineering organization that used x2go to remotely access an eclipse developer environment with all the resources/separation of duty available. I also visited a developer site that was rigged with a windows terminal services setup and two monitors/keyboard on every desk and that actually worked fairly well since the true horsepower was in the VM farm in the lab. Active Directory allows for that profile roaming as part of the core functionality so it's easy to transplant yourself around the place.<p>Generally (I was on an interview bender recently) I see desktops with raised monitors ganged together (either displayport or hdmi supports daisy-chained monitors) and a keyboard and everyone is issued a lightweight laptop and defers all the beef to the cloud/vm farm.<p>I keep going back to windows remote desktop as really the best remote desktop solution. It supports multiple monitors, and if you are a Windows environment with an AD you can roam from desk to desk trivially.
I've had good results in the past running a fairly complex VOIP + webapp call center from entirely custom code based on PXE boot and Linux. (Lots of universities used to use this in their labs, I don't know if it's still common these days.) This would also work for developers.<p>You can trial it quite simply. All you have to do is have user login network mount a home dir and you are in business.<p>In general laptops cost quite a bit, break lots, and people want to take them home which creates issues. I think a lot of companies just give developers laptops now. However, it can be quite nice for the developer to have "not at work = down time" as an option, larger screens and keyboards are generally smiled upon, and desktops are WAY CHEAPER. You can even go 100% diskless.<p>PXE is usually centrally supplied kernel vs. individual developer compiled kernel, though, which can be annoying if people want funky features. However, you can do this diskless as a default and just say those who want to sidestep the system can boot from an external SSD.
If you are considering hotdesking you don’t care about developer productivity.<p><a href="https://www.joelonsoftware.com/2006/09/07/a-field-guide-to-developers-2/" rel="nofollow">https://www.joelonsoftware.com/2006/09/07/a-field-guide-to-d...</a>
Try it before committing, and if you do go for a remote access system make sure that <i>everyone</i> is happy with it.<p>Have you considered personal workstations on movable desks as apparently used by Valve?
Hotdesk seem a good idea until you have people that has to take kids to school, or you have someone that has a meeting with a customer at 9am and has to come later to the office to discover (s)he cannot sit anywhere.<p>Don't fall in the trap of voip phone systems that don't allow you to be logged in two places at once (usually for licensing reasons): someday you (or your colleages) will be hunting for the voip phone that someone forgot to logout.<p>For remote desktop, etc. This is a very mature technology: try to pick the tech that better blends with all the other tech stach at home. Citrix, for instance works great but it ecosystem is not <i>trivial</i> the best part is they even have an integrated VPN (Netscaler) you can use.<p>On the hardware side, take a look at HP Moonshot servers. I bet there are equivalents our there from other brands, but those are worth seeing: 4.3U servers that can house 50+ physical desktops with own storage.
Red Hat has something for this that's tied to their acquisition of Qumranet/Spice [1], but I've only seen a demo video so I can't speak to its reliability or suitability for any given deployment. I'm also not sure what the attached marketing terms are if you want to research a supported solution. Basically, each developer's "real" machine is a VM on a beefy server, and terminals are interchangeable. In the demo I saw, each terminal had a contactless smart card reader. When the card is put on the reader, the terminal connects to the corresponding VM. Take the card off, and the terminal locks or switches to a transient/guest VM.<p>[1] <a href="https://www.spice-space.org/" rel="nofollow">https://www.spice-space.org/</a>
Eclipse Che might be worth looking into. I'm not sure how mature it is, but it gives you a web interface to Eclipse running on another machine.<p><a href="https://www.eclipse.org/che/" rel="nofollow">https://www.eclipse.org/che/</a>
Do the applications need to be running on the developers machines? A good deployment process that allows quick, one-click automated deployment of your latest changes to a testing environment can help a lot with that.<p>Otherwise, modern high-end laptops are quite powerful if you pick the <i>large</i> models not 13 inch thin ones, and you can certainly run a bunch of virtual machines/docker containers/whatever on a maxed-out laptop while it still being perfectly responsive; but you might want to have people running <i>both</i> a killer laptop and a beefy desktop if they're not deploying/running/testing everything on remote servers, the cost isn't that high.
A large proportion of the workstations at the company I work for are using Teradici (I'm not affiliated with this company at all) to implement the machines-in-the-machine-room idea you mentioned. They basically are remote units for providing keyboard/mouse/display connections over ethernet. In our setup each desk is always connected to the same machine in the rack, but I guess you could have them configured to change machine if you are changing physical location but want to use the same machine.
What about getting desks that you can add wheels to. I️ know you can put castors on GeekDesks, but I’m sure other desks support them as well. Fairly low tech solution, and your developers can use whatever equipment they prefer.
If you're using Windows, just use RDP to access the servers. Citrix and similar may end up being useful in time, but it's best to start simple.