Ask Slashdot: What's the Best Working Environment For a Developer?
New submitter Dorgendubal writes: I work for a company with more than a thousand developers and I'm participating in activities aimed at improving the work experience of developers. Our developers receive an ultrabook that is rather powerful but not really adapted for development (no admin rights, small storage capacity, restrictive security rules, etc.). They also have access to VDIs (more flexibility) but often complain of performance issues during certain hours of the day. Overall, developers want to have maximum autonomy, free choice of their tools (OS, IDE, etc.) and access to internal development environments (PaaS, GIT repositories, continuous delivery tools, etc.) . We recently had a presentation of VMWare on desktop and application virtualization (Workstation & Horizon), which is supposedly the future of the desktops. It sounds interesting on paper but I remain skeptical.
What is the best working environment for a developer, offering flexibility, performance and some level of free choice, without compromising security, compliance, licensing (etc.) requirements? I would like you to share your experiences on BYOD, desktop virtualization, etc. and the level of satisfaction of the developers.
What is the best working environment for a developer, offering flexibility, performance and some level of free choice, without compromising security, compliance, licensing (etc.) requirements? I would like you to share your experiences on BYOD, desktop virtualization, etc. and the level of satisfaction of the developers.
Start with that. The best hardware on the planet is useless if you can't think due to noise and interruptions.
With a no headphones rule.
BYOD followed by CYOD followed closely by a Linux laptop with sudo access. Development is a creative process, and every developer has their own set of tools and workflow productivity scripts and utilities that make their process work best for their mindset. Hiring a developer and than insisting that they use your management chosen laptop, with your management chosen OS, with your management chosen text editor and so on and so forth is like hiring a painter to make a portrait, but insisting they use your easel, your paints, your brushes and your canvas. Yes, it's possible to get good results like this, and yes some people will even do it, but ultimately it will cost you more, either in pay, time or resources.
Obviously some amount of standardization is necessary (version control, language etc) but as much as is practicable (even to the possibility of different IDEs), allow your developers to setup and control their personal dev environment however they want it.
If they want to pick their own tools, let them. I don't understand this fear of giving developers admin access to their machines. What do you think is going to happen if they get this supremely powerful level of access? If some are happy with VMs, let them use VMs. If some want to install, configure, and update their tools manually, let them. If it becomes a problem for a specific developer, steer them towards a VM instead. If you can't trust developers to maintain their system then you probably shouldn't be trusting them to write your company's code either.
It seems like our uber powerful dev machines are turning into expensive terminals and the ESX cloud is our new time sharing mainframe. Everything old is new again.
This would be my recommended list:
1) Give them the choice of OS, Linux or if they have to suffer, Windows / Mac.
2) Unlock the notebooks so they have absolute full control of them, that includes admin accounts.
3) Stop using Ultra-books, use high end notebooks with loads of Ram, good M2 / SSD Storage and high end processors.
4) Don't use any kind of virtual environment, they just have no performance to offer and should never be used in a desktop setting.
5) Open the development tools and let them use what they want.
5) Standardise to GIT for the SCM, as it's the only good SCM tool on the market.
6) Use good team communication tools.
7) Try to steer clear of Microsoft based tools, for instance TSF, it's a giant pile of steaming shit.
8) Allow BYOD.
9) Give every developer a multi head setup with good keyboards and mice, this never gets acknowledged, but a good Mechanical keyboard is essential.
10) Every developer should have a stand up desk, that can also covert to a sitting position.
11) All the developers should have isolated build servers, that they have near full control over, maybe not the root account, but damn near.
12) Don't allow IT to dictate how the computers for the developers are used.
13) Buy high quality chairs that are designed for long work sessions, they can be pricey but they're worth it.
14) Allow developers to have full flex time, so they don't have strict hours, they can work 8 hours over the course of the day.
15) Don't allow management to over plan meetings.
Basically treat the developers like the rockstars they are.
If the ultrabook is sufficient, then why not have a configuration that is more setup to a developer's line of work? In our company (we have about 100 devs) we have a different setup than the rest of the company. All of our source code and build tools are on central servers that we must interact with, but we pretty much get to do whatever we want with our machines. Some choose Eclipse, some choose IntelliJ, some others use Perl or the language of their choice. Most are using Macs, but some of us (me included) use Linux exclusively - so long as we can get our work done. We all have root/admin access to our machines to put whatever tools we want in whatever configuration we need, and if we screw it up, it's (more-or-less) on us to fix it. Several good screw-ups and you are dinged for it.
For development, where you need actual performance for reasonable build times, run nothing virtually nor remotely.
Grunty desktop PC, triple monitors, with local storage and frequent scripted rsync backups to a shared server.
Also pop tarts and Xena tapes.
"Nine times out of ten, starting a fire is not the best way to solve the problem." - my wife
Are you freakin' kidding me? How is a developer supposed to develop software that "requires administrator privileges" if he or she can't write to arbitrary directories and / or registry keys during normal, post-installation use? While you're at it, you might as well require your developers to use a 1080p screen, thus restricting their interfaces to actually rendering correctly on the displays of 99% of their users! What's next? Requiring the end product to run in an amount of memory likely to be supported on a single-socket motherboard and asking that code manipulating a database not be executed on the database server itself!!? Wow, just wow.
I work for a company with more than a thousand developers /. comments.
- Already, you're in the wrong venue. Unless you're a C-level executive, don't expect much change. You need white papers and golf clubs to change your company's policies, not
and I'm participating in activities aimed at improving the work experience of developers
- You're an outside consultant tasked with reducing the workforce by improving productivity. Don't forget that when you deal with your developers.
Our developers receive an ultrabook
- A real developer can't work on an ultrabook
that is rather powerful
- It's an ultrabook, not powerful
but not really adapted for development (no admin rights, small storage capacity, restrictive security rules, etc.)
- Your company is treating your developers like sales and customer support. Are you sure you're dealing with developers and not glorified tech support? If you are dealing with developers, you will also see high turnover and rather little experience. You're probably dealing with a developer sweatshop, not a well-managed tech house, change the culture around hiring first before you call these people "developers".
- They also have access to VDIs (more flexibility)
Virtual desktops are for things that you require little interaction with or that can easily be destroyed, not for development.
- but often complain of performance issues during certain hours of the day
Well, what do you expect, again, you're treating developers like tech support, your company's priorities are wrong.
- Overall, developers want to have maximum autonomy, free choice of their tools (OS, IDE, etc.) and access to internal development environments (PaaS, GIT repositories, continuous delivery tools, etc.)
If they don't have those, they're not going to be very productive developers. If you have thousands of developers without even basic version management and build tools, you better quit now, the company is doomed.
- We recently had a presentation of VMWare on desktop and application virtualization (Workstation & Horizon), which is supposedly the future of the desktops.
Who got to play golf? VMWare is well behind on the market and only survives through inertia and takeovers. It's the Microsoft/IBM of VM.
- It sounds interesting on paper but I remain skeptical.
Citrix did it better in the 2000s. It failed. For good reason.
- What is the best working environment for a developer, offering flexibility, performance and some level of free choice,
You answered your own question
- without compromising security, compliance, licensing (etc.) requirements ...) get a site license. Your developers should be smart enough to maintain their own security if they need admin rights, the ones that aren't can be weeded out immediately.
Recommend replacing management first. Compliance and licensing is a managerial thing and should be hardly required since the most powerful development tools are open source, for everything "necessary" that deals with evil business partners (Adobe, VMWare, Microsoft,
- I would like you to share your experiences on BYOD, desktop virtualization, etc. and the level of satisfaction of the developers.
BYOD: If your company is too cheap to provide the necessary machines then they get to deal with the headaches of BYOD.
Desktop Virtualization: Tried and failed in the previous dotcom bubbles.
Level of satisfaction is directly related to your management.
Custom electronics and digital signage for your business: www.evcircuits.com
I use VMWare for development and it works quite for my needs. We take advantage of the vmware software within the guest for a shared clipboard and shared storage. Setting up the network initially, with the corporate VPNs, was a bit of a hassle to figure out, but that was a one-time event.
My particular setup is Mac hardware and I spend most of my time SSHed to a local Linux VM. For the Linux environment, the fact that it's a VM is completely invisible - it looks and feels *exactly* like running it on metal (except backup and snapshots are easier).
I use a Windows VM for working with Microsoft SQL Server. I have no complaints about using Windows in a VM, but I'm only using a couple programs.
Two or three large monitors are very useful for development, with or without VMs. With VMs, I can have a Windows monitor (fullscreen VM) and a Linux monitor, and can move seamlessly between them.
I wouldn't want to use a GUI in a VM constantly without a nice large monitor or two, though. An OS needs to be able to fill a screen, not a little window on a screen.
I'm out of mod points or I'd mod you up.
My two cents - we have an open office plan where I work. So I like to stay after hours and work. Why? Because the lights are off, I don't have to listen to people milling around me all the time having conversations about the weather or last Sunday's game. Just me and the work I have to do. No distractions. It's blissful.
I can get more done in 2 hours like that than the previous 8.
Weaselmancer
rediculous.
Each to their own. Personally, I never cared for the editor that comes packaged with that OS.
Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading
You want as many pixels on your screen as you can get. Dual-head is better. (Triple- or quad-head is better still). This follows from the simple observation that the more information you can see at one time, the faster you can work and the fewer mistakes you will make.
Remember that the pixel-width of your screen is more important that the physical width of your screen. The physical width should be sized so that it completely fills your field of vision when you are seated comfortably and ergonomically. Your goal should then be to put as many pixels inside that fixed physical width as you possibly can.
Avoid programming on laptops. You cannot work efficiently while looking through a soda-straw.
Remote virtual desktops are okay for basic use, but even on high-end infrastructure there's a tiny latency which is quite annoying when coding (unless you type real slow). It's not "in your face" but you can feel it and it makes the experience unpleasant.
lucm, indeed.
What's the Best Working Environment For a Developer?
In your position, the answer is obvious. You should 'ask your developers'. Seriously, you are planning to do something that will affect a majority of your developers. Asking them is the best way to get the most favorable end result.
The next step is how to ask them. You should create a poll or a survey for your fellow developers regarding the new plans.
Only after you get those down, you can finally pick a few topics for your plans. Start with Office Resource, and then Work space. You can add in other optional items like office food, office services, etc after you get your major key points across to your developers.
finally, you should foresee your plans. If you or whoever management above you doesn't or unwilling to allocation resource for your plans, then you should drop it. You shouldn't provide it as a choice in the survey for the developers if it can't be done.
Here are a few examples of something you could do.
Office Resource - How would you rate the current office resource? (1-5, 5 being great)
1 - terrible
2 - not good
3 - fair
4 - good
5 - great
Office Resource - Which of the following would you pick to improve your development?
a) Better office computer
b) More power outlet
c) Better BYOD policy
d) Better office testing devices
e) Others [ ]
Work Space - Which of the following would you pick to improve your work environment?
a) Semi sound proofed partition
b) Larger desk space
c) More chairs in the lounge
d) Better Office Chair
e) Others [ ]
Other - Which of the following would you pick to improve your office experience?
a) Free lunch please
b) Free dinner please
c) Real coffee please
d) No Free Donuts?!?!
e) Better fake news please
f) Replace my boss please
g) Delete that jerk across the room please
h) All of the above
I have a high-end Dell laptop [...] quad core i7, SSD [...] separate dedicated graphics card for CUDA work [...] full admin rights [...] Corsair mechanical keyboard [...] I have my own office [...] two large widescreen displays [...] I also have a desktop machine in my office to use as I please [...] Some of my coworkers have standing desk configurations [...] I am free to download and install whatever software I want [...]
Hope this helps.
My current laptop at work has a carboard cpu and needs the pagefile to run two instances of notepad. So no, your description doesn't help at all.
lucm, indeed.
You learn more about your dev environment by actually installing and configuring the tools. If you have it done for you, you've missed out on some potentially useful knowledge. I'd rather take a very slight hit in productivity by maintaining my own system and not having to worry that the machines we're timesharing on are going to end up overloaded and lag like crazy (which they do). It's even worse if the VMs aren't hosted in the same facility. The WAN has a hiccup and next thing you know, productivity turns to crap.
There can be a number of benefits to developing in a VM, at least when what you're developing allows you to do it. One of the main benefits is hardware independence - it's very easy to pick up your VM guest and move it to a shiny new computer, such as getting new hardware upgrades every year, or even changing host operating systems from Windows 7/8/10 to Linux or MacOS.
If your host dies, due to a hardware problem, power spike, etc., you can run your guest(s) up on a new host from backups very quickly, avoiding the days of setup from scratch you might need otherwise. Restoring host backups to a new one doesn't always work for you due to hardware differences.
If you're developing multi-OS stuff it's very handy to have a bunch of VM guests on your machine for unit testing, but you'd normally have a test farm of servers/VMs/containers that run tests for the build servers.
VMs aren't perfect, though, (there are performance impacts for one thing) and not everyone can develop inside VMs due to requirements to access funky hardware or even recent OpenGL/DirectX implementations.
Virtualization is good for test environments but running development shall be in a non- virtualized computer.
I have never seen any advantage with a virtual machine for development since there are too many snags and performance penalties involved.
If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.