Search code examples
server-hardware

Is it excessive to own server hardware?


Since there is a large pool of passionate developers in this community, I would like to gather your opinions on this matter - do you think it is excessive, or advantageous, to purchase and operate actual server hardware at home to spice your own development and learning efforts?

Back in 2003/4 when I jumped into the development line, I felt servers only belonged to the data centre, and did not believe in the pricing of servers for home use; consumer computing power was already pretty solid (back then), and similarly-speced PCs could be had for a fraction of the cost. Having assembled my own PCs since i was a school kid, I viewed the activity of obtaining second-hand components to build a new PC as an easy task. It was straightforward to prepare a PC that would act as a dedicated Windows 2003 server for my development tests. But for over three years now, I have been operating on real servers, albeit low-end models. I ended up in this state due to a number of factors.

  1. Stability. Server hardware built to work properly together. Tested to run server operating systems. Hardware that I assemble together may or may not work due to all those funny instances of unexpected incompatibilities. And unfortunately I ran into those situations more often than I should, like having to figure out why the PC won't boot up because I have the RAM modules plugged in a particular order, or by simple use of a particular DVD drive. I have not seen a single BSOD for my servers.
  2. Durability. I leave my servers running 24x7 and for years have (thankfully) not experienced any failure in server hardware. In contrast my PCs are just cursed with rapid failure rates. Even my vendor-purchased laptops eventually sport funny problems one way or another (especially with power supply units).
  3. Warranty. I may have warranty for individual PC parts, but the warranty for the computer as a whole is against myself. If something were to fail, I myself was the person to call up for help. And call myself I did several times. With the server however, I call techsupport and get them to replace parts.
  4. Capacity. Virtualization is truly a wonderful thing. Makes setting up single-purpose machines so much easier to manage. I directly loaded my first server to the max with 4GB RAM and happily ran a variety of virtual machines, simulating the multi-server/workstation environments I needed. Now my new server has capacity for 24GB RAM to afford the bigger scenarios I am looking to experiment with (e.g. AD domains, BizTalk server group, TFS group, etc).

All in all, with cranky DIYs I spent more time troubleshooting hardware problems than working on actual development issues. When I threw in the money to purchase real servers there was an instant drop in hardware problems in my life. I would probably have bought a vendor-built workstation too if only I could find a configuration that suited my development needs.

Now, some of my tech friends who are passionate with their work also operate their own servers at home. The thing is, most other folks/colleagues get rather surprised that I would actually spend cash for this category of machines. Some would classify me as insane. Have I truly gone overboard?

UPDATE - Clarification on server usage

The base server (Windows Server 2008) serves basic IIS 7/ASP.NET, SQL Server 2008, and Subversion services. But the largest role it plays is hosting a variety of virtual machines in Hyper-V. I am not a developer who is merely told to whack out application code against a single database and check it into some version control repository then go home without worrying how the application and implementation works out in a production environment. As a solutions integrator, I have to get an understanding of the client/customer environment and think of the big-picture solution that includes infrastructure and deployment concerns. Software application development, while being my primary role, is but a part of the solution.

I frequently find myself having to experiment and discover if certain suggestions or approaches would work for a given environment, and have had to prepare virtual servers like a forest of domains (controllers), web servers, database servers, BizTalk server groups, Team Foundation server, etc to conduct my analysis and solidify my recommendations. These virtual machines work as my personal POCs. The scenarios I face continue to grow larger, and I definitely do not see how I can get to learn how to handle these situations without a base platform that allows me to virtualise and simulate them.


Solution

  • Running data-centre level hardware would be over the top - you don't need hot swappable drives and the like and they'd be a waste of money, but certainly if you're serious about your own development work then running a low end SME level server is a good move for the security and convenience it gives you.

    Myself I run my own Consultancy/Development (the accepted answer) business, and I run a small network to support that. I run a HP SME server with 250GB RAID, 4Gb RAM, Windows 2003. It's on 24/7 and does everything you'd expect a server to be doing in any small business. The main network connects to the Internet by a good quality SME level ADSL account.

    In addition I run a Linux server on similar hardware that is connected to the Internet by another ADSL account (just a basic cheap business account) on a separate phone line. This gives me backup in the case of ADSL issues (does happen occasionally that one goes down and the other stays up) but also means I can run a low level internet server for showing things to clients on a dedicated and isolated line - obviously not production quality but good enough for testing (I have a couple of dedicated servers co-hosted elsewhere running client sites, but they can't be extensively used for non-production purposes obviously and having the hardware in-house means I can adjust the configuration more easily)

    It's really a question of tuning what your requirements are to the hardware to support that - just like deploying any hardware into a client actually. As a developer you'll want security and convenience just the same as any small business, but equally you need good ROI - no point in spending $1000 on additional server gold-plating when that would buy you a 30" monitor for example. Just pretend you have a critical but understanding business partner (of the Joel level of coder-focus) who you have to justify your expenditure too and be honest with yourself over what you need - with a sprinkling of indulgence.

    EDIT in response to reading some other comments about not needing server hardware for your own personal development use: Point you have to ask is what happens when your alternative suffers a hardware failure? I suggest that having a separate server makes it more likely you can recover from a catastrophic failure more quickly: that's likely to happen less often anyway, your more likely to have backups, and the restore is likely to be simpler.

    Even if you're just messing around with personal development loosing work and having to restore complex configurations both takes time and is a demoralising pain to do. You should value your own time at a reasonable $/h rate even when its just fun stuff and factor in that against the cost of a basic server and associated backup regime - with hardware prices at the level they are it's really a no-brainer.