If you are an information technology software engineering professional, it is inevitable that you will need to refresh your development hardware every few years (3-5, depending on workloads, projects, etc). Depending on your setup and configuration, the environments that you use, you could end up spending a considerable amount of time re-configuring your environment when you update your system with a newer model. One of the primary reasons is that it is almost always recommended that new computer systems be wiped (in the case of Windows machines, to reduce bundled bloatware) and re-installed from scratch and then any documents and settings migrated from the old installation to the new. Any software licences you use would also have to be re-installed. This all adds up to time that you could spend working on other tasks or doing client work.
At the end of April 2019, I refreshed my primary workstation with a 2018 15” MacBook Pro, six-core i7 2.2Ghz, 32GB ram, and 1TB SSD. This was a signficant upgrade from the 2016” 13” MacBook Pro, dual-core i5 2.3Ghz, 16GB ram, 256GB SSD, purchased a few years back. I have been using MBPs as my primary workstation since 2012. I generally opt to maximize disk and memory with custom BTO configs as generally memory and storage are not user upgradable in modern commodity laptops (both Apple and Wintel).
While I am a hybrid multi-platform developer (iOS, ASP.NET MVC/.NET Core) I find that it’s easier to work by having my base metal hardware be an Apple Mac, while using Windows 10 in a virtualized environment. The Windows 10 machine does not have anything except the bare necessities to support development: Visual Studio, SQL Server Management Studio (although I will use generally SQLPro Studio on OSX for the particular development task, if I can, as it’s much more stable than SSMS).
I avoid installing any productivity suite software such as Microsoft Office or Outlook in Windows 10 on a machine that is provisioned for development work, as it generally lead to system instability. The Office suite is installed in the host Mac system, and I use a third party mail client, such as Airmail, though lately I’ve discontinued that usage (more on this in a later blog post).
One of the most important benefits of virtualization means that when I provision a new workstation I can simply migrate the Windows 10 virtual machine by copying the guest’s files (disk and configuration). A process that takes less than 10 minutes. I simply need to install a fresh copy of Parallels on the new machine first. Virtualization means that I can take snapshots of the environment on a regular basis and store them to my local 18TB QNAP NAS. If the Windows 10 environment gets corrupted for some reason, for example, Microsoft releasing a botched update, I can simply rollback the entire system from a snapshot. My data and productivity are safeguarded in this manner.
Of course there is no downside to rebuilding the virtual machine, as since it is virtual it can be rebuilt side-by-side while the existing virtual machine is still being utilized. However, the need for rebuilds becomes much less frequent when properly virtualized with snapshots.
You’ll notice that this new hardware is a migration from a 13” 3-lb machine to a 4-lb machine, an increase of 33% in weight. I had decided that the increase was justified because of the increase in processing and memory capacity. One thing I found was that the dual-core i5/16GB configuration in the 13” was not adequate for my needs as various project requirements grew. The six-core i7/32GB config brings blazing speed and performance with room to grow for the future. Generally unless you’re doing heavy CPU or GPU related work I find it’s not worth upgrading those components for custom BTOs.
Having the larger, beefier upgraded spec machine means there is a lot more room, aside from development, for research and technology preview and exploration tasks related to CI/CD, DevOps orchestration, and Machine Learning.
Another reason I decided I could live with a heavier, larger form factor, is that I decided against traveling with this new machine for non-work travel. Lugging a heavy, expensive laptop on vacation, especially internationally is never desirable. I have a 2-lb 2016 12” MacBook which I decided would be an adequate laptop for vacation travel. I’ll have a separate blog post to discuss this change.
Wrapping up this post, here is my current, as of 2019 config:
2018 MacBook Pro 15” / 32GB / 1TB / six-core 2.2Ghz / OSX Mojave 10.14
Windows 10 Virtualization using Parallels
Docker Desktop for Mac w/ Kubernetes support
Blazing fast I/O performance means multiple virtual machine workloads complete fast. Development productivity is vastly improved, the only bottleneck is CPU, but with six-cores, there is plenty of power for tasks to complete. Just make sure you’re utilizing those cores! Virtual Machine configuration should be at least 4-CPU config for all virtual machines.