This is a very subjective list of what I consider to be must-have tools for software developers. If you want me to work at your company, you’d better provide me with the following.
While software developers do most of our work in our brains, we have to use quite a few body parts to interface with the computer. Our primary I/O devices are called “eyes” and “hands”, and we should treat them as well as possible:
- Two good displays. A resolution of 1920×1080 should be considered a bare minimum nowadays. Don’t insult my eyes with some cheap thing that loses contrast once you look at it from a ten degree angle.
- A good keyboard. “Das Keyboard” is a nice one. Give me Cherry Blue.
- A good chair. Come on, you want me to sit down for hours every day, so give me something comfortable, okay?
- Bonus points: Encourage everyone to exercise at work. Not in a “getting sweaty” way, just to move your body and use a few of those neglected muscles from time to time. Put up a pullup bar next to the coffee machine. Encourage people to do a single pullup every time they walk by. Pushup handles are nice, too.
Give me a halfway decent PC. Don’t bother with 3D acceleration unless you want me to do GPU programming. I don’t need surround sound. What I *do* need is this:
- Two HDMI outputs for the displays. No, analog doesn’t cut it.
- Storage. While most Linux distros are fine with using an old school hard drive, Windows 7 or above just doesn’t run smoothly without an SSD. You may throw in a big hard drive to store projects on, but the OS and all software should reside on an SSD.
- Memory. While Linux development can be done comfortably with very little RAM, running Windows or Linux plus Eclipse or Visual Studio plus plugins plus an Android emulator (gah!) all but requires *at least* 8 GB.
- Eight CPU cores. No matter if I’m working on a Linux or Windows box, there is usually at least one VM running, plus an emulator, the IDE, the OS itself, and whatever else is needed for the task at hand.
- Give me local admin rights. Or better yet, let me setup my own system.
- Make it a silent PC. Developers don’t need a jet taking off next to them all the time.
- Bonus points: Don’t put a proxy between me and the internet. I’m not going to surf all the time, it’s just that I don’t want to have to configure apt, the browser, ssh, eclipse and so on every single time my password changes. Or curse the tools that don’t work with a proxy at all.
As said above, if you want to make me happy, allow me to set up my box myself. Best case is using Linux as a host, and a VM for Windows software. If you’re a MS only shop, I’ll use a Windows host with Linux running inside a VM. Using Linux on the side makes me more productive even if I’m developing for Windows only, so allow me to use it.
Depending on what you want me to develop, I’ll need the following stuff:
- Target == Windows: Visual Studio and ReSharper. Don’t be cheap here.
- Target == Linux: Just let me install my own stuff, the best dev tools are free anyway.
- Target == Android: Like Linux, but with a waaaaaay larger PC. And give me a few smart phones, not a single one, to play with. At least a really expensive one, a really cheap one, and whatever Nexus version is current. And at least one tab. Android 4.0 minimum each. Want me to support an API level < 14? No way.
- Target == OS X, iOS, Windows Phone: Ask your best developer about her suggestions, then put every single one of them into reality. I don’t have experience with these platforms yet, but I’ll be happy to learn as long as it’s not a total drudgery due to bad tools.
- Bonus points: Give me a budget for buying new books and trying out new stuff without having to ask for permission every time.
Project management software
- A source code control system: Git or Mercurial == happy, Subversion == less happy, TFS or SourceSafe == run away, everything else == meh.
- A bug tracker. Bugzilla is a bare minimum, but GitLab, Redmine or even the venerable Trac do a lot more. If you don’t have a bug tracker yet, don’t be surprised if I set up one myself.
- A project wiki. Redmine and Trac come with a wiki included, or we can use one of the other free wiki engines around. Don’t have none.
- A Continuous Integration system. Don’t have one yet? Shame on you, I’ll set you up with Jenkins. A “Joe broke the test suite!” mail to the whole dev team is better than an angry customer.
- Bonus points: If company policy allows it, put all your projects into private repos on a GitHub account. Instant everything on this list, except for the CI system — just use Jenkins. And let the team use Trello for agile development.
Let’s talk about money
So these are my requirements for a decent developer setup. What costs are we looking at, apart from a cheap desk, phone and so on?
- Chair: Very good ones are available for 150 Euros.
- Displays: 200 Euros each, tops.
- Keyboard: No more than 150 Euros.
- PC: 1500 Euros should get you a REALLY good machine.
So far, that’s 2200 Euros one time cost per developer. For Windows development, add a little over 1000 Euros for Visual Studio and ReSharper. For Android development add at least three smart phones and a tablet, say 1500 Euros together. If you want, add a GitHub account starting at 25 US$ a month, or set up a development server with all the other goodies. Everything else is free.
Now tell me again why you can’t afford good tools for your devs.