My name is Jason Cribbet and I have a confession to make. I’m a SharePoint developer and I use a Mac… and I love it. Just to clear some things out up front, I’m not an Apple fanatic, though it might appear that way if you take inventory of my personal hardware rundown. I just like to have everything work together, easily. I write this post from my Macbook Pro and this machine has been, hands down, the most stable, lightweight, and dependable machine I’ve ever used.
So where does SharePoint development fit into this picture? Simple, it sits contained within buckets of virtual machines. My SharePoint development lives and dies through the use of VMs. In previous lives, I’ve had souped up Lenovos, Dells, and even HPs (did I just say that out loud?) as my hardware platform and none of them have had the responsiveness of my MacBook. So far, my rig has worked flawlessly with a number of different OSs and SharePoint configurations.
Full disclosure here, on not one of those previous platforms have I had 100% flash based memory. Spindles are no more for my current config… I do realize that this probably counts for much of the responsiveness and speed increases that I’ve experienced.
Um, I thought we were talking about development?
Yeah, so back to the topic of development. As I mentioned before, all of my development work is done on VMs running on my Mac. There are a couple of Mac options for VM software out there, notably VMFusion and Parallels. Since I spent most of my Windows world working with VMWare Workstation, it was only a natural segue to try VMFusion and see where it got me. Needless to say, I haven’t had a need to give Parallels a run so I don’t have much to say about it. VMFusion does the trick and gives me all the options and configuration modifications I need to make thing work as I need. As for my recommendation, it would have to be for VMFusion. I neither know nor need anything more than what it offers.
For the development environments, there are a number of requirements that I have which will allow for me to bounce around to different environments as needed during my daily activities. Here are some of the primary ones:
- Drive space is limited – With only 256 GB on my local drive, space is a premium. There will be use of external drives but the local drive is by far the quickest.
- RAM is limited – The max RAM for my configuration is 8GB… not much I can do about that.
- Support SharePoint 2013 – SP 2013 is a resource beast to say the least. I think we should all be aware of that by now.
- Support legacy SP 2010 and 2007 development – We all need to be a little nostalgic every now and again.
- Replicate actual farm deployments as much as possible
- Only 2 USB 3.0 ports available
Ok, with all that in mind, here’s how the VM breakdown goes. I use just about all of the local drive storage that’s available, with a slight buffer of roughly 20GB, and two external USB 3.0 SSDs. The following is how everything is divvied out:
Figure 1: Cribtoso Development Environment Architecture
MacBook Local Drive
In addition to the root Mac OS X instance that is running on the local drive, the following two virtual machines are present.
Windows 8.1 Preview VM
On my local drive, there are two main VMs, a Windows 8.1 instance and a Windows Server instance that is the basis for my Cribtoso domain. The Windows machine is there and available for whenever I need to jump into Windows to get something done. Whether it be that I need to get into Microsoft Project/Visio or if I need to jump into SharePoint Designer quickly. Basically, it allows me to do anything that I’m not able to do with my Mac.
Cribtoso AD VM
Here’s where the development environment starts to come into play. Additionally, on my local drive, I have a small Windows Server instance which acts as my Active Directory controller and DNS controller. The AD contains about 200 test accounts and the DNS manages all of the domain routing for my development environments. The Cribtoso AD machine has 2 virtual network cards, the 1st is shared with the MAC address of the root machine and provides a connection to the internet while the 2nd is connected to a private virtual network that is configured within VMFusion. This private network will allow for all of the domain mappings and routing within my development environment.
External SSD 1
The External SSD 1 houses all of my SharePoint VMs. To ensure that the VMs fit nicely, this drive is larger at 250GB but with it being an SSD over USB 3.0, it performs very well. There are 2 VMs hosted here.
SharePoint 2013 VM
As mentioned before, SharePoint 2013 can be a beefy installation when using all components. Combine that with the local installation of SQL Server and Visual Studio and the load on the machine can get heavy quickly. For my development VMs, though I have all services installed and configured within the SharePoint environment, I make sure that CPU intensive processes like search crawls are turned off to prevent any unnecessary load on the machine. This works out quite well.
Additionally, due to the limitations of VMFusion, the max RAM that can be applied to a VM is 8GB that SP 2013 and SQL Server 2012 gobble up pretty quickly. In all, the VM performs well enough for all my development needs. There’s never been a time there has been such a bad system lag that a quick IISRESET or system restart couldn’t correct it.
With regards to the Cribtoso.com domain, this VM is added to the domain using a static IP on the Cribtoso private network and within the Cribtoso AD VM, there are multiple mappings to the SharePoint 2013 web applications. This makes for pretty URLs within my development environments using host named web applications and host named site collections that all but eliminates the use of crazy port numbers for routing of traffic in my SharePoint environments. Everything comes across good ol’ port 80.
SharePoint 2010 VM
The SharePoint 2010 VM has an almost identical configuration as the SP 2013 VM though, due to the lower system requirements of SharePoint 2010, this VM really zips along. Again, like the SP 2013 VM, this machine is added to the Cribtoso domain and multiple host named web applications and host named site collections are routed through the Cribtoso AD VM’s DNS service for pretty URLs and web traffic over port 80.
External SSD 2
External SSD 2 houses all VMs for development outside of SharePoint. There are a number of sweet enhancements to Azure services over the last couple of months and the VMs on this SSD allow me to sandbox out prototypes without tarnishing my SharePoint VMs. Again, I’m working with an SSD over USB 3.0 so it’s pretty peppy.
Backups and Maintenance of VMs
I wish that I could say I had a more robust backup strategy for my VMs but it’s pretty primitive, though effective. SSD space is expensive, no doubt, but that doesn’t mean I have to live completely on the edge. My VMs are protected using a combination of the following:
- Snapshots – I keep at most one snapshot of each VM so that I can always revert to a working instance in the event that something goes catastrophic. Snapshots are always good practice.
- 2nd Virtual Drive – For every VM, there is an additional virtual drive that is marked as Persistent. I will be sure to map all my local folders to this persistent drive. This way, if I have to revert to a snapshot, the data on the persistent drive remains in its current state.
- Source Control with Microsoft Team Foundation Server – Like every good developer, source code gets stored in a source code repository. If things get so bad such as a drive failure that a snapshot can’t help with, my code is always in TFS. At worst, I have to rebuild my VM from the ground up, connect up with TFS, and download a recent version (usually daily). Some time is still lost but it could be much much worse.