Note: Like always, these are my personal experiences, and don’t reflect the opinion of my employer. I refrained from commenting on my experience with Edge in this post due to being biased (working on Chrome stuff) (but my comments would have been mostly positive).

I’m typing this blog post on my new Dell XPS 13 laptop, a laptop that easily beats my MacBook Pro: Kaby Lake CPU, superior screen, touch enabled, incredibly thin bezel and form factor, USB C / Thunderbolt + USB 3 ports, on-par battery life and trackpad. This is the best laptop I’ve ever owned (nope, this isn’t a sponsored blog post). There’s just one thing. Windows.

There are many good reasons I switched from Windows to OS X many years ago and never looked back, but now seemed a great time to give Windows another try and see how it compares. Most of us in California have developed a huge blind spot for developer productivity (and pain) on Windows, especially apparent in the big room I currently sit in during the PWA Roadshow in Manila, where roughly 90% of the audience have laptops not running MacOS. I spent the last few weeks on Windows for at least a few hours a day. Here’s what I learned.

The Ubuntu bash…works fine!

Windows 10 now ships with a Ubuntu sub-system for developers that brings bash to Windows. When they’ve announced the feature I thought it can’t possibly work well, but it’s very surprising how far the team behind it got in the last few months. After updating to the Windows Insider “Fast” build, I’m able to throw almost anything at it: node, npm, git, you name it. I’m running a local version of AMPProject.org on this machine and already made some commits. The implications of this are huge, making it very viable for web development.

Very importantly, the latest Insider builds bring Windows/Ubuntu interop, meaning you can launch Windows executables directly from the bash. This allows for stuff like $ code ./ to open the contents of the current directory in VS Code (once you setup an alias).

Only weird thing is that you then can’t reuse the current console terminal as the process is running in it (as opposed to just dispatching the execution, and allowing you to return to the bash). I’m sure there’s a smart way to fix this minor annoyance, but I have no idea.

Missing apps: iTerm, Keynote, ImageAlpha, 1Password

The software I miss most, and that I haven’t found any decent replacements for yet, are the following:

  • iTerm, since the built-in bash is very barebone. There’s ConEmu, but it has terrible scaling issues (see below).
  • Keynote. Still IMHO the best software to build presentations, I might give PowerPoint another try but don’t have high hopes.
  • ImageAlpha, to crunch images to png8+alpha. Small tool but indispensable.
  • 1Password. There’s a Windows version, but it’s super outdated and doesn’t ship with Family/Teams support. (Edit: Looks like there’s a beta!)

Cut + Paste, maximizing windows and window snapping!

You know what windows do when you click the maximize button on Windows? This will be a shock to most Mac users – they …maximize! It’s a pretty amazing feature really. And built-in window snapping by moving them to the edges is super handy.

In addition, it’s very nice to move back from Finder to File Explorer, which has (imho) mostly better views and cut + paste (how I missed cut!). The one feature I prefer in Finder is the ability to quickly expand and collapse folders in a hierarchal way, to move stuff in and out of a folder (plus quick look was pretty nice).

Windows’ UI Scaling is a huge problem

This is by far my biggest issue with Windows. The way they support very high resolution screens is by offering what is essentially a zoom slider in the display settings: My laptop is set to 250%, which is the recommended, and maximum value. This is all fun and games until you notice microscopic tooltips when hovering icons in the task bar, a cute miniature VLC player, and tiny system UI in Chrome, ConEmu and many other apps.

OK not the worst, but all bets are off when connecting another monitor that uses a different scaling factor. My connected monitor uses a scaling factor of 100%, and depending on which monitor you declare as main monitor, many parts of Windows and apps are either comically huge or way too tiny. It’s so bad that apps like ConEmu simply approximate the locations of forms and icons, usually failing (Read their scaling support page).

Hidden in support forums on the web, you’ll find hacky solutions for some of these issues, but I’d like to stay away from these: My Mac has zero-config, plug and play multi-monitor and resolution support, and so should Windows.

Trackpad can be inverted, but mouse wheel cannot..?

What a nice surprise to discover that “natural scrolling” was enabled in Windows 10 by default for my trackpad, so it feels similar to MacOS. Unfortunately, for reasons that are beyond my understanding, this setting doesn’t apply to the mouse wheel, and there’s no apparent way to fix it. This is maddening, and more than a big nuisance for me.

Pre-Metro and Metro are still not fully unified

Windows 8 felt like the old Windows and new Metro Windows constantly battling each other. Windows 10 fares much better – the start menu is vastly improved and is a hybrid of the old start menu and the Windows 8 tiled UI, and Metro apps are not full screen by default any longer and have window controls like every other app.

But it’s odd that the Action Center and the Tiles in the Start Menu aren’t merged. They both promise to give you a quick glance with what’s happening. And too few apps actually show meaningful live tiles (or support the feature at all). And some settings appear in the flat UI, while others open ugly old-school dialogs (that often aren’t retina-friendly).

Conclusion: We can be friends again, but you have some work to do

All in all, I’m very positively surprised by how good Windows has become, and still is becoming. I can actually use this, even as a developer. There are still some significant issues, primarily a consistent UI and decent scaling/multi-monitor support, but Microsoft is getting there. Exciting times!