My portable ergonomic setup
Monday, June 3, 2024
In 2022, I developed nerve pain in my arms. It came on quickly, and it was bad: I couldn't drive, I couldn't type, and at the worst I couldn't pick up our kids. That episode spontaneously resolved after a couple of months, but flareups happen occasionally. One guaranteed trigger is my laptop: if I use it as, well, a laptop, then I'll have pain for a few days from less than half an hour of usage.
Despite all that, I'm more confident than ever that I'll be productive as a programmer for decades to come. That confidence comes from having to deal with these issues. They've forced me to learn some accessibility tech and get/create some equipment so that I can program without pain.
Here's my setup, as of 2024. This is a snapshot, as it will surely change over time as my needs and abilities change. I hope that this can be useful for folks out there struggling with the same things I did. There's some background to go through first, then a rundown of how I made it portable.
Finding a non-portable keyboard my body accepts
I love mechanical keyboards. The tactility of the switches, the sounds, it's a wonderful part of interfacing with a computer. I got about half a year of that after my nerve issues resolved before the pain returned.
When it returned, I did some research on different ergonomic options. There are a lot of good options out there, and they're all expensive to experiment with! I ended up choosing the Keyboardio Model 100 for a few reasons. It was highly recommended by folks with similar issues, it is a split keyboard, it supports tenting1, and the keys are column-staggered to better match how your fingers actually work.
This keyboard has been a joy.
The palm keys and thumb clusters are wonderful, and using my palm/thumb for layer switching is really intuitive and allows me to avoid far stretches.
I have a lot of special characters (like some of the programmers' punctuation, {}[]
) on that layer, plus mouse functionality and arrow keys.
The thumb cluster is all easily accessible with a sweeping motion of my thumb.
Using it with a small degree of tenting from the default kit resolved my pain again!
(Yes, my toe is getting sore from kicking that can a lot.)
I oscillated between using it split or together for a while. Now I exclusively use it split, but I have a picture from early on where it's not split. I like having it split, especially since a coffee cup fits between them, but when I was still figuring out portability, clipping them together seemed appealing.
I take this keyboard with me when I travel. It's flown from Philadelphia to Seattle, it's driven across multiple states, and it took a train to NYC. It's wonderful—and it takes up a lot of space in my luggage.
I kept relapsing by using my laptop as a laptop because it's so convenient, and I don't want to always be at my desk. So I had to figure out how to use this keyboard portably if I want to be able to type for decades more2.
Figuring out how to make this portable
I made a lapdesk of sorts for my keyboard, with a laptop riser on it. It was big and bulky, but I could use my laptop in our living room, which was a minor success. But since it was so heavy and bulky, I couldn't leave the house with it.
This came to a head with Never Graduate Week, the annual alumni event for the Recurse Center. It's a gathering of computer nerds, and I wouldn't be able to take my laptop up and use it? No, no, it was time to fix that. And I realized this a week before my train to NYC. Tick tock3.
My design goals were to make something that:
- fits in my backpack
- supports tenting my split keyboard
- holds my laptop screen at a reasonable height
- takes moments to setup
I started by revisiting some posts about other people's ergonomic setups. In particular, I found a lot of inspiration from Peter Lyon's laptop tray and from Laura Langdon's keyboard setup. Peter's post showed a clever way to get the screen height up: with a 180-degree laptop hinge, you can stick the laptop in a vertical slot and it is its own riser to a decent ergonomic height. This comes with big weight savings, since you need a couple of ounces of wood instead of much more material for a "real" laptop riser. Laura's post showed me a clever way to mount the keyboards themselves using Z tripod mounts!
My design here was not sophisticated, and I took an approach of figuring it out as I went (as I do with many practical workshop projects). I went in with basically just the constraint of dimensions, since it had to fit in my backpack, and available material. I purchased some Z tripod mounts for tenting the keyboards, and the rest of the hardware was scrap wood I had in my workshop from other projects.
The first thing I did was get the base cut down to the largest size that would fit in my backpack. It's harder to put wood back together than to cut off more later on. Then I used a router and straight edge to cut some slots for the tripod mounts to attach to. There are two sets of these, because I forgot to account for the keyboard's USB cable the first time... or maybe it was just a clever way to get the whole thing lighter. Who knows!
After that, I attached some wood for the back half of the laptop slot. I didn't want to plan and iterate as much as Peter did, so I opted to make an adjustable slot rather than go for a precise fit. There's a fixed piece of wood across the back, a wood strap on the front, and some bolts allow tightening or loosening it to put in and take out the laptop. It's reasonably easy to get the laptop out—under 15 seconds in either direction—and the laptop is very secure in there when it's tightened in.
The nice-to-have thing I added was a USB hub with power pass-through, so I can use one cable to attach all my peripherals to my laptop (currently, a mouse that I rarely use and my keyboard). I can also use one cable to attach all my desk peripherals, like my webcam and monitor, when I sit there. And because the tray is so small and pretty light, I just use it at my desk, too. I switch up the position I use it in, so sometimes it sits on my desk and sometimes I have it in my lap.
And it did achieve the primary design goal of being portable. I've used it on an Amtrak train, in a church basement for a chess tournament, and all around my house. It's going to get a lot of miles traveling around with me. The weight is a potential snag: fully loaded it's about 8 pounds. 2.8 pounds for my laptop, 2.8 pounds for the keyboard, a pound for the Z mounts and hardware, and about 1.5 pounds of wood. There's not a lot to shave off here and it's doable, but it's still not as light as a laptop alone!
Not bad for a three hour prototype4! Of course, it's still "just a prototype," so like all prototypes, it's going to be used as the production model for far too long.
As an added bonus: social interactions! Most people completely ignore the lady with the weird contraption in public, so you don't have to worry about your Amtrak neighbor talking to you. Unless you happen to sit next to a Recurser, or another computer nerd. Because let me tell you, there is no better conversation starter than this thing among RC folks. The whole time I was up there, I would hear variations on "oooh what is this, tell me about it!" It was wonderful.
Coding by voice
Of course, my arms gave out so totally in the past that I'm not assuming they'll always be here to write code for me. What's a girl to do? Find other input mechanisms, that's what!
During my first major round of RSI pain, I learned how to use Talon, software for controlling your computer entirely by voice. It's pretty amazing software, and it gives me so much confidence knowing that it's available when I need it. During that first round of pain, I got back to where I could "type" at about half my previous keyboard speed. That made it not really a limiting factor, though the cognitive overhead of it was still high.
The thing is, my arms send warning shots sometimes. "Nicole, remember that we can hurt or fall asleep whenever we want." So Talon is coming back into my workflow. I'm not going to code by voice all the time, but I'm going to work up to quarter- to half-time Talon usage. I want to hedge and have more input mechanisms.
Besides, a microphone is a lot more portable than my whole contraption here.
Right now as I get back into it, I'm experimenting with using a bluetooth IEM that has a microphone in it. It's not really the recommended setup, but so far it's been having good accuracy for me, so I'll go with it for now! A wireless mic is really nice to have with Talon, because you can move around freely, away from your computer even, and continue to enter text.
I'll never forget the first time I wrote code with my whole desk empty in front of me, available for coffee and notebooks... <3
If you have a rad portable ergonomic setup, I'd love to hear about it! And if you see any obvious improvements to my setup, please let me know. I want to be writing code as long as I am alive, and that means either dying young or coding into late life. I'd much prefer the latter.
This was a new term for me when I started this research! Tenting a keyboard is you tilt the halves of the keyboard up (so they look sort of like a tent), which should make it so you don't have to rotate your forearms, or not as much.
I have over 30 years of jobs left in me before the standard US retirement age, but I'm not banking my career on the assumption that I'll be typing for that entire time. That's why I'm also preparing for other contingencies, like using Talon!
This is the sound of the clock ticking on my opportunity to enjoy computer use around other computer people, not to be confused with the app that's been deemed a national security threat for... reasons.
If you have a name for this category of device that holds both the keyboard and the laptop, let me know! Serious and outrageous suggestions are equally welcome.
This doesn't count the time spent acquiring the skills and tools to be able to quickly prototype this, which took the past decade.
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts and support my work, subscribe to the newsletter. There is also an RSS feed.
Want to become a better programmer?
Join the Recurse Center!
Want to hire great programmers?
Hire via Recurse Center!