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.
according to management.
Well, you asked.
SJW: Someone who has run out of real oppression, and has to fake it.
There are still people developing outside of a VM???? I feel like Marty McFly.
give Asians three or more weeks off since their plane tickets are so expensive and require so much travel time off considering travel to India takes so much time. So of course American developers get screwed.
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.
is all that I would like to see. As if all the things matter when I'm staring all day at a text editor having to work with existing tools anyway.
At some of the Fortune 500 companies I've worked at, MacBook Pros were standard issue for having the Mac OS with Unix command line and the ability to run Windows or Linux in VM or multi-boot. Engineers loved them.
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.
You pretty much nailed it right there. The last time (and I mean I am never going back, different story) I was in that situation, there was no problem with me bringing in my own kit. I had my own System76 laptop, used Awesome WM, and so on. The key is that I was able to demonstrate that my preferred way of doing things was fundamentally compatible with doing what I needed to do with everyone else. I had to do some hacking to get that done, but that was allowed itself. Okay, so I suppose an environment with thousands of developers working together (???), things may need to stretch a bit, but when you talk of internal dev environments you hit another nail. You are asking for openness that will allow people to use their brains as individuals most effectively while also using their brain effectively with oh so many others. What you need is a voice. What you need is a platform whereby all those different voices can come to a consensus on what can and can't be for work to be effective outside of what the overlords give you under their best intentions. With all that said, you need a voice the overlords will listen to. There, I have no advice.
Brought to you by Carl's Junior.
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.
I use PyCharm IDE for Python.
I guess the best is always to just hand them a selection of laptops so they can choose what fits them best. Then let them decide what tools they want to use themselves.
No admin rights? Are you serious? I work as a field engineer and even I have admin rights on my laptop. I can understand that salesmen and the administration of the company is restricted as they might not have any clue about computers, but the developers? C'mon.
Let them decide the major stuff about their tools, that's how you get work done properly.
In the end it's all about numbers, because you have to be productive anyway. Good luck, but it will never change as long as it cost more.
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
If you are doing something for the web consider AWS or Azure. I use both and have found them extremely useful for my people. If you are doing things Linux based AWS with RDS can not be beat. If you are doing something with Microsoft consider Azure. There are a lot of pre-built AMI's or images available. If you are on a pc VMWare is good, if you have any mac users parallels is better. There are free options but with that many people I'd check out one of the paid ones. License wise you will need to investigate it but Microsoft offers 90 day licenses for Windows. https://www.microsoft.com/en-u.... That is something I'm checking out as well. The thought is if your developer needs for testing only then throw away the virtual machine this is a good way to go. I'm a fan of hiring professionals and making sure people know to not download anything that crosses their path. So opening permissions is great and gives them flexibility. I am not a fan of managed desktops, but know a lot of companies that use that. If you do open having a good anti-virus/firewall is a must. BYOD is good for phones/tablets in that it saves you the cost, and people byod if you let them download mail, or slack or whatever on their I-Device or Droid. So would you rather the person see the email late at night on their phone or wait til tomorrow? I am not a fan of someone bringing their own laptop. If not whatever they are working on is on their own system when they exit the company. Finally multiple monitors for individuals. You will be surprised at how much more efficient you can be with two monitors, or even 4. Myself I telecommute and am up to 9 now so multiple monitors is the best.
DRM2020
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
The absolute best environment? Sitting on my couch, in my pyjamas, with easy access to my refrigerator and tunes.
However, if I catch one of your developers on my couch wearing my pyjamas and helping themselves to my 'fridge while listening to my tunes, there's going to be trouble.
Ultimately, as a developer my preference is to a) have the entire power of the system in my hands, b) not be tied down by local system restrictions, and c) not being tied to specific developer tools, especially an IDE.
Breaking those down:
TL;DR version: give me a lot of computing power I can carry around with me, don't tie me down to specific coding tools, and then get out of my way. And keep your developers off my couch, and out of my pyjamas and 'fridge.
Yaz
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.
Developers are not a bunch of identical robots.
I have a corporate Mac, which is enough for all the corporate security bits I need, plus a screen and a stand for my personal BYOD, which has all the stuff a developer needs, but only access to the office net with git, etc.
A good desk and chair. It's sorta too open still, but the rows aren't crowded close like the last place, so it's quiet.
And that's it for the corporate contribution (!)
On my machine I run a vm or a container with the exact configuration of our production machines, one of a number of copies so I can very quickly switch to another project, plus another container with the automated test suite. I have 32GB of socketed memory, so I can support even JVMs full of bloat, like my <I>former</I> production system. I tried running the old company's system on an 8GB Mac, with no results that can be discussed without long strings of curses (;-)) Few companies will believe what it takes to do back-end development, so while working as a consultand and for start-ups, I invested in the equivalent of a good box[1] of mechanic's tools.
--dave
[1 https://sarasota.craigslist.org/tls/6060935656.html, Snap On Tool Box With Tools - Fully Loaded - $5000]
davecb@spamcop.net
Posting as AC for obvious reasons.
My shop isn't quite as big as yours, but pretty big. We have hundreds of developers, not thousands. We do a lot of classified work and BYOD wouldn't fly. That said, in my experience, our policies are pretty good.
I have a high-end Dell laptop, more of a mobile workstation really. It has a quad core i7, SSD along with a spinning drive for data, and separate dedicated graphics card for CUDA work. It runs Windows. I have full admin rights, and run a few Linux VMs.
At my desk I have a Corsair mechanical keyboard (Cherry MX red, but I have my own office so the noise isn't a nuisance to others) and two large widescreen displays, along with a docking station. I also have a desktop machine in my office to use as I please, though I don't really use it much. Some of my coworkers have standing desk configurations, and our shop is happy to oblige that request.
I am free to download and install whatever software I want. I have a plethora of development environments and SCM tools as my work is diverse, ranging from QT Creator to Visual Studio. We use both Git and SVN and many web-based CI tools. I use the machine as if it was my own. I have installed Overwatch on it and several other games. This is great for travelling.
Hope this helps.
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.
MacBook Pro VmWare Fusion Cubicles Headphones The most important things are "give me the tools to do a good job" and "stay out of my way and let me work"
Virtualization is one of those things that sounds good in theory, but in practice it fails to completely abstract out the underlying system. In general you're better off using a script that developers can run to automatically set up the environment. This has several advantages: not only does it keep your project clean (clean enough to easily install), but it allows you to easily install the whole thing anywhere.
That way, you can run your script on a production server. Quickly set up a new instance and install it into your cluster. Ideally you'll have another script that tests to make sure the server is running correctly on that instance before it goes live.
The alternative of trying to set things correctly in a VM and sloshing that VM everywhere is just asking for things to become messy.
"First they came for the slanderers and i said nothing."
and keep it short. My company has daily stand-ups that don't help me. Sure they are short but they are in the middle in the morning right when I'm getting into the "zone". It takes might right out of the "zone" and, with all the other stupid office distractions it can take me another hour to get back into my work. If the dev team needs daily stand-ups to stay on track then you don't have the right crew.
Another thing is don't make developers multitask. That is don't assign them to more than one project. They aren't like sales people that can hop from customer to customer every half hour. Developers need to focus on one thing and carry it out to completion. Furthermore, if you assign them to more than one project, they'll have that many more meetings to go to and if you have more than two meetings in a day, your whole day can shot to hell.
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
2. Come up with a naming scheme that encodes OS, os vesrsion, processor name, memory, diskspace, acquisition year as an impossible to remember server names. Like CentITLinRH73_i7_256GB_4TB_2016_num[serialnum]. IT flunky knowing the machine config from name, bean counter checking inventory once year etc are very important for efficiency.
3. Change the server naming scheme every six months.
4. Insist on manager approval for every tiny IT ticket. Even if the person requesting has authority to approve identical requests from his/her reportees.
5 Configure VPN such that even people with FiOS and 75 mbps connections can not get more than 1 mbps.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
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.
A real desktop computer in a nice office.
A real laptop computer to share ideas on, walk around with.
A secure internal network to store work well away from the outside world.
A computer to search the web and use social media on that is not work connected, an entire different physical network.
If staff have to travel to other nations give them a brand new work phone and new laptop. Trendy looking but consumer grade.
The only contact is their boss and legal support. The computer device only has a few productivity apps for global meetings.
Do not allow any extra company data to move out of your nation with the worker.
Have staff meet their international contacts face to face in a secure setting, no smartphones, IoT around them. Use paper for vital information not a laptop file with all the brands secrets.
The worker does not return to your nation with any new data.
Be aware any nation can get access to that device globally so it could bring back issues that can a pass any reinstall. Dont trust any company device after it has been outside your own nation.
Make sure staff have all the documents for the language of systems they are using. If its close source, buy the full support.
If open source, download it all off site and keep an internal database updated for searches and issues.
That will stop interesting searches by staff on the web showing what your brand is working on.
Dont just give away your designs, new work everyday with complex search terms.
Expect your internet and other networks to be of interest to competitors, random people on the net, cults, faith groups, other private brands, governments and their security services, former mil/gov workers now in the private sector.
If its really vital, use secure paper files and a secure vault for meetings. No smart phones, smart devices, IoT allowed.
Read up on what the NSA, CIA, GCHQ can do to networks, to devices physically and on networks.
All the software and hardware issues gov/mil contractors can offer the private sector for the right price.
Be aware of buying new devices online and having them shipped in.
Alternation might be passible on the way. Crypto junk fresh out of the box as installed.
Educate staff on approaches by random strangers, new friends with interesting questions about work, who could have had contact with smartphones, laptops outside of work.
Make sure staff have full 24 hour legal and security support to report any efforts to ask about work, security at work.
Dont bring malware into work via random devices found. Dont allow "new friends" to just wonder around secure work areas to physically place malware or collect the results of past malware.
Do to allow any random sales reps to wonder around work. It could be an effort to map the building and place malware or collect data.
With your data more secure, a brand can then bring new products and services to the market without having their own gov, other governments, security services or competitors interfering with new products. Protect your brand, your staff, your ideas and bring new products to market.
Always hire staff on merit, do interviews and look at their entire background.
Look at their university life, are they smart or did they always need help from smart people around them?
Good workers can work, they don't need constant help or advice when given work. If staff have few skills find out why they slipped past the complex interviews? Inside help? If they have few real skills, what else is fake about them and why are they working for you?
Secure the interview system and do more background work on everyone why wants a job with your brand. Do not trust any of their paperwork or stories, look at every detail and see what is true.
Once only good workers are allowed in most of the issues are with expected brand products, marketplace not unskilled staff. Only hire on merit and make sure the skills listed are real.
Staff should be working for your band, your brand should not be working to help staff with their lack of skills.
Secure your ideas, only hire good workers, support your workers, don't hire workers that cant work.
Domestic spying is now "Benign Information Gathering"
1: with a door I can close
2: clear tasks
3: an office with a door I can close
4: reasonable deadlines
5: an office with a door I can close
6: time to finish the job without working 60+ hours a week
7: an office with a door I can close
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
Ive become convinced the best developer environment is 100% remote. Corporate IT is so out of touch with network/application development they can't possibly help or do anything but hinder...
The heat from below can burn your eyes out
Then let them quit. OP has over a thousand devels and giving everyone admin access and the ability to select their own tools will turn into a nightmare. There will be a thousand different environments. One person quits, gets sick or goes on vacation and his cow-orkers will have to reverse engineer all of his shit to keep production running. Nobody in a shop that size is that good.
If you want free reign to select your own tools, work for yourself in your basement.
or surreptitiously, as necessary.
You're fired.
Have gnu, will travel.
Dev'ing on a flat laptop keyboard approaches torture.
32 gigabytes bare minimum for you guys? I take it you're running Visual Studio or other Microsoft tools.
Vim, fully pimped out for dozens of languages, does fine with 32 MEGAbytes.
>> How much CPU performance do you lose running your beloved Linux in a VM
> I could test this right now using Virtual Box, and if I boot up a Windows 10 VM, then try to load Visual Studio 2015, Altium Designer, Excel and a few other apps.
Windows 10, Visual Studio, Excel, etc aren't actually Linux. You bring up a good point though - if you set the VM to have some small amount of memory, then load up a bunch of huge, memory hogging applications, can certainly cause trashing. If you're going to run a bunch of Microsoft applications simultaneously, you will indeed need plenty of RAM available to Windows - whether Windows is running in metal or in a hypervisor.
Linux needs a bit LESS RAM when run in a hypervisor, due to paravirtualized IO and certain other items. You do still need 1GB for a Linux host, though, so total RAM usage is a bit higher.
To actually answer the question, which was about CPU usage, about 10%-15%, assuming you've turned on virtualization support in the BIOS. So my 3.6 Ghz CPU which would be idle 90% of the time running on bare metal is only idle 88% of the time when Linux is virtualized.
Aside from setting the CPU or RAM for the virtual machine grossly suboptimal or forgetting to turn on virtualization support in BIOS, another thing that can make a big difference is using the paravirtualized storage and network drivers. Rather than emulating IDE or SCSI for each disk read, and emulating a R1000 network card, it's significantly faster to use paravirtualized devices. Basically, instead of an "IDE" disk or a "SCSI" disk, you use a "vmware" disk.
I use an ESXi server and several VMs hosted there for dev work, and a fairly basic workstation with a great keyboard and a couple large monitors to remote into the dev machines. I have a VPN set up so I can VPN into the ESXi based machines from virtually anywhere, but I get the most work done from the quiet of my home. My time in the office is mostly about meetings and interacting with coworkers, but I don't get most of my coding done there.
> which is supposedly the future of the desktops. It sounds interesting on paper but I remain skeptical.
Who supposed that? Employees of VMware? You will likely to consider other options for virtualization or containerization.
I agree with everything you said, I use VMs too. There's another benefit of using VMs: you have a frozen environment per version. I work on software that releases a couple of versions a year and every 2 years or so a big version jump. With these big version jumps we e.g. upgrade UI controls and introduce necessary breaking changes. When I start on these major version jump versions I move to another VM, cloned from the original. This leaves the previous version's VM in tact so I can fix bugs in that version's VM and alter whatever I need to (controls, libraries, IDE instances even) in the new VM for the new version. I don't have to worry I change something for the new version that breaks the older ones (e.g. uninstalling libraries no longer needed for the new one).
This alone is the key benefit for me for using VMs: no worries changes made to newer versions affect older versions. I can go back to an older version's VM and use the tools used for that, build using the build tools for that version and *know* everything needed for that version to build is there.
Never underestimate the relief of true separation of Religion and State.
You shouldn't depend on any local environment (standardised or not). Just implement one simple rule: to accept any code it has to build (and work) correctly on a standardised, external system. Your developers can use whatever tools they want, just provide them with an access to a developer instance of said standardised system (be it either dev server or a simple VM image).
Use english if you remember it...
I apologize for the lack of a signature.
Now the first piece of the puzzle is what kind of developer are you? Because requirements and needs will vary dramatically. More generally where will you code or content run?
- The browser?
- Mobile device as an app?
- Server side on a scaled web platform?
- Backoffice processing?
- Are you a Platform specialist as oppose to Software specialist? EG PaaS or SaaS.
Does your organisation need to mix and match these skills in order to deliver? These question are actually the requirements that drive setting up you development environment. I could give you what I think is the gold standard of environments. With out a doubt it would most likely not at all meet you needs. So what I'm going to do is lay out some of my requirements and some of the solutions I use. But I'm not going to actually reveal what it is that I develop.
1. My golden rule is never use the host OS on your machine for development. Development is basically an exercise of increasing disk clutter as you try new things work on this and that etc. It basically drags your host OS to a fast rebuild and lost downtime while you get the host backup to a working state for development. The host OS is generally reserved for the corp stuff. So all the apps they require etc. Generally developers hate those restricted environments of the corp OS anyway.
I have a laptop I still use everyday for tasks that has never been rebuilt. It's now 5 years old. It runs windows 7 as the host OS. I do almost everything in VM's on this box.
2. Generally I use virtualbox but vmware is good as well. Now I tend to establish a VM build that gets me up and running with my core tools via some flavor of automation. Vagrant has been king here for ages. Now when I mean I use these environments I mean I run my IDE and build pipelines in them. I never produce code on my host OS.
3. Each branch of code is a new VM set of hosts. I never re-use vm hosts. The hosts must come up to a spec that is useful quickly. All artefacts I need must come out of repo's as required. So if a branch closes I nuke the vm's associated with it.
4. VM generally are two disk volumes. The first volume is always the OS build. The second volume is used for all artefacts and development. 3rdparty tools are aimed at the first volume. In house tools come from the second volume. This allows me to have nice small and tight vm's on the limited laptop but actually mount the disk sucking volumes over the network. Where speed is required I set the OS to do a lot of caching of the remote volume. This spreads the network hit out over time and doesn't hurt me.
5. I stick to the rule that all software installs come from OS specific packages. NO BROWN BAG / TAR / ZIP transfer BS. Every piece of code must go through to a package in order to be installed for even the most basic testing. No shortcuts. Always iterate the whole pipeline.
6. Optional, I run a private network with in my host for the VM's. That I either have bridged or nat'd to the corp network. My gateway host runs bind, a firewall, and any other service I require. This way I do not violate the corp policies for unsanctioned hosts on the network.
So in general I only use Linux as my development host OS. But this may not work for everyone. Certain app builder environments just don't work in Linux, for example.
Note it is very easy to do this on a middle spec'd machine. The VM's are small. Very small actually the disk foot print is generally about 4Gig up to 10Gig per OS volume. I can run most of the VM's headless thus next to nothing in graphics resources. The RAM footprint is usually the big ones hit about 2Gig. But more often than not they are sitting around 750Meg. So I can run a lot of VM's comfortably on an 8Gig laptop. The big disk storage comes from NAS type devices on the corp network so I can operate OK on as little as 128Gig of disk. But I tend to want 512GB or 1TB locally.
One of the really nice things about using VM environments is when you are
So we transitioned in the last year from an old school 9-5, cubical farm shop to a completely work from home team. I am the manager, CIO was responsible for deciding whether to continue the work. We are software engineering team the rights customization's for a large research medical center for the EMR (electronic medical record system) as well as doing general business automation. The team has a daily 20 minute huddle meeting via skype and a weekly team lunch/staff meeting for in town team members that is typically 2 hours (food plus deep discussions that have been saved during the week). For geographically remote members we will bring them in via speaker phone if they request it. Team size is 8 software engineers.
So results:
- defect rate (incident tickets) decreased 23%
- work order completion rate increased 19%
Biggest complaint was from non-technology adopters that like being able to drop by people's cubes for discussions instead of using skype, phone, email, etc. These were also the folks identified by our teams as our largest interrupters of productivity.
I had 1 person that decided to resume coming in the office because he liked the social interaction. He's also my least productive employee (though still acceptable).
Our setup is 1 laptop and 1 desktop used for desktop virtualization (mostly vmplayer but 2 guys prefer kvm on Ubuntu, tried hyper-V but it's basically to fragile to be useful in our opinion). Each team member has full control of both machines including OS. They are responsible for always being able to communicate (no "I'm rebuilding my box" excuses, use your smartphone or have some other plan B). The desktop is plugged into a hardwired connection at the office and laptops are at home. Access is via VPN using remote desktop or spice viewer (for KVM).
Hopefully this is enough detail, but it's been a huge win for us. It took almost 5 years of fighting with old school management to get them the ability to leave the office.
I've seen a number of companies try to go down the virtualization route. Not only does it never work, it's one of the first signs the company is on the decline. You'll spend two years implementing some Citrix environment that everyone hates and which never perform correctly or have the software that you need to get your job done. Then the company will have a round of layoffs and quietly sweep the whole Virtual Environment thing under the carpet. They won't get rid of it, because that would involve admitting the CTO was horribly wrong, but no one will ever actually use it for anything.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
yep, if you have not tried VMware VDI you are just missing out. It is great and VERY fast, very close to bare metal. With NVME SSD's on your servers and the highest clock rate Xeon CPU's with DDR4 RAM you cannot find a faster desktop and with Nvidia Grid GPU's you have a great experience. You also need to have a very fast thin client(Linux or MacOS) that does not twiddle with the network stack for viruses.
Microsoft and Citrix VDI are a joke.
Is VMware VDI cheaper? nope but it is faster and more flexible. One way is the virus scanning is done at the hypervisor bare metal so the Guest OSes do not have to do AV scanning. There is NO other desktop that can do that. 40 Gig ethernet to the desktop or disk subsystem, nope not gonna happen but in the data center we have that and 100gig networking too. This is the land of big boy toys not these crappy little desktop PC's with a single disk in them.
Maybe your problem is your enterprise guys are stuffed in a little cheap box... They too have to think outside the box!
“Here’s a nickel, kid. Get yourself a better computer”
Your Average Joe
My understanding is that developers at Google have root on their development machines. (Googlers please feel free to confirm or deny). If Google can make that work, with their bazillions of developers, I would think that others could do as well.
I've managed to get that done at my shop (finally) -- prior to that I ran VM's just so I could have root.
This has been answered many times over the years. Joel Spolsky did a good job in his book Joel on Software , which I highly recommend you read if you're asking these kind of questions. His blog is good too.
You have over a thousand developers. They won't be working on the same types of projects. They will have different needs. You need to break it down by departments or project types and find out what those developers need. It sounds very ignorant to ask what the "best" of anything is when dealing with over a thousand people that do different things. I have worked for two different small-to-medium sized companies, developing in-house software that is only used by other employees and systems. My needs at each company were completely different. The only things that are really the same is that I still sit at a chair in front of a desktop with at least two monitors.
A word from an infrastructure manager, who happens to be the technical architect for his firm. I spend a significant amount of time rolling back (declining to deploy) submitted code and database changes. Our developers (mostly young) are not supervised closely enough in their design phase, which leads to lots of "It's the only way I can get it to work" defenses. Forcing people to use shared databases without table creation privileges, for example, means that there won't be the type of architectural divergence that results eventually in piles of manure that are impossible to perform impact analyses on. While I have seen some wonderful velocity with a Scrum approach, I have recently seen some laissez-faire management that produces code that lacks quality simply to meet dates. Senior developers have the smarts to understand the importance of adhering to architectural guidelines (and how careful one must be about exceptions); younger cats need to be herded. With this in mind, I will not give full autonomy to the development staff; their problem-solving is too short-sighted.
SO MANY problems I have seen when devs have admin rights on their boxes! If you want more reliable software, I think the first step is to make the devs run under the same OS permissions as the users. As far as selecting your own tools, I can't comment on that. Maybe the company is multi-platform. Myself, there are my preferred editors and such that I want, but that's no big deal.
When you sympathize with stupidity, you start thinking like an idiot.
Get yourself a good pair of noise cancelling headphones.
We have an open office with several large bench-type setups with people facing each other and a low, 18 inch wall down the middle. Constant chatter from the QA and Project teams. Whenever I need to focus I just put on my headphones; they block out everything and I can focus like I'm alone.
You are spending like $150K/year minimum on each developer by the time benefits/real estate costs/etc are factored in. Don't you want every last bit of their productivity? Let them order whatever system they want from Best Buy and structure your security policies so that they don't get in the way of what they need to be done. Drive encryption/strong passwords/2FA/remote admin access would be reasonable, locked down list of allowed apps is not.
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.)
Can you get them a VM on this laptop? Even if it is only allowed to connect to the parent OS, it can give them conisderable flexibility. Both Windows and Linux have native virtualization capabilities these days.
VDI.... performance issues
You have a bottleneck. Maybe more than one.
Your SMEs or your virtualization vendor should be able to identify the issue and suggest a remedy. Some fixes are cheap, and some aren't---but you need to know what to fix first.
presentation of VMWare on desktop and application virtualization (Workstation & Horizon), which is supposedly the future of the desktops
VDI can work (even for teleworkers), but it takes a lot of work.
App virtualization will probably never be good for developers (too limited). You could install the View client on their laptops or issue them zero clients for home/travel so they can access VDI desktops anywhere.
You could set up separate pools to provide access to dev tools and source, build tools, test servers/clients, and regular web/email/intranet access. Balance out security, performance, and usability as you see fit.
The primary advantage of VDI is its flexibility, but if you have performance issues then you either have (a) inadequate monitoring/alerting, (b) inadequate in-house expertise, or (c) inadequate infrastructure. Vendor support can compensate somewhat for (b), and they should be able to offer guidnace if the underlying issue is (a) or (c).
---
According to the latest ruleset, this post should be modded as Vorpal Flamebait +5.
Captain Obvious strikes again.
The best dev environment for me is the one I have under my control.
Pluspoints if I can instance live on my local without a hitch due to neat scripts, vagrant or whatnot.
You're welcome.
We suffer more in our imagination than in reality. - Seneca
> but that's no big deal
Actually, that very much _is_ a big deal. Using the tools you are familiar with and make you work the fastest is a huge performance enhancer.
For example: My coworkers use the Eclipse IDE. I use IntelliJ IDEA because I'm way more accustomed to it and it's faster for me. It interoperates completely with Eclipse (formats the code the same way, etc), so it's totally invisible to them that I'm using it.
Why, no, I haven't meta-moderated lately. Thanks for asking!
> SO MANY problems I have seen when devs have admin rights on their boxes! If you want more reliable software, I think the first step is to make the devs run under the same OS permissions as the users.
Wrong. As long as we have the ability to test in the same environment, that is what's important. Your own machine makes a really poor test environment.
If you want more reliable software, improve your developers' skills, add QA resources, write more unit tests, do test-driven development. Don't make things more difficult for your developers.
Why, no, I haven't meta-moderated lately. Thanks for asking!
Then let them quit. OP has over a thousand devels and giving everyone admin access and the ability to select their own tools will turn into a nightmare. There will be a thousand different environments. One person quits, gets sick or goes on vacation and his cow-orkers will have to reverse engineer all of his shit to keep production running. Nobody in a shop that size is that good.
If you want free reign to select your own tools, work for yourself in your basement.
That whole statement is just silly. If you have to rely on a particular developer's "environment" to be correct, you're setting yourself up for failure. The scenario you're describing sounds like amateur hour.
In a well-run development shop, anyone should be able to check out the code from version control and be up and running relatively quickly, because everything is in version control and is well-documented.
Why, no, I haven't meta-moderated lately. Thanks for asking!
If you have to rely on a particular developer's "environment" to be correct, you're setting yourself up for failure. The scenario you're describing sounds like amateur hour.
Google around for some of the pissing matches about tabs vs spaces. Ideally, I'd like to let the devs make their own choices. Use vi or emacs, I don't care. But if my company is going to degenerate into this sort of in-fighting then I'm going to put my foot down and make a choice. And if you don't like the tab stops I chose, there's the door.
Have gnu, will travel.
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.).
What's the Best Working Environment For a Developer? Clearly not where you're working now.
... is the one I work in. Because all software developers are identical, and therefore my preferences are everyone's preferences.
Software developers aren't a fungible resource? With thinking like that, you'll never be CEO of a major corporation.
I have spotted one site where you can watch free films released by talented producers https://www.clickforfestivals..... If you have any more links please submit in comment below
I once started at a company which was in the middle of a tabs-vs-spaces pissing match. Their staff turn-over was huge - they had the entrenched long-termers (who got involved in things like pissing matches over white-space) who hung around, and it was a revolving door for everyone else: nobody wanted to hang around that environment. I lasted eight months, and should have left much sooner - lesson learned. I promised myself that if I ever walk into a company which is genuinely having these sorts of in-fights again, I'll turn around and leave on the spot. There are too many good opportunities to stay at companies that hire middle-aged teenagers.
The flip-side is that I've been doing team-lead roles for quite a while now, so I guess it's my job to fix that kind of thing. We're not being paid to have fights over rubbish like that - we're being paid to develop high-quality, well-tested, maintainable software. Anyone who wants to waste time and harm morale in drawn-out fights over white-space can get out.
Tabs vs spaces is a code style issue, and code style issues ought to be agreed upon, at least on a per-project basis if not company wide. I was thinking more along the lines of "I want to use Eclipse, you want to use NetBeans, and this other guy wants to use IntelliJ" - as long as people can conform to company standards, the choice of tools used is a personal one.
Why, no, I haven't meta-moderated lately. Thanks for asking!