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.
-
I think that if you are a programmer you should focus on programming. Having an actual live web server it's not easy or cheap.
Just think about it, you must have a good network connection with a good upload rate, a good machine dedicated just to werform as a server. Not even going to talk about the electrical costs or the refrigerating system, because you will need to place the server on a room that you do not use(cause is just simply annoying to hear those vents working when you are trying to rest).
There are hundreds of companies that provide this service for almost nothing, when i had that decision to make, i just choose one of them and never thought twice.
Don't get me wrong, i did had a web server at home, just to learn how to set one up, it was fun and rewarding but i could never provide a professional server just because it need 24/7 attention to prevent downtimes.
icelava : I do not run just a web server, unfortunately. I operate forest domain controllers, BizTalk Servers, SQL Servers, Team Foundation Server, ISA server, different forms of client Windows XP for different scenarios, etc.annakata : I agree, every time I get involved with hardware it's just an upsetting and/or frustrating and/or tiresome experience. Especially printers. I hate printers.Cruachan : Hmm, personally I think as a reasonably well rounded developer you should have *some* familiarity with hardware, network configuration and the like. Just at the level where if presented with a problem you can make a reasonable stab at fixing it - or knowing you need professional sysop help.Sergio : And that is exactly what i said in the last paragraph. It is nice to know but i think it is just to much work/expenses to be worthwhile to maintain a working server.icelava : Btw, I do have an empty room to house my extraneous computers :-) yes electricity can be expensive but i feel ignorance on infrastructure issues is costly when I possess no knowledge and opinion to advise the client.icelava : Oh i probably should have answered your first point. As per my clarification, I am not just a programmer. I look at complete solutions to deliver to the client, including server/network infrastructure. -
I think having some familiarity with server hardware makes you a more rounded technologist, so go for it. There are elements to a "proper" server you generally don't build into a home built system, like hot swappable drives and PSUs, remote access cards (like a Dell DRAC) etc.
Even if server admin isn't your main job function, as your career progresses you may increasingly become involved in buying hardware and assessing quotes from vendors. The extra knowledge can certainly come in useful there.
icelava : Main job is developer, but I handle lots of architecture, infrastructure, deployment matters. -
I think whatever will have a ROI (return of investment) higher than 1.1 is ok to do it. In your specific situation i think in the short term you will defiantly loose money, but in the long run you may gain thought other added value. You could go for a somewhat cheaper than the average hardware to balance the costs.
icelava : In fact, a high-end workstation costs more than my server. I bought low-end departmental class servers, which is a good compromise. -
I used to operate my own web server, built on Compaq server-class hardware. However, these days, I don't want to be responsible for such a beast of a machine. The power draw from that server was immense, as was the noise and heat it generated. Ignoring the financial issues of providing power and cooling, the simple fact is that (to me) it is not worth the effort. There is nothing that I need to do that requires server-class hardware. In fact, there is nothing I need to do at home that can't be achieved on a virtual machine on my MacBook.
YMMV, of course.
icelava : Have you tried to simultaneously run domain controllers, BizTalk app server, BizTalk database server, web server, Team foundation server, Sharepoint server in your MacBook?ZombieSheep : No, but as I said, YMMV. For the record, I have run an AD controller, BT server and a separate dev machine (with SQL) and it wasn't too bad.ZombieSheep : The other point is that the original question was a subjective one. I have no real need to run BT or MOSS at home so I don't. -
It really depends on your particular needs.
Having your own development and learning servers may be considered excessive in general.
In fact, for typical development, I believe you can even put a virtual server on your development desktop workstation under VirtualBox or whatever you prefer. No need to have separate physical PCs or servers.
If you do need them though, then whatever gets the work done would suffice, right? Of course, "server"-servers are usually better suited for the job. If you can afford the price difference and it makes sense for you, why not?
icelava : In fact, my workstation has its own Virtual Server 2005 installation to run its own group of virtual machines. But those machines are different from the ones I run on the server. -
I agree with Gnudiff, why would you need server hardware with rock-solid 24x7 availability for playing around with at home? Yes there are some technicalities it may be useful to learn, but it may be easier to get hold of an old box at work and fiddle with that. Then it can be kept somewhere out of the way and won't cost you anything.
Between this site, Google Reader and Facebook, I don't have enough time for my wife, let alone managing my own servers at home!
icelava : The largest factor, as updated above, is the capacity of a server. 8GB RAM is not enough for my environmental scenarios. -
My workstation is a Core 2 Quad with 8GB RAM and RAID 0 and RAID 1 hard disks running Vista x64. It works pretty well for all my needs. I don't think I need a separate server. Invest on your workstation and forget about spending lots of time configuring stuff!
icelava : I spend lots of time troubleshooting my workstation hardware. I hardly spend time worrying about my server hardware. -
I think there's a whole spectrum of options between the two extremes of:
- build your own PCs from scratch (lots of effort - you might be the first to run an OS on that particular combination of components)
- buy server grade hardware from a major manufacturer
For the needs you describe, something like a a high end Lenovo desktop is likely to provide the reliability and resilience you need, far cheaper than server grade hardware.
Ironically of course, the really big services companies (Google, Amazon etc.) are spending less on individual servers, buying more of them, and writing software that routes around failed nodes.
icelava : I did start out with the former option, and ended up with the latter. So yes, I gone through the spectrum. Except, I cannot afford high-end quadruple redundancy systems; I bought low-end servers for a good compromise. -
If you're looking only to learn, and that too as a programmer and not a network or server engineer I do agree that spending on a professional server setup is overkill. You'll be done with the novelty in the first few weeks and then it will just sit there on your lap like a beached whale.
Do you have any specific needs that cannot be served by a regular computer with server software installed?
icelava : I come up with complete solutions, not just a software program.icelava : By "complete solutions" it means system architecture, network infrastructure, deployment/distribution.icelava : Sorry I did not address your last question - please read updated description above. -
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.
Cyril Gupta : I thought he was a programmer. How do you expect him to service a hardware failure? Suppose my hard disk blew... Are programmers in charge of changing hard disk in professional server environments?bruceatk : Where I work I do a little of everything. I'm sure a lot of developers have to keep hardware going.Cruachan : He's not in a professional server environment in this case, just asking if he should use server level hardware to support home use and balancing the additional costs vs lower failure rates. Of course in an office you get IT support to fix a failing drive...Cruachan : ... but if it's your own hardware you're responsible for it and of course you should be capable of swapping a failing harddrive. Basic familiarity with hardware is necessary as a coder - sometimes simply because failing hardware can cause software issues.icelava : The servers i bought are departmental-level tower models, not rack-mountable data centre models. I use Acronis True Image Workstation/Enterprise Server to easily backup and restore disk images.icelava : @Cyril: that is why I choose to buy server hardware - i get technical support from the vendor in the event of hardware failure. And server hardware fails slower than consumer hardware. -
Unless you need to be experienced in that hardware I think it's overkill. I have run at least one server at home for the last 13 years. I build/upgrade my own PC's. I have supported my family (5 workstations and 5 laptops) for longer than that. The servers that I use are built from parts left over from upgrades. I currently have a 3 server configuration. I have my main server (AMD 3800 X2 w/4 gig) that I use for the family's file server and an IIS web server. It also is running Ubuntu in a VM. This box handles all of our backups. I have a 2nd box (AMD 2600 w/4 gig) that is used for Windows Media Center, and as a backup for my main server, it replicates the contents of my main server to it's local storage. My 3rd box (AMD 3200 w/4 gig) is my play box and is currently running Windows Server 2008.
In 13 years (running 24x7) I have had two hardware failures that I relate to power (they occurred after a power outage), a network card and a motherboard. I have had one hard disk failure (it just started getting a lot of errors/retries, I didn't lose any data). After the motherboard failure I bought an inexpensive UPS. I then added a 2nd one when I added the 3rd server.
My used left over hardware has been extremely reliable. The only issues that I have had with hardware compatibility is with Ubuntu on a Compaq. After that one episode I started only using generic hardware. I would recommend everyone have at least one server to centrally locate things that need to be backed up.
All of my servers have gone on to relatives to use as a 2nd or 3rd PC as they have been retired. I ran one server for about 5 years, two servers for about 6 years and I have been running three for the last 2 years. My oldest server box the AMD 2600 served it's life for 3 years as my wife's PC and has been a server for 2 years.
Update
I never really thought about it before, but it dawned on me that the reason that I have had such reliable hardware is because the hardware I use has already had a couple years of testing. With the exception of a few hard drives all of my hardware has proven to be reliable before it makes it to being used as a server.
icelava : You are pretty lucky. My luck ain't so good with PC parts, which caused me plenty pain when I first setup a dedicated PC to act as a server. Non-stop hardware problems.bruceatk : Somebody has to offset my good luck. :) I believe using a UPS makes all the difference. I pretty much buy everything from TigerDirect or NewEgg and I don't buy best or the cheapest. I try to find the sweet spot.icelava : Nah my hardware problems were not power surge situations.