Dev Diaries: .NET Development on a MacBook Pro M1

Charles Chen
8 min readFeb 7, 2022

--

Going back over a decade now, I’ve been a big fan of Dell’s enterprise Latitude and Precision workstations. I’ve never dabbled in Dell’s consumer hardware, but their professional hardware is well designed, low fuss, durable, and easy to upgrade. I still have a chassis going back to 2009!

My most recent Intel machine is a 2020 HP Omen 15 with 32 GB of RAM, a 1 TB SSD, an incredible UHD OLED display, and an Nvidia RTX 2060.

These days, I’m doing most of my work on a 2021 14" MacBook Pro M1 and I’d like to share my experience doing .NET, Node.js, React/Vue, full stack development on Apple silicon.

As I have mentioned in a previous article, Microsoft now ships the .NET SDK and runtime for a variety of platforms including x86, x64, Arm32, and Arm64. This means that it is possible to do .NET development on a MacBook Pro M1.

The runtime and development platforms supported for .NET these days

So what’s it been like working with .NET on the lowest priced (I say that, but it’s still quite expensive!) 2021 14" MacBook Pro M1 with 16 GB of RAM and 512 GB of storage? Should you make the switch?

The Good:

  1. Battery Life
  2. Portability
  3. Silent Operation
  4. Speed

The Bad:

  1. $2000 and Only 2 External Monitors…
  2. Not Everything Works on M1
  3. MacOS Ergonomics
  4. Finder and Spotlight are…

Let’s dive in!

The Good

Let’s start with the good stuff and why you should seriously consider it if you have the option and none of the limitations are applicable to you.

Battery Life

This is, by far, one of the biggest wins with the M1: you can do real work without lugging around a power supply or worry about plugging in. The machine can go hours while powering Docker images running database servers and multiple web application servers in addition to multiple instances of VS Code and browsers.

Practically speaking, this means you can work anywhere and this really changes your habits because you don’t have to really have any second thoughts about unplugging your laptop and taking it with you.

In contrast, the HP Omen had a runtime of 1.5 hours even with light browsing and the brightness turned down. I always traveled with battery anxiety and thus lugged around the power brick as well and of course, this means you have limitations when traveling and actually being productive.

Portability

I have a short video here showing how the M1 fits into a very slim Patagonia Mass Sling:

Does it fit? Yes, it does. I think any bag that fits the 13" will fit the 14".

It is just barely larger than the 13" MacBook Pro so it is quite compact; the 14" MBP is so easy to take it on the go and read or code and really changes your usage patterns.

Here it is compared to the Microsoft Surface 4 Laptop:

2021 14" MacBook Pro M1 (left, silver) is more or less the same physical size as the 13.5" Microsoft Surface 4 Laptop (right, gold).

One downside is that the omission of any USB-A ports means that you will have to carry a dongle around with you if you need to use USB-A peripherals which are still very common. However, the addition of an HDMI port means that if you are using Bluetooth peripherals, you no longer need a dongle to use an external monitor.

Silent Operation

It is absolutely silent.

In all workloads I’ve used it for — including running multiple local containers operating databases and web applications — the machine simply doesn’t make any noise.

This is not something you notice until after a while, you switch back to a machine that runs hotter and thus needs more cooling.

To be fair, this is probably not a fair comparison for the HP Omen since it only has a discrete GPU and thus would run hotter no matter what. But the reality is that it even runs cooler and quieter than my Dell Latitudes with integrated GPUs and earlier Intel based MacBook Pros.

My wife recently purchased a 13.5" Surface Laptop 4 with an i5, 8 GB RAM, and 512 GB SSD which is used for general purpose document management and even that runs warmer than the 14" MacBook Pro M1 which is used for compute heavy workloads .

Speed

The hardware combination of the M1 and the SSD Apple chose is absolutely blazingly fast for development workloads. Compilation, application startup, container build times, container startup; everything is fast.

This makes the dev-build-test cycle much more responsive and creates less friction during development waiting for things to build.

I don’t even think it’s necessary to have the higher spec’d machines for typical development workloads given how fast the lowest spec’d 14" MBP is.

The Bad

$2000 and Only 2 External Monitors…

It absolutely baffles me that a $2000 laptop with a “Pro” moniker can only support 2 external monitors (regardless of resolution) without resorting to expensive docks and third party drivers.

To get a triple external monitor setup to work, you’ll need to have a $200-$300+ dock that supports DisplayLink, download and install the DisplayLink drivers, and even then, many users report issues with flickering, odd behavior when reconnecting to the docks, and so on.

A triple monitor setup with $260 Dell D6000 dock (sloppily set up for testing).

It just seems silly that such a capable machine can only support 2 external monitors and makes it a bit of a drag to have to trawl through community reports and reviews to find a dock and solution that will work stably. It seems absolutely inexcusable for a machine meant for professional use.

It really makes me scratch my head and is my single biggest gripe with this laptop.

Not Everything Works on M1

While most of my .NET 6 work with Web APIs and console apps have worked without issue nor fanfare, I recently ran into an issue with a gRPC library when working with Google Cloud Pub/Sub .NET APIs.

This required that I find and include an M1 specific binary:

I’m certain that there are probably other cases where some platform specific builds will be necessary, especially likely when building desktop/UI apps.

The other issue is that even some Docker images won’t work at all. For example, Microsoft provides a Docker image for Azure CosmosDB, but it only supports Intel-based Macs and will not boot on M1 hardware, even with x64 emulation.

MacOS Ergonomics

This is an endless debate with no right or wrong, but I think that there are a few things that I subjectively find to be simply less ergonomic compared to Windows, especially now that Windows 11 does such a great job of modernizing many of the legacy pieces of the OS.

Window Management. It’s just not as good as Windows is at window management. It’s not as easy to cycle through all of your windows as it is on Windows. The lack of the window previews on the dock is also something I miss from Windows as it makes cycling through multiple windows and applications much easier.

There’s also some inconsistent behavior when working with windows in macOS such as when double clicking the window bar. In some cases, it fills the available desktop space. In other cases, it fills only the vertical desktop space.

While I am aware that there are tools and utilities that can be installed to help improve the window management experience on Mac, the problem is that Windows does it so well, out-of-the-box.

Tiny Buttons and Inputs. I don’t really understand why the buttons are so small and require so much precision to use.

But not only are they small, they are not consistently sized between windows and dialogs. Why?

Notice how the buttons for windows are even different sizes here for the window and dialog in addition to being tiny.

It’s also debatable whether the window buttons are better on the left or the right, but given that we have the scrollbar on the right, it would seem logical to put the other windowing controls on the right as well or at least give users the option to choose.

Notice how small the text “Escape sequence…” is and how small the text boxes are. There’s just no good reason for this.

Compare this to the Windows 11 Terminals configuration pane:

Windows 11 Terminals configuration interface for comparison

I also find many of the default macOS animations and sounds to be obnoxious, intrusive, unprofessional, and distracting. The first thing I have to do when setting up a Mac is to turn these off because of how annoying they are for a professional machine.

With Windows 11, I think Microsoft has really pulled ahead from a design and usability perspective.

Finder and Spotlight are…I don’t know; underwhelming? Utilitarian? The combination of the Windows Start Menu and Explorer make accessing files much easier, in my opinion.

Finder’s somewhat utilitarian and limited interface.

Here’s the Windows 11 Start Menu and Task Bar by comparison:

Windows 11 Start Menu and Task Bar with window previews.

While Microsoft has had many a misstep in UX through the various iterations of Windows, I think that with Windows 11, the team seems to have really madea leap. In general, I find much of macOS to have significant room for improvement from an overall usability perspective compared to Windows 11, but certainly a lot of this is subjective and personal taste.

The Verdict?

So if you’re a developer — a .NET developer — should you get a MacBook Pro M1?

Listen, if you have $1300-$2000 for your next machine and you’re not married to Visual Studio proper (if either one of VS Mac, VS Code, or JetBrains Rider will work for you), you should absolutely get one; it will change your dev behaviors for a variety of reasons listed above.

Compared with Windows 11, I find it hard pressed to imagine that I will ever find macOS to be as ergonomic to use out-of-the-box, but the other benefits are too hard to overlook.

Be aware that if you are working with legacy .NET Framework code (or quite frankly, even other platforms and runtimes), you will run into issues. Even with the latest .NET 6, there are still edge cases (like the above gRPC library) where first-party support is still lacking. You may encounter more issues if you are doing UI related work.

Looking forward, my sense is that Microsoft will commit more to full cross platform support for everything. It’s already visible in many of their codebases which include PowerShell and Shell scripts:

Microsoft’s own open source libraries and utilities are largely scripted for PowerShell, batch, and Shell.

If you’re a .NET developer, the M1 will change your development experience — for the better.

--

--

Charles Chen

Maker of software ▪ Cofounder @ Turas.app ▪ GCP, AWS, Fullstack, AI, Postgres, NoSQL, JS/TS, React, Vue, Node, and C#/.NET