After three years of waiting, the next generation of Microsoft's Surface Book 3 is here. For developers looking to switch away from a MacBook Pro, the Surface Book has long been one of the most compelling alternatives, but this time around it's even better. Combined with major hardware improvements in SB3, the Windows Subsystem for Linux 2 (WSL 2) is finally here, delivering a full developer-friendly coding environment without compromises for the first time.

Ever since I switched away from a MacBook Pro, the Surface Book 2 was my daily-driver computer of choice: a versatile laptop that could game, code, or become a tablet, in a single device. The Surface Book is unique because it's a full laptop with GPU which, via an elaborate docking mechanism, can detach from the keyboard and become a large tablet computer, or flip around entirely.

I've been using the 15-inch Surface Book 3 for a few weeks, and not only is it a dramatic performance upgrade from the previous generation, it resolves all of the issues I had with the Surface Book 2. While I've already published a high-level review of the hardware over on my OneZero column, let's dive into what's different, and how it's improved for web developers, like myself.

What's improved

The Surface Book 2 had a few issues that were tolerable, but grew more frustrating as it aged, so let's go over those and what's changed in the Surface Book 3:

Performance and thermals

The new i7-1065G7 quad-core processor in the 15-inch model is a godsend; it runs faster and cooler in general, across the board. We'll get into how this applies to reality in the development section later on, but it really shows in day-to-day usage, with the fans spinning up far less frequently than before (even under moderate load with Docker containers), and less heat overall.

More importantly, there's a 32 GB of memory model now available as well, which I'd highly recommend for any developer to get. I found I was able to hit the memory roof on the Surface Book 2 often, which was a shame for a machine that was otherwise incredibly powerful. Don't skimp out, it's worth it.

For developers specifically, the 1TB and 2TB versions of the 15-inch Surface Book 3 have much higher read and write time than previously as well, according to Microsoft when I spoke to them about the device. This translates to huge performance gains using WSL 2 and Docker this time around, and is worth the money—again, more on that in the developer section.

Many reviewers have panned the Surface Book 3 for using a lower-wattage Intel processor than you'd find in traditional clamshell laptops, which is a requirement to make all of the guts fit inside of the screen and not overheat all of the time. That's a compromise I'm willing to make in exchange for the versatility of being able to switch from laptop to tablet, and have enough power to play games when I want to.

USB-C connectivity

While the Surface Book 2 had a USB-C port, it wasn't quite fully featured, which resulted in an inconsistent experience. Some 4K displays would work, with the right 'active' dongle, and USB-C docks would function, but perhaps their HDMI port wouldn't output at 60hz. This was a quirk of the processor used in the previous generation, which limited the amount of available PCI-e lanes available to the port; in other words, it wasn't able to operate at full speed reliably.

This time around, the USB-C port is a full-speed port, without limitations. It's able to use the same USB-C docks a MacBook would use, displays and all, as well as charge from the port simultaneously, and it's a great improvement. Alongside the two full-sized USB-A ports, which are nice to have around still, it makes for a much more reliable experience.

Charging improvements

A bizarre decision with the Surface Book 2's magsafe charger meant that if the device was under full CPU and GPU load, it could drain more power than was available from the charger. While this was rarely a problem in practice, I ran into it a single time while playing games for hours on end; it shut down, and needed to be charged, despite having been plugged in the entire time.

A similarly strange problem related to the USB-C port was also present, where the Surface Book 2 could charge via the USB-C port (which I preferred), but it would complain that it wasn't charging optimally, as the port isn't capable of providing the full wattage the device required. This wasn't ever an actual problem, but the error was annoying.

The Surface Book 3 resolves these issues as well, with an adequate charger included in the box and full-speed charging via the USB-C port, if you happen to have a MacBook charger lying around. It was a dumb issue, but I was very happy to see it resolved.

Other bits

There's a grab-bag of other improvements in tow here as well, which make for a big improvement when using the Surface Book 3 every day:

  • Given we're all stuck at home these days, the new front-facing camera is incredibly crisp compared to that found in the average MacBook Pro, at 1080p, but more importantly there's also a Studio Microphone Array this time around, which cancels out background audio so you don't need to wear headphones for calls.
  • Detaching the keyboard is 50-60% faster than previously, and more reliable in general. Additionally, Microsoft now offers to force kill apps that are blocking the undocking process if it isn't able to seamlessly hand them off to the integrated graphics instead of the dedicated card in the keyboard.
  • Face unlock, AKA Windows Hello, is faster and more reliable both when unlocking the computer and when using it with third-party software like 1Password. It's leagues better than needing to use a fingerprint, and worth setting up.
  • Fast resume is reliable now, even after long periods of inactivity. The Surface Book 2 seemed to have problems with fast resume, often needing to come out of hibernation instead, which meant waiting 10-15s to use the laptop.
  • I'm so happy every time I need to offload some photos from my camera that there's still a full-sized SD-card slot.

Developing on the Surface Book 3

When I reviewed the previous generation, the WSL technology that allowed running full Linux, natively was brand-new and had a number of teething issues. While it worked for most web development, many developers I know wrote it off because it would require workarounds for some types of workflow due to lack of support for things like native Docker containers or running 'npm watch' to track file changes.

With WSL 2, the game has totally changed. It's a total rewrite and now available as a part of the latest stable release of Windows 10, all of these issues have been resolved, and it's worth taking a second look. Not only does literally everything you'd expect to work reliably, it's fast as hell, and Microsoft has invested a huge amount of time in building a great developer experience around it with its own tools and partners. That's made particularly sweeter now that Docker provides an official 'WSL 2 backend' optimized for the technology, which works natively within WSL 2.

If you're switching from a MacBook Pro as a developer today, I'd expect you'd be able to port the majority of your dotfiles with minor modifications.

On the Surface Book 3, WSL 2 is the fulfillment of the 'Linux on Windows' dream that Microsoft first touted three years ago. I'm able to run my full development workflow, without compromises or workarounds, and just get shit done. The two types of codebase I work on right now are a medium-sized Laravel PHP site, which leverages a number of Docker containers for the development environment, and a NodeJs/Vue codebase for a Chrome extension I'm building.

My Surface Book 2 is the Intel i7-8650U model, with 16 GB of RAM and 512 GB of storage. The Surface Book 3 is the i7-1065G7 model, with 32 GB of RAM and 1 TB of storage. With that in mind, let's compare how the newer model fares directly, so you can see the difference.

I use PHPStorm along with my Laravel codebase, and every task completes in a fraction of the time I've become accustomed to on my older Surface Book 2. To compare, I fired up my Docker containers (using the Vessel wrapper), which consists of a PHP, Node, MySQL and Redis container set. Both machines use a similar setup, with the release version of WSL 2, and their power settings set to 'best performance.'

As you'll see below, starting the Docker environment takes 6 seconds on the Surface Book 2 (pictured left) and under three seconds on the Surface Book 3 (pictured right). Creating this environment from scratch takes over 4 minutes on the Surface Book 2, and just over 2 minutes on the Surface Book 3, as well.

More importantly, the site itself is much more responsive when running within the Docker containers as well, with each page load completing in less than a third of the time it takes on my Surface Book 2, making local development less painful — an improvement that appears to be attributable to the SSD performance improvements in the Surface Book 3.

Running everyday commands, like yarn and Git, is also dramatically improved on the Surface Book 3 comparatively. On my Chrome extension's codebase, a clone from GitHub completes in under two seconds on the Surface Book 3, and a fresh node modules install completes in 16 seconds, despite rebuilding a number of packages. As you'll see in the below video, that's dramatically faster than the 35 seconds it took on the Surface Book 2.

Surface Book 3 yarn install vs Surface Book 2

If you can't see the video above, click here.

I'm aware these demonstrations are hardly scientific, but the truth is, the Surface Book 3 is a dramatic improvement to almost every part of my development flow's performance, and is noticeably more responsive thanks to the developer-focused hardware improvements this time around.

Tip and tricks for developers on Windows

I've written a guide to WSL 2 in the past with a number of copy-and-paste commands you can use to get set up quickly, but here's a few recommendations for those that are new to Windows and WSL 2:

  • Use Windows Terminal, Microsoft's fancy new terminal emulator. It's lovely, and makes coding with WSL 2 just a little bit nicer.
  • Once you're set up with WSL 2, create a projects folder in the ~ directory, and clone your codebases there. It's much faster, and still accessible within Windows as you'd expect.
  • Get Visual Studio Code and install the Remote tools pack, which allows you to open WSL folders directly in your code editor.

A worthy upgrade

As you can tell, even for Surface Book 2 owners, the new Surface Book 3 is a worthy upgrade, particularly for developers. I'm a huge fan of the form factor, and adore being able to switch from serious coding to podcast editing or a game like Fortnite without skipping a beat. With Microsoft's constant iteration on Windows 10 over the last few years, it's become a formidable operating system, and the company's investments in developer workflows are paying dividends.

The Surface Book 3, combined with the improvements to Windows, shows Microsoft's commitment to iterating on something that works, and taking the time to get it right; it's a powerful laptop for makers like me, who switch between different needs in a single day, from development to gaming.

If you're looking for your next laptop, the Surface Book 3 is a capable, powerful replacement for the MacBook Pro, and it's only going to get better with time. I can't recommend it more than enough. Microsoft has positioned itself as the company building the best tools for developers, while Apple has stagnated with macOS, and there's never been a better time to jump over to Windows.

👉 Surface Book 3 (Microsoft Store)