Wednesday, October 10, 2007

Why Developers Need Great Equipment

Introduction

I wrote this as a justification to the managers at my company as to why developers should have better computers. After a while, I figured that it would make a decent blog entry. I have edited this a bit mostly because I was lazy. I left out the list of workstations, specifications and price guides that I submitted. Go to Dell or HP and do your own research. I also left out my list of references. If you read my blog, you already know the authors I read. I probably would not be able to attribute any of these ideas to the correct individuals even if I tried. None of these arguments are new and they have previously all been laid out by authors with far superior linguistic skills than mine. Here it is anyway.

Cost of Development

The cost of development is both directly and indirectly affected by the quality of equipment that developers have. is through developer productivity. Typically, the direct influences are easily measurable while the indirect influences are much less so. That being said, it is probably the indirect influences that have an overall greater affect on the quality of work produced by your developers.

The average developer’s workday consists of a cycle of change-compile-test. This is a cycle that developers can go through many times a day. Every fraction of a second that can be taken off of the cycle anyplace the developer is waiting on the computer is a measurable gain. In most cases at the company I work for, we’re talking about very noticeable lengths of time. I sometimes give up waiting when changing from one document tab to another within the IDE because it just takes so long. This time is just plain lost. It costs money and the oportunity to work on more features. It is very easy to sit and measure just how much time is wasted if you want to get out a stopwatch and keep track.

A less measurable influence is that when people are forced to wait for the computer to finish longer running tasks, they tend to start doing something else: reading a book, surfing the web, answering email. Those activities do not stop immediately when the computer is done compiling or testing. They stop when it makes sense to stop: at the end of a paragraph or chapter, at the end of the web page, when the email is complete. This is extra time not spent on the task of developing your product. Even if the secondary task is work related, the interruption is a break in flow which can take on average fifteen minutes to achieve. A developer not in flow is both less productive and less happy.

Cost of Developers

A less than happy developer is more expensive. Again, this comes in measurable effects and not so measurable. Granted, simply having better equipment is not the only influence in a developer’s happiness, but it is one of the cheaper and more powerful influences that a company has control over.

On the measurable side, if a developer starts to be less happy it can prompt them to ask for more money, if you’re lucky, or leave your company outright. Either way, the cost is much higher than buying good equipment for each developer. A nice $3000 workstation with cost spread out over three years is less expensive than giving that developer even a modest $2000 dollar bump to keep them happy. That $2000 increase amounts to $6000 for those same three years plus a percentage raise each year plus any extra increase when the developer figures out that the money really did not keep them that much happier and they ask for more or quit anyway. And we all know that the cost of losing a developer you don't want to lose and trying to replace them is much more than $3000.

One not so measurable effect is that a developer’s work, through no fault of their own is just not as good. This can affect not only their code, but directly and indirectly the morale of the entire team.

Why should developers’ computers be so much more powerful than other machines?

A developer has many more applications running and documents open than workers in almost every other discipline. At my current place of employment a developer must have open at bare minimum: one IDE instance (code editor, debugger and more), source control, unit test utility, database, web server, and a web browser preferably with its own debugger. On top of that each developer will probably also have a few of each of the following running: local copies of the document processing engine, indexer, scheduler, database utilities, code compliance software, bug tracking software, requirement and design documents and document management software, multiple browsers to test JavaScript and CSS and additional instances of the IDE when necessary. Add to this all the day to day utilities of email, IM, Word, Excel, other windows utilities that all employees need and other tools that I forgot and you get a large list of programs that more often than not require many processing resources to keep running smoothly.

The resources needed to make all of these programs run fast include multiple fast processors to make the simultaneously running, computation intensive tasks faster: compiling, file indexing and generation and code testing. Memory is needed so that a computer does not need to move running software from fast RAM to noticeably not as fast virtual memory. Fast and preferably multiple hard drives are needed for any kind of data access: file generation, compilation, source control check-ins/outs, etc.