VM Hosts: Single Large Host or Few Smaller Hosts? First, I apologize if this is the wrong forum to ask this question. I was wondering if this is a ServerStack or DevOps question. In either case here it goes:

I am building a small software shop and I am trying to figure out the infrastructure and machines required for it. 

I bought MSDN Pro Subscription ($600/year) as well as JetBrains All Product Subscription ($600) for the development tools, desktop and server OS licenses, etc etc...

At the moment I have a budget of roughly $1500 (Walmart Credit Card) and I am entertaining the idea of buying 3x refurbished machines (each with Core i7-3770 cpu and 16GB of RAM) at $452 a pop or buying a large server at $1120 and maxing out it's RAM capacity for another $300-$400.

The background info on this is that I want to develop a product and have a full blown development environment (Source Control, Build/Deploy/Test and Release Management, Dev, Beta, and Prod environments). Cloud services (the cheapest) will run me about $200-$300 a month, and over period of 6 months it will become a recurring liability rather than an asset (which I pay out of pocket btw). 

If I buy the hardware - it will have an initial cost of about $1500 but it will last me for the duration of the development process which is at least a year or so. Beyond that, if I outgrow it's capacity, I can move to docker containers and maybe a cloud solution for the Dev, Beta, and Prod environments.

So the question is - which is better - multiple dedicated cpu's or a single large server?

1x Large VM Host (64gb RAM) to have the following VMS (from here) (4GB used by Hyper-V 2016 Server):


1x - 8GB RAM - TFS - (Git, Active Directory, SQL2016, Sharepoint, IIS)
1x -  4GB RAM - TFS - Build Controller
1x -  4GB RAM - TFS - Release Agent, Test Agent
1x -  4GB RAM - DEV - Linux Mint (Postgre SQL)
1x -  4GB RAM - DEV - Linux Mint (Web Server/Apache)
1x -  4GB RAM - BETA - Linux Mint (Postgre SQL)
1x -  4GB RAM - BETA - Linux Mint (Web Server/Apache)
1x -  4GB RAM - PROD - Linux Mint (Postgre SQL)
1x -  4GB RAM - PROD - Linux Mint (Web Server/Apache)


Or having multiple smaller hosts:(from here)

1x Small Host - 16GB RAM (4GB used by Hyper-V 2016 Server):


1x - 6GB RAM - TFS - (Git, Active Directory, SQL2016, Sharepoint, IIS)
1x - 3GB RAM - TFS - Build Controller
1x - 3GB RAM - TFS - Release Agent, Test Agent


1x Small Host - 16GB RAM (4GB used by Hyper-V 2016 Server):


1x -  4GB RAM - DEV - Linux Mint (Postgre SQL)
1x -  4GB RAM - BETA - Linux Mint (Postgre SQL)
1x -  4GB RAM - PROD - Linux Mint (Postgre SQL)


1x Small Host - 16GB RAM (4GB used by Hyper-V 2016 Server):


1x -  4GB RAM - DEV - Linux Mint (Web Server/Apache)
1x -  4GB RAM - BETA - Linux Mint (Web Server/Apache)
1x -  4GB RAM - PROD - Linux Mint (Web Server/Apache)
A good rule of thumb is to try and avoid using one bit of logical kit (be it a single VM or a single physical host) for more than one thing.

If a physical server is going to be a VM host then that's all it should be. If a VM or a physical host is going to be a source code repository then that's all it should be etc. You can squeeze a bit extra out of your infrastructure if you consider everything to be a VM host and you then partition up those VMs to be single purpose hosts themselves.

The rationale behind this is that


A single host going down shouldn't impact your entire stack. Trust me this will hurt you badly as soon as you need downtime for an upgrade.
The cost to scale any individual component increases drastically if you want to try and scale on multiple similar servers (which will save you management dollars by reducing complexity) or it will cost you to scale out adhoc hardware as needed because you then need to deal with many different-sized hosts that are a pain to manage and require anyone managing them to know the platform intimately.


recommendation: split your infrastructure into as small a unit as is logical. If you can only afford to buy a single large bit of kit then make sure you split it into logically separate VMs or containers so that if you need to pop a bit of your infrastructure onto another server, or you need to scale stuff at different rates you can easily expand out but investing in a smaller upgrade.

Obviously the realities of software licencing, especially for windows OS's might make this cost prohibitive but, while I haven't caught up on windows licensing models in a while, I'm sure there are development centric licensing models that can suit your specific needs.