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.
Ah, the ol' South Park gay orgy pile.
https://www.gnu.org/software/emacs/
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.
Get VMWare or an equivalent. Get volume licenses on OS's and any software that people can share. Configure images if different OS's with different versions and combinations of software that everybody/anybody needs. Put it on the network so anybody can share it.
While developing, keep 'snapshots' of stable images you are using. When you run into a bug, grab the last snapshot, reproduce the bug, file a bug report, grab the last snapshot, find a workaround and put it into the bug report. Continue developing.
It's the only way to go!
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.
I've been a part of several groups that conducted this exact type of exercise. Hopefully you get all the answered you need.
Good developers will obtain the tools they need. Either by request or surreptitiously, as necessary. Or they will quit.
to a previous article.
https://developers.slashdot.or...
evidently not the Gorean enviroment.
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.
1) Let your developers use the kind of input devices (trackpad, etc.) that they want, to avoid repetitive strain injuries.
2) To minimize noise, give your developers offices with doors, or have a rule of minimal talking in the hallway about non-work matters.
3) Do what you can to help your workers with business-related problems. In my last company, we had problems with HR regarding pay and healthcare. The problems were distracting, and fixing the problems took up some of our time.
I've been using VMware Workstation for this for years ... mostly good, as they're flexible and great for test environments, depending on the application. My VMs can't see GPU (directly) and aren't good with realtime apps like Hangout/Skype. For realtime apps, fine to drop down to the host OS. Also, more memory is best ... I have 16GB split between 2-3 VMs. I also have quad core hyperthreaded. My other machine is the same, except it has 32GB RAM. Good news about VMs: easy to back up, and very portable when hardware dies.
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.
No girl would agree to that. Instead normal devs ever get to talk to a girl. That is normal.
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.
This. Women hate thinking people.
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.
If developers are complaining about performance "at certain times of day", then you have 1000 developers not being productive at certain times of day. I'd guess you'd be losing 3-4 hours a day from everyone, and probably slicing a fat % of throughput the rest of the day as well. Those test builds or test runs being slow costs everyone waiting on them as well.
FYI. VMWare won't fix that unless it's local to the developer machines.
Big local developer machines, with lots of disk and ram, other posts covered the 'why' there. At least that way you don't have a chokepoint which kills productivity.
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"
A titty bar with free lap-dances and 2-for-1 happy-hour shots ALL DAY; 50Gb WIFI; a Lego room and free Virtual Reality porn.
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
Or strip clubs. Strip clubs are better. There are tits there.
... and several lines of coke. (According to Balmer)
Ready, and, set, and:
Developers, Developers, Developers!
Developers, Developers, Developers!
All the developers at my company are happy with their setup. Everyone has an MSI GS63VR 7th gen i7 laptop (a powerful gaming laptop that weights almost nothing) along with a pair of 27in monitors. Everyone is running a flavor of linux (I run Mint 18.1 but others use Ubuntu) and all of us have a license for VMware workstation Pro 12.5 where we have an additional 2 or 3 VM's running at any given time for a variety of different things (typical VM doesn't need more then 4gb ram and these have 32gb though rarely do we actually go over 16 to 20gb).
Then you make paper footballs and airplanes and throw them around the office when you hit a stopping point. The thing that *kills* productivity more then anything is frustration (usually coupled with the burnout factor). Everything I mentioned above is pretty irrelevant to everything about a good productive work environment except that it pretty much eliminates everyones frustrations around anything the company is able to do and even with the random distractions with things like airplanes and stuff, productivity has been consistently high and hours in the office have been reduced as a result.
The type of development determines what is the best solution.
The type of person determines what is the best solution.
The type of environment determines what is the best solution.
I've worked in a private office, a shared office, cube-farms and those shitty "open plan" setups that project managers like.
If you want a productive developer do this:
* single person to an office.
* the office must have a door.
* There should be published core hours - I don't care what they are, but everyone must be in the office during those times. Perhaps 2 hrs a day - late morning or early afternoon a few days a week.
* Weekly group meetings should be limited to 20 minutes. Prefer other communications tools. Meetings should only happen when input is desired BEFORE a decision has been made, not after.
* hold developers accountable for schedules, but only if they made the schedule. Devs need to have ownership of their work and their due dates. Help them become better at estimating timelines, so they don't end up with 120hrs a week of work the last month.
* Don't let developers develop on their own workstations.
* If the servers run remote, then the dev servers should be remote too. The test servers should be as close to production as possible - locked down the same way and developers shouldn't have direct access. They need to learn to use logging, since clients won't allow access to their prod server either. Get used to it.
* Everything should be built on remote servers. These are controlled by IT. Configured by IT. Managed by IT. That means setting up a new dev environment for the entire team can be (should be) standardized.
* I don't really care what tools my devs use. They get $2K/yr each to blow on training, books, conferences, software. Most use it for training at conferences.
* Do not allow external use of "cloudy" things unless your corporate policy allows it. Let them setup their own internal cloud services, if they like. Self-hosting these things internally is really easy. Only allow access through a VPN. No need to let the world crack away at your internal project servers and data.
* I'm a huge fan of TDD, continuous integration, and private clouds. Not so much for public clouds, unless the production purpose is hosting cat photos/videos.
* Good chairs - not great chairs. I've had both and actually prefer the $300 chairs over the $1200 ones.
* The actual desk never mattered much to me. I've had the pretty desks, ergonomic desks and surplus military desks. Never mattered.
* 2 huge, high-res monitors are required. The keyboard the developer likes and a mouse she likes is absolutely mandatory. Coding on a single monitor is counter productive.
* Oh and all compile servers need SSD storage in a RAID0 config. Compile times are a waste of developer time. Run the numbers and you'll see this is true.
I use a 2lb chromebook with 11 hrs of battery running Linux for my development. All the powerful systems are in a private cloud, so the cheap chromebook is really just a remote display device. It is find for any sort of development I've done in the last 17 yrs, since I stopped doing Windows development. I never did Java - no system less than a current Core i7 with 32G of RAM us sufficient for java development. Java sucks RAM, disk, souls.
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.
I get everything you list plus unlimited Hot Pockets. And all I have to do to stop the shouting from those upstairs is to take the garbage out.
My company gives us $4000 every two years to refresh our gear. In avoid a week I'll be getting a surface book with Max ram and half a t of space. As I own my stuff the only requirement is around security. My first notebook was so good I'm still using it and I got a surface pro and gave it to my daughter. How cool is that.
but this feels like a lead in for linux. networked colaboration can solve many device storage issues weather local network or accessible more remotely even if its your own servers.
>> 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.
If everyone is not working on the same project then the answer to the question is the same as answer to the question: what medical treatment is best for patients.
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.
BYOD (bring your own disaster as we call it) has no place in an environment in which even a modicum of security is required.
There is no "best" environment. "Make sure there are no shitty bosses" is the only "must follow" rule.
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.
No office and BYO. Done.
Startup gave me a choice of OS and I installed it first thing when I started. Probably because it's a startup IT is managed by me and 2 office mates overall, but devs choose their whole OS platform. I was handed one of the new Intel NUCs, 24" screen, keyboard and mouse.
Probably the best combo I've had so far. I could've chosen to install Ubuntu, CentOS, Windows, Gentoo or anything else, the only constraint being "don't do stupid stuff". It works.
We're hooked up through a network switch where most of the big amount of work happens to keep viruses & stuff out, and the devs have a free hand on their machines. Only the common services use a forced LDAP login (email, Jenkins, Sonar, etc).
I had a similar experience working in an academic environment, it was pretty nice being able to pick my tools as I saw fit to get the job done.
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
Private quiet offices (for when you actually need to concentrate and work) and VMware remote desktops
That way, you can piss off to the games/coffee room whilst "busy compiling on shit slow VM system" is happening, and also get some peace and non-interrupted work done when you need to.
We know how well that worked out for the dot-com bubble. :-p
Do you happen to have Cyril, Lana, Cheryl/Carol, Pam, Ray and Krieger as your co-workers?
Do you want ants? Because this is how you get ants!
As you can see - Slashdot is not the place for you to do real market research.
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.
Two to three display screens. And an office of my own with a door and a no disturb sign.
He didn't say there were females there.
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?
Thus spake the Master Programmer:
"Let the programmers be many and the managers few -- then all will be productive."
A manager went to his programmers and told them: "As regards to your work hours: you are going to have to come in at nine in the morning and leave at five in the afternoon." At this, all of them became angry and several resigned on the spot.
So the manager said: "All right, in that case you may set your own working hours, as long as you finish your projects on schedule." The programmers, now satisfied, began to come in at noon and work to the wee hours of the morning.
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.
1. Walk in the place with a machine with admin rights
a. I don't care if it's a virtual machine on a high end server, or my own physical box, it has to have some horse power (or dedicated power in case of a server) to do builds and heavy lifting
b. Personally I prefer physical box... I can shutdown without issue, and there a LOT less lag then a virtual machine with thin client.
2. I'm a single monitor type user, others prefer multiple, give options, but bigger is better.
3. Everyone on the floor for the most part is running the same thing when it comes to OS, IDE and check-in manager (If you are an MS shop Own it! Unix, same)
a. Introduces consistency, ease of maintainability, and unified location for all code
4. Have option to give users flexibility to run secondary software that can help them with there day to day tasks
5. Privacy in most cases. I love my current high wall setup... I don't want to be pestered by management... and headphones, an absolute must
6. To counter my line 5... Walking to someones cube, sending an email, or IM'ing someone are all great tools to use
7. Ability to work from home. This industry is one of the few that we can be as or even more productive remotely then in office.
a. Many of us would benefit from this, but others might find this too distracting. Just having the option / ability is key
8. A unified solution setup. When I was first hired at my current location you had just the project files, and a few "old timers" with there own variant solution. Have one solution for all. Now, the setup time takes a few hours to get everything up and running.
9. Flexibility on some hardware. My keyboard and mouse are my own... I love wireless mice and mechanical keyboards.
10. Keep the machines up to date!
11. Connected offices. If that means projectors with PC's hooked up or smart displays, just have an office with a PC for code reviews or brainstorming.
a. On the same note, I don't want to have to repeat my work, so VPN access in network without major hurtles
12. Have a "testing lab", "sandbox" and "development enviroment"
a. Give developers the option to play in other environments, "break things" and test there changes without worry of breaking production.
b. When bugs come in for other OS's or environments, the testing lab gives the developer machines to test.
14 (because we always skip 13) Creature comforts. A place to take breaks, a lunch room, comfortable furniture, a clean enviroment a whiteboard of some kind for brainstorming, a bit of storage space. Flextime since some developers work better at different times then others.
This is all coming from a developer who has 10+ years experience in the field.
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.
A beach, 2 bitch3s and something to drink.
Docker (and similar platforms) is creating a "light" virtual environment that depends on the underlying OS. Developed by programmers that wanted to aviod all the issues with creating a full virtual machine environment.
Full Virtual Machines mean that a programmer needs to worry about a second OS beyond their primary OS.
But there are lots of cases where Docker is insufficient. Let your needs dictate your tools.
Quiet offices with as few meetings as possible and kick ass hardware. I don't know of anyplace where developers have better hardware at work than they do at home. Everyone always has a better setup at home.
These are some of my observations from talking with developers at other companies,
interviewing candidates, and discussing these openings with staff at other companies
largely in the area.
1. Location -- nexus seems to be Chantilly and surrounding areas now. Best and brightest
are working up there or from home, not here. If you are outside that nexus, good luck.
2. Big company -- developers want small companies. They expect visibility, flexibility, and
great benefits, including bonuses, stock options, laptop allowance, phone allowance, etc.
3. Inability to support 1099. Many older developers want this flexibility. We lost several
potential candidates because of this.
4. Gvt site -- many want/expect to work from home several days a week.
5. Closed work -- many want to publish more of their work as open source. Increasingly,
your presence on Github is used in hiring decisions by major players like Google and
Red Hat. "Code is the next resume." - Jim Zemlin, executive director at The Linux Foundation
https://opensource.com/business/14/8/open-source-your-resume
6. Hours -- many want to work off-hours, and often long days. Many want flexible work
schedules.
At least give developers their own private walled in area as a group. Most will be on the same page in terms of noise, distractions, etc. (though not always, like mechanical keyboard pounding douchebags). It's the loud office top 40 pop music and people in positions where they have 2-3 hours worth of work to do and spend the rest of the time wandering around and socializing that are a consistent problem. Or just constant foot traffic and chatter in general from the numerous other employees working or having meetings in the same area. Some music may be all right if it's kept low enough and isn't obnoxious and distracting.
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.
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.
Different people work best in different environments. Some people excel in those news room desk to desk open office type environments. I can't stand them myself, there is too much distraction and headphones (yet another distraction) have a limited effect. Blocking one set of distractions with some other type of distraction is not what I consider a solution to that problem. This does not seem to be the question you are asking which others are providing answers.
Why you are polling slashdot instead of polling those thousand internal developers and their managers for their feedback and opinion? Seems like a huge oversight to me for a simple email and a week or two of nag and wait for responses.
We don't know your environment or its development processes beyond what you described. That impacts answers drastically. Do you have SOX requirements, ITIL requirements, CMM requirements, HIPPA requirements, government regulations to adhere too, or other considerations such as a global workforce and import/export (yes these apply to technology, especially with respect to encryption levels) regulations to follow.
If you are having performance issues during certain hours of the day, perhaps those managers should grow that environment or look into their resource scheduling process or the dc server cpu/mem/storage/network loads during those peak hours to see where the bottlenecks are coming from and invest there. Or perhaps it time to make some larger changes that scale better than your existing VDI environment. Operational data will tell you that, if you know what data to look at.
VMware coined the term VDI, by the way. It sounds like you don't understand your own infrastructure very well. Its not a whole lot different than a proper VM, other than very little computing is done on the endpoint (client) and its easier to secure and track what people do than in a more proper VM environment. If someone steals the developer's laptop, they can't take VDI data off the machine, it does not exist there locally. A VM running locally on that stolen machine can be cracked open with relative ease.
There is also the network latency aspect of a VDI's perceived performance. Graphics intensive work and other cpu intensive activities in VDI environments do not mix and creates developer frustration. This choice VDI vs VM was likely driven by security and accounting requirements at your organization. You will need to loop them into the conversation to make sure you find the right solution for your org, or to change the rules to make things more open and free for your developers with losing the accountability.
Most of us older guys learned to develop on dumb terminals and via a terminal, x, or some form of remote session. Even today its all I really use, aside from version control, to work effectively and get the job done.
What's right for one organization and another organization are nearly always different. Poll them, catalog and rank their pain points. You will then have a nice set of items that you can create a road map from, address by priority, and focus on individually.
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
You're not describing a professional dev workplace. Or an average one. You're describing one that is actively hostile to both developers and to getting work done.
You can't fix this with bullet-point items. It's a cultural issue that is created by management, both middle and executive.
How do you fix this? Nuke it from orbit. It's the only way to be sure.
You're not going to be able to accomplish anything with regards to improving the developer experience (or productivity), but in this kind of workplace nobody (including some of the "dev"s) will be able to tell the difference, at least in the short-term. Long-term it won't matter. You're in a temporary political position, and that's what you should set your strategy around.
If you are competent and would actually like to work for a successful company, you should get out as fast as possible. Most companies--even the moderately bad ones--are much better than this.
I'd bet that you work for ADP or CDK. It doesn't really matter, but AFAIK there's not many companies that are as horrible and clueless as you've just described.
Mechanical keyboards are loud as hell and add to the cacophony of the work place that is hard to stay focused in. I've found the ones who love them the most also seem to enjoy aggressively typing on top of that, so they make even more noise. They honestly are not going to boost developer productivity, reducing noise and distractions will do far more to accomplish that.
Best working position is nipple deep in cash, lots of it.
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