The ARM powered Thinkpad x13s, as a developer

The ARM powered Thinkpad x13s is the first truly premium Windows on ARM laptop. Let's see how that actually stacks up as a software engineer!

Picture of my Thinkpad x13s

The long and winding intro (That leads to your door)

So, you're a software engineer who loves Windows (We exist, I swear).  More than that, you're a software engineer who loves being able to work detached from a desk, free to work in coffee shops, on busses, out at a park, or really wherever your heart desires at any given moment.  You know you COULD switch to a Mac laptop, such as the Macbook Pro with an M-series chip, to get that sweet, sweet battery life you desired, but either you need to work in the Windows ecosystem or maybe like me you just don't like MacOS.  What do you do?

So, you start by looking around at laptops.  Microsoft's own Surface Laptop Studio sure sounds slick, but the battery life is atrocious.  Same for the Framework laptop, even though you'd love to support the company.  There are some Asus laptops that seem like they'd fit the bill, but they're just so clunky and large, which gets in the way of the portable dream.  That's when you see it:  A new Lenovo that claims insane 28-hour battery life, all in a thirteen-inch form factor.  That is EXACTLY what you need!

You order it without reading too much into it and wait for it to show up.  The day finally arrives, and the small brown box opens to reveal a slick little black-ish (Maybe more of a dark gray) laptop, a 65-watt USB-C charging brick, and precious little else.  You boot it up, set up your account, and start looking through the specs.  32GB of RAM, Snapdragon 8cx Gen 3 processor, 1TB NVMe SS- wait what was that last one?

Oh right, as it turns out this slick little device runs Windows on ARM on the latest Snapdragon processor, the Snapdragon 8cx Gen 3.  "Well fuck," you say disappointedly, "That might be a problem.  Do my development tools even run on this OS?  What about git?  Am I going to actually be able to compile code on this?"

Well fear not, imaginary developer, for I have already bought this device to use as my own development machine, and I want to share with you what I've discovered in my exploration of the device.  While this isn't my first WoA powered device (I've been a long-time user of the SQ1 Surface Pro X and the Galaxy Book2 before that) this is the first one I've really bought for the express purpose of software engineering.  I want to dive into the pros, the cons, and just my overall impressions about the Thinkpad x13s, Windows on ARM in general, and life as a developer on one of these machines.

Introductory statements

A few things to note first and foremost:

  1. I primarily work in the JVM language space.  My preferred language (and the one I use in a professional capacity) is Kotlin.  I also have over a decade of professional Java development under my belt.  The JVM and its languages are what I know and where I do my work.  I will do my best to speak to development using Windows native languages like the .net suite, but my scope there is limited.
  2. I enjoy using Windows, but I'm not tied to it.  Most of my professional life involves Linux rather than Windows, and most of my engineering effort takes place in WSL2.  That being said, I spent many years before WSL ever launched running everything on just Windows.
  3. Straightup, I very much enjoy this laptop, but I will not mince words with the issues I have with it.  There are a number of glaring issues with the device that people need to be aware of, and most reviewers looking at devices like this are not software engineers and will not run into these issues.
  4. This is a long-term review, following nearly a year with my own personal Thinkpad x13s device.

OK, now that I've gotten a lengthy and boring intro out of the way, along with some overly long introductory statements, let's start actually reviewing this thing.

About my device

Ah, ok, wait, no hold on, one more thing, we should probably actually go over what device specs we're looking at here so we can be clear about what we're talking about.

Component Spec
CPU Snapdragon 8cx Gen 3 (3.0 GHz)
Storage 512GB SSD M.2 2242 PCIe Gen4 TLC Opal
Memory 32GB LPDDR4x 4266MHz (Dual Channel, Soldered)
Battery 49.5 Whr
Display 13.3" WUXGA (1920 x 1200), IPS, Anti-Glare, Touch, 72%NTSC, 300 nits, 60Hz, LED Backlight
Graphics Integrated Qualcomm Adreno 690 Graphics
Camera 5MP RGB+IR with Microphone
WLAN Qualcomm Wi-Fi 6E WCN6855 2x2 AX & Bluetooth 5.1
OS Windows 11 Pro on ARM

Hardware

OK, let's talk about the hardware feel and build quality of this thing.  The x13s chassis is made of 90% recycled magnesium and covered with a soft-touch black paint (I think?  Maybe a polycarbonate?) layer.  The keyboard has very little flex and is reasonably sized.  The laptop screen is a 300-400 nit matte touch screen with a pair of hinges that very easily pass the one-handed open test.

The keyboard itself is very similar to the Macbook Air, both in size and feel.  As is typical with Thinkpads, the track point and physical mouse buttons join the keyboard layout, which is useful for a certain kind of person.  Personally, I prefer the touchpad, which is of a reasonable size.  Certainly, the touchpad could be bigger, but the aforementioned physical mouse buttons take up space below the keyboard that could otherwise be taken up by a bigger trackpad.  Additionally, the trackpad is just slick plastic rather than glass, which is a shame especially considering the price tag of the laptop, but we'll come back to that.

The screen on mine is the 300-nit touchscreen variant, which runs at 60Hz.  Color-wise it's. . . fine, covering only 72% of the NTSC color gamut.  Definitely not amazing, it's not something I'd ever recommend to someone who is doing photo or video editing.  The 60hz refresh rate feels like a 60Hz refresh rate.  If you've ever used a 90 or 120Hz display, you'll know what I mean.  As with the plastic trackpad, the price of this laptop really demands better on this front.

In terms of I/O, we have two USB-C 3.2 Gen 2 ports (with display out), a 3.5mm headphone jack, a Kensington lock slot, and an optional SIM slot for the on-board 5G radios.  I don't have the 5G enabled version as it wasn't available when I bought mine, which I do regret, but if it's even half as good as it is on the SPX then it'll be totally fine. Additionally, the onboard wifi is 6E which is a nice addition.  All in all this isn't terrible I/O.  People get too caught up in laptops missing USB-A ports, but for a travel-focused device I don't really see the appeal.  Maybe it's my software engineer talking, but I haven't used a peripheral on a laptop that wasn't USB-C or Bluetooth since the mid 2010s.

In general, the laptop feels good to use.  The magnesium chassis feels cool to the touch and solid at the same time.  The keyboard is comfortable to type on with good key travel.  The track point, mouse buttons, and trackpad are all good enough.  The screen works fine in daylight, though the low nit count requires using light mode rather than dark mode to compensate.  All in all, it's a nice little package.

Software compatibility and Emulation

Easily the biggest question everyone is going to have about this laptop is "Can I run the software I need?" Given the ARM nature of the laptop that's a completely reasonable question to ask.  I, obviously, cannot speak to every piece of software ever written, but I can talk about the good and the bad that I've seen.

We'll start with the restrictions.  Unlike a traditional laptop, the x13s uses an ARM64 processor, meaning that nearly all software written for Windows in the last 30 years won't run natively on it.  To compensate for this, Microsoft has two emulation layers in place to translate traditional x86 and x86_64 machine code to ARM64 machine code.  There are limitations here, of course.  Emulation is inherently slower than native code, there isn't any way around that.  Secondly, the emulation layer is user-space only meaning drivers can't be emulated, so anything that relies on custom drivers is a no-go unless they've been recompiled for ARM.  The final note is that OpenGL calls are translated to DirectX calls, but that only goes as far as OpenGL 3.3, and Vulkan is right out.

In terms of actual performance of the emulation, we're going to avoid hard numbers and talk more about "feel," because most of that time that's what you're going to experience.  There are really 3 groups of programs that we need to talk about, and each one is going to have a different experience as they make use of different elements of the emulation.  There are "office" applications, these are things like Slack, Outlook, or Chrome.  Then there are "Performance" applications, for us software engineers these are going to be things like our IDE, compiler, database software, etc.  Finally, there are "GPU-intensive" programs, which generally means games and photo/video editing, but can also mean GPU-reliant libraries like Tensorflow.

For "Office" applications, 8 times out of 10 you won't even realize you're not using a native program.  Most of these applications don't rely on anything CPU or GPU-intensive and once the code is cached in the emulation layer it'll run basically without issue.  However, those remaining two times are going to be painful.  Chrome and Slack are great examples of this.  Chrome is slow and frustrating to use, with delayed animations and noticeable input lag, it's such a frustration that I entirely gave up on Chrome in favor of Edge which runs natively (Though for those who want to avoid Chromium in general, Firefox also has native ARM64 Windows builds).  Slack is frustrating in its own way, running fine one second, then freezing for 10-15 seconds at a time, usually when switching to a new conversation or channel.  To make matters worse, Slack from the Microsoft Store installs as x86_64, which makes the problem significantly worse for whatever reason.  If you need Slack either download the x86 version directly from their website, or run it as a browser tab.

"Performance" applications are more of a mixed bag.  As a JVM focused developer, I primarily use IntelliJ as my IDE so I'm going to focus on that experience.  Luckily, this works out because Jetbrains has, in the last few months, released ARM64-compatible versions of its products, including IntelliJ.  As such I've used the x86 emulation version, a hacked together ARM64 solution using an ARM version of Java, and the fully native solution.  The difference here is night and day between all three.  The emulated version ran, and that's about as much as I'm willing to give it.  It worked, you could open/compile using it, but it wasn't pleasant, and larger projects were noticably slower to interact with and navigate around.  It also wasn't able to access WSL, meaning I was locked out of using Linux tooling all together.   The hacked solution was immediately better, but like the emulated version, it wasn't able to access WSL, and it required a fair amount of extra setup to even get working that most users (even other software engineers) wouldn't have even known to do.  The native solution solved these problems entirely and runs so well that you'd never know it wasn't an Intel/AMD machine.

But like I said, it's a mixed bag.  Other tools, such as MySQL, node, git, etc. have no issue when running under emulation, at least in the context of development (I doubt I'd say the same if I was running production using emulation).  Most of the time you won't even realize these are emulated! A good rule of thumb is "If there isn't a UI, the performance is going to be on-par with a native build."

Finally, "GPU-Intensive" applications are. . .  not great.  There does exist a Tensorflow library aimed at ARM platforms that you can import, but it's not official so you're at risk of that falling through.  Other GPU intensive tasks like video and photo editing either lack support (I don't think there is a single high-quality video editor with Windows on ARM support) or are a nightmare to use (Photoshop has Windows on ARM support, but it's glitchy as hell).  Games are almost entirely out, though I won't say 100% out.  Starcraft 2 runs, but you wouldn't want to play beyond the 4 minute mark.  Demeo on the other hand runs incredibly well to the point where they demoed the game at PAX on the x13s. At the end of the day the emulation works for GPU intensive apps, but not with enough consistency or performance to recommend those things.

Long story short, if you're using GPU heavy workflows you're probably going to be fine.  More and more development tools are making their way over to being ARM native, but you should absolutely check if yours are before you commit.  I should also mention that Visual Studio Code does have an ARM64 release, which would likely cover just about everybody in a pinch.

One thing I should note here is that this is really a Qualcomm problem rather than a Microsoft problem.  The emulation layer is actually quite fantastic, and when you Windows on ARM on an M-series Mac you don't see most of these issues.  Honestly, Microsoft has done an incredible job with their emulation layer, and I have to commend them on that.

Native Performance

The performance of native applications, as I've already alluded, is totally fine.  Geekbench and other benchmarks will tell you that the Snapdragon 8cx Gen 3 is at best on par with an anemic i5, but in practice I don't think I've ever noticed performance problems with native applications.  Intellij, Edge, Spotify (Beta), WSA, WSL, and many other ARM compiled programs run without any issue.  Far and away, my experience with the performance has been very positive, and hasn't impeded my software development experience in the slightest.

On top of that, more and more development tools are becoming available for Windows on ARM.  For example, Java has had native builds for nearly 3 years now, and Node got Windows on ARM support as of Node 20.  While the performance bottlenecks of these pipeline tools has been minimal, the more tools that move over, the better off we'll all be.  As I mentioned before, Visual Studio Code has been ARM64 compatible since 2020, and Visual Studio since 2022, so between those and the Jetbrains suite of IDEs most every major language has at least one native IDE now.

Battery Life

OK, so what about battery life?  I started this whole post off repeating Lenovo's claim of a 28-hour battery life, so does it actually live up to that?

No, of course not, not in any meaningful way.  As with all battery life claims, the 28 hours is under extremely specific conditions.  In the real world, though, the battery life is still impressive!  Much of my job as an engineering manager is spent doing admin work in Jira and taking Zoom/Meet calls.  On those days I get around 8-10 hours or so of battery life, though the video calls cut into that severely.  On days I'm doing development work, I get closer to 5-6 hours.  This is significantly better than the 2 hours of development work or 3 hours of admin-only work I get on my Framework (11th gen, 55wh battery).   As with all things battery life, your mileage may vary, especially if you're toolchain is dependent on non-native code.

This might all sound like a kick in the teeth considering the 28-hour promised battery life, but it's a day an night difference against most Intel/AMD machines, and lines up with my experience doing dev work on an M1 Macbook Pro.  It helps the device feel like a truly portable work device.

Issues

Now it's time to talk about the less pleasant aspects of the x13s, though honestly it's nothing we haven't touched on before, and they all really come back to one thing: The Thinkpad x13s is mad expensive.

How expensive, you ask? At the time of writing the cost of a same-spec x13s as mine has a price tag of $2466 USD.  Bumping that up to a 1 TB SSD takes the total cost to $2898.00.  That's a high price tag, even for high-end Intel/AMD Windows machines.  The Surface Laptop Studio with an i7 and 32GB of RAM and 1 TB of space is $2699 (2199.99 on sale!).  To compound that, the device lacks the high-end features one would expect from a device at this price point:  Low max brightness, mediocre NTSC color gamut, plastic track pad — all of these are more in line with an $1200 price tag, not twice that!

Luckily (or perhaps shadily), you will rarely ever pay the full price for the Thinkpad x13s.  As is tradition, Lenovo seems to be perpetually running deals, taking up to 40% off (at time of writing, 45% time of purchase), bringing the laptop to a much more reasonable $1479.60.  That's still a high price tag for the device, but much closer to reasonable.

For a quick comparison, a Macbook Pro 14" with an M2 Pro processor, 1 TB of storage, and 32GB of RAM clocks in at $3099.00 (Edit: At some point after I published this, the prices reflected on Apple's site changed.  This may have been due to some failure on my part when I wrote the article, but the accurate price for a 1TB 32GB RAM M2 pro is $2599.00.  Thanks to justinclift for the correction!).  A refurbished Macbook Pro 14" with an M1 Pro and 1 TB of space comes in at $1999.00 at the low-end.  While these undoubtedly out-perform the Thinkpad x13s, it's hard to argue that the performance difference for most users, even engineers, is worth the extra $500.

Round-up

So, where do we land here?  We have a device with well above average battery life in real world conditions that, when running native code, is indistinguishable performance wise from your average Intel/AMD fair, and is perfectly capable of being a full-time software engineering machine for your average full stack web developer.  It struggles with GPU tasks that aren't ARM optimized, lacks the power needed to really push through on more complicated emulation tasks, and lacks the premium fit and finish you would expect for a device that costs nearly $2500.

At the end of the day, this is a niche product that is best aimed at people who believe more in "Work from Anywhere" than "Work from Home."  If you're a coffee shop warrior, or someone who believes that anywhere can be their office this might be an ideal companion if you'd rather not hop the OS divide to Apple.  That's definitely the case for me, and I would happily recommend it to people who are tech-savvy enough to troubleshoot and work around issues, and patient enough wait for developers to produce native binaries when needed.  But I will be the first to admit that I would not give this a general recommendation.  There are enough rough edges left with Windows on ARM, especially when paired with the current Snapdragon series of processors, that it's still not the right solution for most.