A programmer’s journey with RSI

In 2013, I began to notice a bit of discomfort in my hands while typing. I requested a mechanical keyboard at work, and that seemed to make a difference. I brushed the pain off and continued to spend countless hours hacking away at work projects, open source side projects, and my university capstone project. So far, so good.

Shortly after, I joined the team at DigitalOcean. During my onboarding trip to New York, I spent many long hours in the office ramping up on internal systems during the day, and hacking on side projects in the evening. I returned home at the conclusion of the 5-week trip, and began working remotely for the first time.

That’s when I first noticed that something was truly amiss.

Thanks, Fatih Arslan, for the opening image suggestion.

What is RSI?

After working remotely for some time at home, I began to notice a cold, dull feeling in my left hand and arm after a long day of work. Initially, I shrugged it off, but these episodes became more frequent over time. On top of that, I would occasionally feel a jolt of pain shoot up my fingers when I pressed a key with a bit of force. I have always been a heavy-handed typist, but I figured I could just lighten up my keystrokes to reduce the occurrence of the problem.

After dealing with these problems for some time, and the mental anguish that came alongside them, I decided to see a doctor. This is where I first discovered that I was facing a repetitive strain injury, or RSI.

What exactly is RSI? Wikipedia describes it as:

repetitive strain injury (RSI) is an "injury to the musculoskeletal and nervous systems that may be caused by repetitive tasks, forceful exertions, vibrations, mechanical compression, or sustained or awkward positions".

Unbeknownst to me, those countless hours of hacking away at a keyboard had taken their toll, and I was suddenly facing a long-term injury which had the potential to greatly limit or perhaps even end my programming career.

I was only 23 years old, and I was completely overwhelmed. What could I do to right my course and continue my career?


Dealing with RSI symptoms

I tried a wide variety of different approaches to deal with the symptoms and to improve my comfort while typing.

First, I tried taking more breaks during the work day. I tend to “get in the zone” when I’m working on something I find interesting, and this meant that I may spend long periods of time typing continuously. I tried to actively limit the amount of typing I would do in a single session, and I restricted my time on computers to working hours only. No more late-night hacking, and no more working on side projects on the weekends.

This seemed to work for a time, but it really bothered me that I could not spend more time working on passion projects due to the state of my hands. I tried a couple of other things, like therapy putty and using a hot/cool pack on my hands after work. These seemed to help a little bit, but I was later told to avoid therapy putty in my particular case. Finally, I forced myself to take some time off work, just so I could give my hands a rest.

But over the course of a couple of years, nothing seemed to make a dramatic difference. The physical symptoms of RSI caused me a lot of mental and emotional turmoil. It’s amazing how much of a physical impact your mental state can have on your body.

In 2017, I decided that enough was enough and that I would do whatever I could to be able to work comfortably and prolong my career. I booked an appointment to see an orthopedic hand, wrist, and arm specialist. After a couple of visits, I came away with some valuable insight on my condition.


Building an ergonomic workstation

To start, my work area at the time was far from ergonomic. There’s an awful lot to be said about the subject, but the basic idea is that you should maintain a comfortable, relaxed, and proper posture during computer use. This article from the University of Michigan covers many of the major points.

I have a decent office chair, but the rest of my workstation consisted of an IKEA table for a desk, a Das Keyboard 4, and a Logitech Performance MX mouse. The table was far too tall for use as a desk, and had no keyboard tray. The keyboard was nice, but I exerted too much pressure typing on it and (in retrospect) my wrist placement felt awkward.

I knew that the time had come to make a strong investment in my future, and began pursuing a more ergonomic workstation. I now use the following equipment in my every day work:

  • Uplift standing desk (~$1200): motorized standing desk with keyboard tray, a long warranty, and lots of bells and whistles. Expensive, but hugely beneficial from an ergonomic perspective. Comfortable to use while standing or sitting, with plenty of space for all of my gear.
  • Kinesis Advantage 2 keyboard (~$350): ergonomic, split, mechanical keyboard. I didn’t think I would ever get used to it, but after a month or two, it became a dream to type on.
  • Logitech MX Ergo Plus trackball (~$100): ergonomic trackball with a stand that allows it to be tilted up to 30 degrees. Although I haven’t had much pain from mouse use, I decided to give a trackball a try and have been pleased with the purchase.

The Uplift desk is amazing. My particular desk is 72x30", and has enough room for three 24" monitors, a stereo receiver, and a large amount of space for notes, paperwork, and documentation. I added a memory control keypad to my desk, so I have presets available for my preferred sitting and standing desk heights. I’d like to buy some monitor mounts so I can fine-tune the positions of my monitors and tidy up their cabling, but I haven’t done that yet.

The Kinesis keyboard’s design is very unusual, but I’ve come to really love it. In fact, it taught me that I had incorrectly learned to type ‘C’ using my index finger instead of my middle finger, and forced me to break that habit. The split design is so much more comfortable for my arms and wrists, and the unique key placement and key “wells” mean less travel per finger when typing. I’ve remapped some frequently used modifier keys (Shift, primarily) to the thumb areas, and I use macros to deal with any awkward key combinations, so I don’t have to contort my hands. I have macros for opening terminals, various tmux and window manager operations, and even starting up my work VPN connection in a background terminal.

Having used this set of equipment for roughly 6 months at the time of writing, I can’t believe I made it this far without it. These items have improved my computer’s usability, but I also wanted to pursue ways to make phone use and video gaming more comfortable:

  • AmazonBasics stylus (~$8): works great with my Google Pixel. I use it for browsing and swipe-typing (or I just use voice to text) instead of mashing my fingers into the screen (which was surprisingly painful).
  • PlayStation 4 DualShock 4 controller (~$36): works well for most Steam games (Skyrim, Stardew Valley, Final Fantasy games, etc.), and is much more comfortable for me while gaming than using a mouse and keyboard. Most console controllers are quite comfortable, and since I was never big into FPS games anyway, I don’t mind giving up most mouse and keyboard games.

I can’t say I’m quite free of pain while typing and using a computer at this point, but improving the ergonomic properties of my workstation has made a tremendous difference in my life.

My workstation in 2018.

Software efficiency and ergonomics

Now that we’ve talked about hardware, let’s move on to software. I was a vim user for roughly 8 years.

I can decisively say that I was never really any good at using vim.

  • I never learned how to use “hjkl” for movement, even though this is almost certainly more ergonomic than using arrow keys. I tried, but just couldn’t get used to it.
  • I never learned any of the “advanced” editor features, except regex search and replace.
  • My vimrc was a total “copy/paste from random blogs” mess, and Vimscript confounds me to this day.

I was always impressed by programmers who knew all the best tricks for getting the most out of vim, but I never really understood the need to optimize every single aspect of your editor. A quote comes to mind:

Weeks of programming can save you hours of planning. — unknown

Proper planning and design ahead of time can save you countless hours of hammering away at a keyboard. As you grow as a programmer, less and less of your time should be spent hammering out code anyway.

I wanted to optimize for typing less and thinking more.

And so, I switched to Visual Studio Code and never looked back. I personally find it quite a bit more usable than vim right out of the box. I have since learned how to set up code snippets, Go-specific features, etc. that make my daily workflow much easier.

I also look forward to seeing how voice to text software evolves in the future. It seems lacking for programming today, but perhaps there will come a point where I hardly have to use a keyboard at all!

https://github.com/mdlayher/ndp in Visual Studio Code.

Dealing with cubital tunnel syndrome

Finally, my visit to see a specialist provided me with a key insight: I was also dealing with cubital tunnel syndrome in my left elbow. Essentially, the nerve that provides feeling to my left ring and pinky fingers was being compressed, causing a cold, dull feeling in these fingers. The probable causes are:

  • Poor ergonomic posture during work.
  • My tendency to sleep on my side; most likely with the elbow bent for hours at a time.
  • Leaning on my elbows, thus, putting pressure on the nerve. This was a tough habit to break, especially while driving.

I was given a custom-molded elbow brace and cloth sleeve to sleep in at night. It took some getting used to, but it honestly isn’t as bad as you might think.

I’ve been wearing the brace most nights for about four months now, and I’ve noticed a significant decrease in the amount of dullness and numbness in my fingers. My specialist mentioned that 70% of cubital tunnel syndrome cases can be resolved with splinting. Hopefully I won’t need surgery to correct the issue in the future, but it remains a possibility at this time.

My cubital tunnel elbow brace and sleeve. The sleeve is quite well-worn.

The physical and mental battles

Last, but not least, I’ve begun a regular exercise regimen, and it’s worked wonders for both my physical and mental well-being. I’m going to the gym at least three times a week to lift weights and perform cardiovascular exercises.

As it turns out, regular exercise is a great way for me to combat several problems at the same time:

  • I love craft beer, but I don’t feel as much of a desire to drink beer now that I’m physically active. I’ve lost some weight, I’ve made beer less of a priority in my life, and I plan to keep it up as long as I can.
  • Weight lifting strengthens my muscles and seems to have reduced the nagging pain in my hands and fingers. I don’t worry as much about my hands because of it, which breaks the self-defeating mental/physical cycle.
  • I’m in a better mood overall, because I can go to the gym to lift weights, run, etc. to combat stress at work and in my personal life.

The journey continues

I’ve been dealing RSI and cubital tunnel syndrome in some form or another for roughly 4.5 years now, and I’m only 26 years old. My journey is far from over.

These days, thanks to the measures I’ve taken so far, I’m able to work comfortably the majority of the time. I spend more time planning and less time typing. I have a journal on my desk that I use to write down and think through ideas, before I spend hours trying to implement something I’m satisfied with.

I’m still able to create and contribute to open source software, but I have certainly cut back on recreational programming activities. I make an active effort to be off the computer at 5:30pm each day, and try to avoid spending any time on a computer at all on the weekends. Sure, there are plenty of projects I’d love to work on, but my health matters the most.

Even as I type this now, I can feel a bit of dullness in my left pinky, and some minor aches in the joints in my fingers. With all that I’ve been through and learned so far, I believe that I can beat these conditions — or at least make them bearable. If it turns out that I am unable to program at some point, so be it, but I certainly don’t intend to give up my craft any time soon.

I hope that others who suffer from computer overuse injuries are able to learn from my story. I cannot stress enough that the mental battle is just as important as the physical one. It’s all about maintaining a positive outlook, and doing what you can to take a step forward each day.

Journal sketches for an OVSDB client in Go.