I am writing this post from my new 13” Macbook Pro with an Apple M1 Chip. If you’ve been following the five year long #davegoeswindows saga, then this might come as a sudden surprise. I will be honest, it comes as a surprise to me too. The decision was a bit impulsive but my dev environment was blocking me and my time and patience was not a luxury I could afford. I’m living that aluminium utopia dongle life now and will stick to this for the forseeable future.

Why the sudden change?

I’ve had some troubles with Windows this past quarter. Notably I didn’t have an email client or a calendar for nearly three months. Gmail integration quit working on the Windows Mail and Calendar app1 and it’s hard to be a convincing business man without meeting alarms. I did all I could to fix it, but nothing worked and there was no signal on Microsoft’s Feedback Hub.

So I did the thing. In an attempt to revive it I cast that cursed necrotic Windows incantation… I wiped out my whole computer…

And it didn’t fix it! 😱😱😱

Other small annoyances existed, but the final straw was last week when I wanted to contribute to an open source project. Noticing the project had tests and wanting to be a good netizen, I decided to abide in TDD. I stubbed out a test and fired up the @web/test-runner@web/test-runner-chromepuppeteer-core test runner and was surprised that Puppeteer didn’t work. I’m 99% sure I’ve used Puppeteer on that machine before, but now it wasn’t working. Not sure if the system reset broke it, or upgrading to WSL2, or my client’s Active Directory settings? A myriad of potential causations.

So I did the thing. I made a reduced test case and tried to get a basic Puppeteer script working. I couldn’t install chromium-browser from apt because snap didn’t work without replacing the Linux kernel2. I installed the Debian package, but no dice. I sort of got headless (regular) puppeteer working using its locally installed Chromium inside node_modules. I could even spawn a non-headless Chrome.exe on Windows from WSL, but hit a ECONNREFUSED error about a failed WebSocket connection. I tried workaround after workaround but couldn’t configure puppeteer-core to find a working executablePath. Third-level dependencies strike again! The final workaround is to install some X Window System tool off of Sourceforge. After losing two days to this problem and the answer is I need to download some budget app off of Sourceforge, I threw in the towel.

Workarounds for workarounds. I’m tired of workarounds. I fully acknowledge it could be 10+ months of the pandemic causing this feeling. I’m tired in general. Patience is wearing thin from the ambient stress of the pandemic and the utter failure of our government. I came to the realization that if I can solve one headache by chucking some money at it, then I should do that. I may regret that decision but I felt a palpable decompression of stress at checkout.

What I already miss about Windows

But Dave, Dave, Dave… aren’t you the Windows guy? Don’t you actually like Windows? Don’t you have a Zune tattoo? Yes. I do. Wait. Not the tattoo thing. But I do like Windows 10. It’s a bittersweet OS switch and I’m well aware of the tradeoffs. I’m already building a list of features I’m missing.

I miss touching my laptop’s screen. Mac users don’t understand this, but anyone who has used a Windows laptop in the last 5 years knows how intuitive and visceral it feels to tap your laptop screen to close a window, flick an app, or swipe away emails. I’ve already poked my screen a dozen times. Trading a touchscreen for a touchbar is a major downgrade.

I miss Windows Hello for logging in. I miss Windows’ superior first party window management3. I miss how my Surface Ear Buds would actually stay paired to the device and last all day (I say side-eyeing my Air Pods). Bluetooth on the Mac is a fickle mess. And oddly enough, I even miss having IE11 on my machine, because it’s extremely convenient to debug IE problems without opening up another computer.

I miss the modern Windows 10 UI. Windows 10 is a squared off, typographically-driven UI and fits my personal aesthetic. I prefer it over the primary-colored nature of macOS, which I affectionately call “Cartoon OS”. The iconography is vibrant but lacks cohesion. System Preferences is a weird mess. And I would pay another $1,000 to remove the rounded corners in Big Sur. macOS has tread down a path and is all cards, everything is a card.

I miss Segoe. Probably going to offend some type nerds here, but San Francisco is too squatty. I also find macOS’ 1× type rendering pales in comparison to Windows’ type rendering. Type looks great on 2× but at 1× it’s too bold and looks like a lossy JPEG.

I miss telling my coworkers to not send me .Pages, .Keynote, or .Sketch files.

I miss scrolling with a mousewheel and not feeling like a second class citizen. macOS nudges you to own a Magic Touchpad, which I like, but I also like my ergonomic mouse. God forbid I want to use natural scrolling direction on a trackpad and inverted on a mousewheel. Windows seems to understand peripherals that better than macOS. Accessory-wise, I’m left feeling pushed to spend another $500 on a keyboard, trackpad, and single cable dock to appease the Apple gods.

Above all, I miss PWAs as a first-class citizen. Windows betting on PWAs filled me with a sense of pride. Apple doesn’t appear to have the ambition nor incentive to make PWAs a reality, but hey, I’m willing to be surprised. I guess I’ll use Electron apps while I wait.

What excites me about Mac

I’ve offered a lot of criticisms. I’m sure there’s workarounds or whatever, but again, remember, I’m tired of workarounds. To balance those criticisms out, here’s my shortlist of Mac things I’m excited about.

Quality 3rd party apps! It’s no secret that a lot of design talent and innovative utilities happen over in the Mac ecosystem. I’m looking forward to trying out all the Sindre Sorhus apps, the nice-looking accessibility tools, and the quality photo editing utilities enabled by Apple’s Core Graphics. I’ve heard good things about Setapp and it appeals greatly to my interests.

Sidecar is pretty compelling as a optional ad-hoc display. For ergonomic reasons I want to migrate to a single ultrawide display but I love having a dedicated (non-ultrawide) display for screensharing on calls. Sidecar meets that desire and lets me get more value out of that iPad I bought last year. Right now Sidecar eats all my Wi-Fi to the extent it isn’t practical for screensharing on calls, but will need more experimentation on that.

The M1 hardware has a lot of potential as well. The nerdy PC YouTubers I watch seem smitten by the hardware and I think it will be years before Qualcomm catches up, so I’m happy to hop on the wave. I do worry I’m trading one set of workarounds for another with the new Apple architecture, but I have a couple thoughts on that…

  1. I’ve lived through this a couple times before. When I switched to Mac in 2002, Apple was going through an awkward OS 9 → OS X migration. Then I lived through the PowerPC → Intel migration around 2006.
  2. I think a lot in trajectories. I feel Apple’s software has somewhat plateaued, even their hardware design has plateaued, but these chips… these new chips are something magical. At ~5 hours into this battery, I’ve installed all of God’s earth and I’ve spent ~30% of my battery.

The relentless focus on battery life reminds me of an image I made the last time I had to use a Mac:

Steve Jobs saying “Battery is the most important thing. Otherwise people will complain about their fucking iPods.”

Switching to ARM is a big deal for Apple; they’re all-in. I’m hopeful the new shiny fetishists in the Mac ecosystem will iron out the problems soon. And to answer the question: Yes. I did get puppeteer-core working on that project. I have to use Intel bindings via the legacy Rosetta terminal, and I hit timeouts when running the tests, but all tests pass when watching the project. One more wrinkle to iron out I guess.

On giving up.

This post has end of an era vibes for sure. I enjoyed being a Windows user and I have a lot of identity wrapped up in that. There’s some shame and embarrassment in letting go of that. There’s this old episode of Freakonomics called “The Upside of Quitting” that advocates for overcoming the sunk cost fallacy and moving past the idea that quitting is some kind of moral failure. I’ve been thinking about that a lot.

I still like Windows. If Windows is working for you that’s awesome, I hope it continues to do so. I think I hit a weird seam in the support matrix and I’m out of patience to wait for it to resolve. I’m headed into a season where I have to push the ball forward. In the past I found it worthwhile to find those seams, struggle to fix them, but now… now I’m just tired. Those burdens can’t be my burdens any more.

Thanks to Rey Bango and all the folks over on the Edge team for helping me navigate Windows issues over the years. And thanks to the WSL team for moving mountains and making the last 5 years possible. I couldn’t have done it without everyone’s support, input, and internal escalation. Some true heroes work at Microsoft and they are great at listening.

My final thought is not too different from my very first takeaway from five years ago: While the Web is Universal, the tools are not. I still feel it’s important that our tools and our processes work on computers different than our own. I’m fortunate enough that I can afford one of these aluminum computers, but not every one has that privilege. Tools failed me this time around and I had to change my life to maintain progress. I know ubiquitous support is hard, but it’s so so so important for the Web that we keep the doors open and meet people where they are, meet them on their devices.

  1. Windows’ Mail and Calendar got patched in the latest Windows 20H2 patch

  2. After complaining on Twitter, I heard from Canonical that the snap issue has a fix in the works.

  3. I know there’s third-party window managers and even first-party workarounds, but Windows’ native manager is way better and faster.