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.
- 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.
- 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).
- 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.
- 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.