The Surface Go for Developers
I write this post on my flight from Toronto to Seattle on the way to KubeCon. It is the first time I’ve flown with my Surface Go, and after tweeting about it quite a lot recently, it gives me the motivation to write a brain dump on why I like it. [edit: scrolling back after writing this post, I see that’s it very long – I might plan to shorten it sometime!]
Before I continue, the first question most people might ask is “what do you use it for?”. The answer is simple: Linux, Code and Content.
Linux
I bought the Surface Go as a personal machine. I use a MacBook Pro 13” for day to day work at Microsoft and, although I like macOS a lot, Linux is a non-starter on that hardware. At a minimum I would want the ability to boot from a USB drive and have the keyboard work – which it doesn’t. I’ve joked in the past that the best way to run Linux on a recent MacBook is to install Windows and run Windows Subsystem for Linux on it.
The first thing I did after I bought my Go was install Linux on it. And it works! Let’s not worry about custom kernels like jakeday/linux-surface for a moment. The only thing I had to setup after installing Ubuntu was the Wi-Fi driver. I chose Ubuntu because I like it and, unlike Debian right now, it supports Secure Boot which lets me continue to dual boot Windows 10.
I picked the 8Gb RAM/128Gb HDD spec for my Go. The hardware is performant for what I use it for: Visual Studio Code, Google Chrome, and Containers.
Windows 10 can provide me an almost identical experience to Linux or macOS when I use Visual Studio Code, Google Chrome, and Ubuntu via Windows Subsystem for Linux (WSL). Code’s Integrated Terminal gives me near parity across macOS, Linux, and Windows. While I did need to install “full” Windows because Windows S won’t run Code, Chrome, or WSL, I feel this makes sense for power users and there is no discernable speed difference after making the switch.
Windows Subsystem for Linux works especially well for bash, the Azure CLI, and the Linux tools I use for the cloud. While WSL handles these tasks well, I often prefer to develop inside containers when working with certain Go, python, Java or other projects and the ability to run Containers without VMs and with native performance is a key reason I run Linux on the Go and dual boot Ubuntu.
Code
Now that I have my favorite tools it is no longer just a fancy tablet. Since I typically build small web services and CLI tools, so I can’t comment on whether Visual Studio or a mobile development toolchain would be as smooth, but it does work well for my use cases.
Do I build Kubernetes locally on the Go? No, and I haven’t tried. In order to do these things as fast as I like, I often offload those types of tasks to a Virtual Machine or Container Instance in the cloud. And on the Go that is just as fast.
One piece of advice I’ve taken when running the Windows Subsystem for Linux on Windows 10 is to exclude it from Windows Defender. Package managers (apt-get, go get, pip install, and many others) are just faster with it off. Of course, I don’t have this problem on Ubuntu.
Content
Finally, the Surface Go is a great machine for writing content as well a code. I needed something I could take with me wherever I go, and it truly is “grab and Go”. I can recommend it to travelers and anyone who finds themselves on the move a lot. I can only imagine how useful it could be for engineers who are on-call. I find that carrying a 1lb machine rather than a 4lb machine makes a huge difference.
My primary content workflow uses Visual Studio Code, Markdown, and GitHub. I haven’t used the Go with massive Word documents, and Google Docs are slightly smoother on my MacBook Pro, but I don’t feel a huge decrease in performance.
Granted, I don’t do heavy multitasking with hundreds of Chrome tabs open. I haven’t tried to sign into a dozen Slack communities (did I mention I wanted to be productive?). At the end of the day, whether code, content or communications, most of my work involves reading and writing text of some kind.
Why do I like it?
Portability, portability, portability! This device is impressively small. And I continue to be amazed when I consider the power we pack into its form factor, and the fact that it really can be enough.
Stuck waiting somewhere? I can be working. I’ve been more productive on this one flight than I have on many beforehand. I feel as if I can type easily as fast, and perhaps faster, when trying to use it in a confined space like an airplane tray table.
Is the smaller keyboard an issue? Your mileage may vary, but not for me. I find the keyboard feels nicer than the Surfaces I have used in the past. It is also much quieter than the MacBook Pro’s butterfly keyboard which, along with the fact that the Go is such a diminutive machine, makes it less intrusive to use in social settings. Another pleasant surprise was that the Go does work as a laptop without having to rest it on a flat surface.
I am not a connoisseur of cases, but I recently bought a Connect Tech Bag from Eddie Bauer which fits the Go perfectly. I’d love to hear more from people who have found good cases for their Surface Go. And I’ll be collecting recommendations, tweets and other articles I encounter at the end of this post.
Conclusion
Is it a daily driver? Undoubtedly yes, but not by itself. I consider it a portable productivity booster. And it does boost my productivity enough to warrant having a second machine. A budget-conscious student might justify getting a Go as their only machine instead of something like a Surface Laptop 2, but I won’t realistically force myself to use the Go for everything I do on my MacBook today.
I miss the giant trackpad on my MacBook Pro, but not as much I thought I would. I love the MacBook Pro 13” as a daily driver for work. The only thing I hate is the butterfly keyboard – which still suffers from the dust issue in the latest iteration. And though if I had to choose a Mac again today I’d likely pick the MacBook Air 2, but there’s enough that makes me nervous about Mac that I need a viable alternative, and a backup when I’m on the road.
What else do I miss? The Surface’s camera doesn’t work with Linux yet, but I have Windows 10 for that. I wish it had better battery life, because the MacBook feels like it lasts forever. Windows 10 has better power management than Linux (Ubuntu, in my case) “out of the box”, which is often what causes me to use Windows Subsystem for Linux over the dual-booted Ubuntu. Windows 10 also supports Hibernation, while Ubuntu only supports sleep, and one really should Hibernate rather than Sleep to conserve battery. I carry at Anker PowerCore+ 26800 for my phone (a Google Pixel XL) and other devices. If you go places where you’ll be without power for a long time, treat yourself to a Power Bank with Power Distribution (PD) for USB-C (the 26800+ without won’t work). The Surface Go has a single USB-C port which can power the device, which is enough to make Surface Laptop 2 users jealous.
The Go is a capable backup machine that I can take when travelling in addition to my MacBook. Its price makes it easy to recommend as a second machine or to anyone on a budget.
This brings me to one last consideration. A high-end Chromebook such as a Google Pixelbook, or the newer Pixel Slate, might be considered a “competitor” to the Go. These are great machines and the Pixelbook is loved by everyone I know who owns one. I have seriously considered buying one ever since support for containers landed, but for me their cost makes them a competitor to the MacBook Pro rather than the Surface Go. Even the Pixel Slate is expensive enough that I’d compare it with the MacBook Air 2 when the time comes. In the meantime, the Surface Go fills the gap, very portably, and at a lower price point.
Many of my team members, including many full-time macOS and Linux users, also love their Surface Go’s. All of us bought them as personal devices, not paid for my Microsoft. I even managed to convince Brian to buy second for the LTE alone, which I can highly recommend if you are considering one today. And while we are biased, we aren’t paid to say this since we work on Azure. To wrap up, I’ll include some links to tweets, posts, and other reviews I’ve found along the way:
- Brian Ketelsen (@bketelsen): https://twitter.com/bketelsen/status/1026117701259931648
- Brian Holt (@holtbt): https://twitter.com/holtbt/status/1059505852737114113
- Anthony Chu (@nthonyChu): https://twitter.com/nthonyChu/status/1079844177263742976
- Brad Anderson (@Anderson): https://twitter.com/Anderson/status/1085966024447385600
- Surface Go with Linux Review: almost the perfect open source notepad (slashgear.com)
- Microsoft Surface Go with LTE review: the best netbook (theverge.com)
[Update]: Shared via Twitter. Would love to hear any feedback you have, and my DMs are open, as always!
The Surface Go for Developers https://t.co/KoBBFDMgXG by @as_w. @surface
— Aaron W 🇨🇦 ☁️ 🥑 (@as_w) February 11, 2019