This morning, I arrived at work, booted my machine and launched the core applications I need before even thinking of starting to work: Outlook, so that I can read the e-mail I might have received, Chrome, to see what is new in JIRA, and of course Eclipse which will be used for all development.
Can you guess how long it took to boot and launch only those three? 10 or 15 minutes. Not so much. Just a quarter of an hour lost before even beginning working.
And even once all this was finally up (Eclipse easily took three full minutes), just reading and answering e-mail was a pain. Opening a new tab in Chrome made me wait twenty seconds before I could begin typing in the omnibar, my input for a new message in Outlook had a delay of several seconds, …
It is my (maybe not-so-humble, sorry) opinion that when a developer is faster than his/her machine, there is a problem.
At home, booting1 takes two minutes (half of it being after Windows started). That is already undoubtedly faster than what I have at work, but applications launch in a few seconds too, and they never lag once they are up. Admittedly, I have a killer machine (there was a reason for buying it, even if it is gone now).
But that gives some thinking: lost time is lost money for a company. Which is the most advantageous between losing developer time or buying a efficient machine?
Cost of the developer
I work in Luxembourg, so I will use what I know as the context. A developer working as a service provider costs approximately €500 a day, A working day is 8 hours, so a developer costs about €62.5 per hour.
Time lost each day
Either you are a disciplined developer and comply with the directive to shut your computer down each night or you are tired with the lagging and keep four Eclipse IDEs open day and night to save the booting time and transfer it to lagging time.
Let us say the developer is disciplined. Booting Windows is not the worst part and getting to the logon screen is 45 seconds or so. Once the credentials are validated, the session starts and background processes (among which application of the company policy) make it slow.
Still, to save some time, (s)he3 launches the minimal environment (s)he will need: mail client (Outlook), web browser (official browsers are IE and Firefox (why is Chrome banished in societies?), so go for Firefox, customized with a launch script and desperately slow to launch) and IDE (Eclipse).
Let us take an optimistic view and say that booting takes 10 minutes. Not much, right. But you just paid a little more than €10 just to have him/her waiting.
Opening a new explorer window to find a specific file, a new browser tab to check something on Google or StackOverflow, a file which needs editing in the IDE, or even simpler actions, like switching tab, saving, … All these imply a lag. From two to fifteen seconds. Even more at the beginning of the day.
Yet, those are actions a developer will perform several time an hour. That also induces another lag, in the human this time. When everything goes smoothly, you do not even think to check that your file was saved, you start typing your address or search immediately after having it
Ctrl + T. But when you have to wait after every keystroke, you do wait until you see on your screen that you can continue typing.
And those lags do not include the launching of a special program (GIMP because some graphics need to be adapted, or SQL Developer to test a query), which can take up to several minutes.
There are also freezes: when you do not know what you could possibly have done but Eclipse suddenly displays (Not responding) at the end of the title bar, so you try to switch to another window in the meanwhile, but your entire computer is frozen. The last occurrence I encountered was thirty-second long.
Here again, I do not think that counting 5 minutes an hour would be an exaggeration. Since we already lost 10 minutes booting, we still have 7 hours and 50 minutes, so we lose an extra 39 minutes and 10 seconds a day.
Every developer having to compile large projects knows it: it takes time. A lot of time.
I know of a project at my company when compilation on standard machines took 4 minutes (when the project was young). They could impose a new standard for the machines they use on this project: i7 cores, 16 Gio RAM and SSDs. The compilation time was cut back to 20 seconds.
So, based on this example, let us say our developers loses 3 minutes and 40 seconds per compilation. Since (s)he is savvy, (s)he compiles only once an hour. That is 28 minutes and 43 seconds a day.
Summing all this, we get a total loss of 1 hour 17 minutes and 53 seconds a day. This means 16,23 % of what the client pays a developer each day (in euros: €81,13) is only for waiting.
Cost of a machine VS cost of loss
Maybe you estimate I have been a bit pessimistic on the loss, so I will compensate by being pessimistic on the cost of a machine too.
- Firstly, I will not consider a delta between the cost of the current machines and another configuration, but only as the cost of buying a completely new computer.
- Secondly, I will use the price of a completely overdimensioned gamer machine, which is much more than a developer would need (3D GPU? Rarely needed for developing desktop or web applications).
- Finally, I will take no account of the partnerships or wholesale prices the company may profit from.
So, let us agree on a overexpensive computer costing €2,500.
How long does it take for the cost of loss exceeding the cost of this machine?
31 days, that is all it takes. After 31 days, you have paid more your developer for just waiting than you would have paid a new machine.
My figures may be approximate, but you get the gist: a good machine is an investment. Saving on it is ultimately losing a lot of money.
Yes, there may be reasons for downsizing the developer’s machine size. Which one do you think of?
The applications should work on a smaller machine
That may be true, but the problem is the size of the machine used for development, not for testing.
You can have a developer test on a target machine without having him/her develop on it. Google had its developers testing KitKat on Nexus 4 devices4, but that hardly meant they developed on it.
When a developer complains the machine is too slow/not powerful enough/does not have enough memory, their work is not the cause. The tools they use (and need) are.
As for testing, I see several solutions. First, my graph used the hypothesis of buying a new machine, so the developer can always keep the second one for testing. Or more conveniently, he can use virtualization to run a downsized test machine on his working station. I imagine you have your own ideas on how to do it.
There are indirect losses due to the same factors, which I chose not to include in my calculation.
Loss of gain: frustration
Have a developer interested in a project. He/She will be ready to make extra time. As a service provider, (s)he does not get paid for it and it is a pure gain. A motivated developer can perform in one day the work of three.
But if you put interest against frustration, the ratio tends to reverse and your developer will certainly do no overtime.
You want to add to the frustration? Forbid your developer to configure his/her own machine. Yes that makes sense, I do not go against the logic of it. You may need to control your environment.
But if you do, please, offer tools adapted to it! Preset the settings, so that when the software will look for the
$HOME directory, it will be somewhere it can write in.
I have seen places where all was smooth and access restriction caused very few frustration. Every important tool used single sign-on, thus avoiding the need to remember multiple passwords with different constraints.
And again I have seen other places allowing some liberty but where the accesses of every developer seemed to be different, requiring fine-tuning of each piece of software according to who was using it.
To sum up
If you really want to save money in the long run, keep your developer happy, and do not spare the expense on his/her working station as this would be a loss in the end.