Struggling with severe hand pain, I learned to code by voice.
In January 2025, I developed excruciating pain and pins and needles in my hands, which made it very difficult to type and use my trackpad. I panicked. I couldn’t work. And if I couldn’t work, I couldn’t earn money. And if I couldn’t earn money, I couldn’t afford to eat or pay my mortgage. I was actually really, really, scared.
After ruling out potentially genetically inherited rheumatoid arthritis with x-rays and blood tests, I deduced that probably I had carpal tunnel syndrome (which, coincidentally, my mother also suffered with). The most recent development, after seeing a physiotherapist, is that my symptoms don’t actually align with carpal tunnel syndrome, but instead, abnormal pressure on the radial nerve, primarily in my right arm. I’m doing some prescribed daily exercises that are alleviating symptoms somewhat, but the bottom line is that rest is the best medicine in this case: physical rest and mental rest. My physical pain is real, but given the personal events I have endured over the last two years, I also believe that this manifestation of pain has been exacerbated by a combination of a series of emotionally traumatic events. I may write about this at a later date, but in this post I want to talk about how I learned to work and code using my voice, and offer some advice if you, too, find yourself in this extremely difficult situation.
Getting started is challenging
I knew I had to do something to ease the pain to enable me to work, but I had no idea where to start. And so I turned to Bluesky to ask if anyone had any advice. The advice was overwhelming, actually. Ergonomics, exercises, meditation, alternative keyboard layouts, and voice control. And when I asked for advice on how to approach voice control and coding by voice, the advice was even more overwhelming. Everyone was very generous with their advice, but whilst dealing with debilitating pain, I was surrounded by a seemingly endless list of tools, plugins, apps, custom setups, and confusing options that left me feeling incredibly afraid for my short term future. How was I supposed to learn all of this to work effectively right now?
Initially I made the mistake of trying to use all the tools at once. The result? Complete and utter confusion. I felt like I had reached the limits of what my brain was capable of, and this felt devastating. But, I did what every good software engineer does when dealing with a difficult bug: I stripped everything down and pieced the tools and functionality back together, one by one. Next, I’ll detail the tools that worked for me, and I’ll follow with some important advice that I wish I’d found or that someone had given me when I was at the start of my journey.
My voice coding tools
I found success in just two weeks with just four tools.
Talon
Talon enables you to write code, play games, and control your computer with voice, eye tracking, or noises. It is certainly a powerful piece of software — but it is a heavy lift to set up. I was fortunate that I was able to afford some light use of my hands whilst installing and configuring my Talon setup, but it probably would have been impossible if I had zero hands to work with.
Talon is entirely geared towards software engineers. So much so, that setting up Talon requires being able to navigate your terminal, and write or install script files before you can even use any type of voice control effectively. Fortunately, the Talon community gives you a much-needed head start by providing a selection of useful scripts in the community repository on GitHub, which you can clone directly inside your .talon
directory created on installation. This repository of Talon scripts allows you to get started relatively quickly in using VSCode and other IDEs, web browsers, email programs, work-based chat programs such as Slack, and even kubectl. Without this community repository, I would have been completely lost.
You can also fork the community repository, make some changes according to your needs, and clone that to your .talon
directory. The current recommendation is not to modify too many files in the community repository, and to add your own files to make modifications where possible, to avoid any merge conflicts when pulling in new changes to the community maintained repository.
I also wrote a few of my own Talon scripts to make running commands in my terminal a lot easier, such as npm run dev
(rather than having to spell them out), and you can view these in my talon-custom repository on GitHub. I also modified many of the default spellings from American to British English versions. Talon also has a very helpful Slack community, which is a bonus.
Cursorless
Cursorless is a tool to use in conjunction with Talon, to help speed up the way you navigate and interact with code in VSCode. The main superpower I have so far unlocked with Cursorless is instead of having to ask Talon to move the cursor down a few lines, or left a couple words, and then select some text and/or delete it, you can do all of that in one Cursorless command. Now, it is clearly far more powerful than that, but with Cursorless you need to start slowly, and you need to have learned the Talon alphabet before any of this is possible. More on that later.
Apple Voice Control
Whilst trying to get to grips with Talon, I found that Apple Voice Control was a good option for being able to use my mobile devices effectively, and for being able to complete basic tasks on my MacBook such as window switching, natural voice dictation and web browsing. I was particularly impressed with the ease of targeting clickable elements using the “show numbers” command, which assigns each clickable element on a screen a number that you can select with your voice. The way that the functionality of Apple Voice Control is mirrored across different MacOS and iOS devices is really well thought out, and I can see it working well for the most part for people who don’t need to code with their voice.
I will mention, however, that a number of web apps do not yet respond well to the text editing commands provided by Apple Voice Control, in particular Notion, which I use on a daily basis. Bear this in mind if you need to rely on Apple Voice Control for longer periods of time; it might just ruin your day. I had much better success using Talon with Notion when I had learned more of the Talon-specific commands.
Rango
With Talon on its own, navigating the web is still a challenge at first. Often I found myself switching between using Talon and Apple Voice Control so that I didn’t have to use the mouse functions in Talon to click on buttons and other clickable elements, because saying tab over and over again to reach my desired click target was time consuming and frustrating (not to mention that tab orders often suck on web pages, and click targets do not always have clear focus indicators) and I found it difficult to learn the Talon mouse commands. The Rango browser extension in conjunction with the rango-talon user file set gave me the same functionality of the “show numbers” command from Apple Voice Control, but without having to use the command itself, allowing me to click on any clickable target effectively using letters from the Talon alphabet, without having to say “tab” 100 times.
Other tools I tried with less success
Given that learning how to use my voice to work was frustrating, I fell into the trap of trying to find a tool that would give me back the power of typing code as quickly as possible. I tried two more approaches that I currently do not recommend.
Serenade
Serenade claims to offer you the ability to write code using natural speech, which sounds incredibly enticing, but I had limited to no success with this product. The tutorials gave promising results, but I have a feeling that Serenade is geared entirely towards React and Python apps, as when trying to write code inside a Vue/Nuxt app, Serenade didn’t understand at all how to do what it claimed.
Voice dictation to direct AI code generation
An interesting suggestion I received was to use voice dictation as a way to prompt AI code generation tools to write the code for me. I tried this using Claude inside Cursor and hated it. My end goal was to be able to use my voice to work in the way I was accustomed to, rather than switching to an entirely unfamiliar AI-codegen-based workflow.
Important advice for learning to code with your voice
Here are some of the things I wish I had known before learning to work with my voice.
Take it slowly
The one thing I wish that had been communicated to me from the beginning of my journey is that you have to start slowly. Really slowly. Using a computer and coding with voice is an entirely new, and let’s face it, alien skill. And with any new skill, you can’t be expected to go from zero to 100 in a day. The dissonance I felt with this though, is that I could already code, and I was frustrated that I couldn’t reach my typing levels of productivity faster. I had ideas I wanted to get into my IDE, I had a vision for an app that I wanted to build, and I hated the fact that my body wasn’t letting me do it.
Initially I installed Talon and Cursorless, watched two tutorial videos, and wanted to get to work. But I couldn’t; the landscape was entirely unfamiliar. I felt stuck. And then I had to force myself to do what any teacher would tell you when you got stuck: take it slowly. And start from the start.
Start from the start
When learning anything, it can be tempting to try and dive right into the deep end to get a head start. But if you can’t swim, you’ll drown. When learning to use Talon, you have to start from the start: the Talon alphabet.
Talon uses its own proprietary alphabet which allows you to dictate single letters. A common concern is why Talon doesn’t use the NATO phonetic alphabet to avoid needing to learn a whole different map of words to single letters. The answer is that the NATO phonetic alphabet uses a collection of words that are two or three syllables in length, whereas each Talon letter name uses just one syllable. This means that in using the Talon alphabet, you’ll be uttering less than half of the syllables needed compared to the NATO phonetic alphabet in order to be productive.
I learned the Talon alphabet fluently with around one hour of dedicated practise time on a Sunday evening, and this website in particular, which uses a flashcard system, was incredibly helpful: LearnTalon.
Ramp up gradually before trying to code
Before attempting to code, I would recommend learning a few more skills in using Talon to navigate and edit text (rather than jumping straight to Cursorless). This will also help you with general prose writing and navigating the web and your machine. Talon Practise was incredibly useful for this, giving you the opportunity to practise particular skills in small, focussed exercises. My favourite exercise which I was very excited to master was the copying, pasting and selection exercise.
Before using Cursorless, try using just Talon to edit some code. This will make the usefulness of Cursorless much more obvious if and when you decide to use it.
Try small coding tasks before big ones
We’ve all got jobs to do, and you’ve probably got quite a few big tickets looming over you on that project board. But you have to start small. Completing a small coding task with your voice, and committing and pushing the code in the terminal using your new-found Talon alphabet skills (gust sit trap space say commit space dash made space quote say completed small task quote slap), will give you a feeling of accomplishment like no other.
My first all-voice code change and commit was commenting out a function in my Twitch bot which I no longer needed, and committing and pushing that change in the terminal. Watch the clip on Twitch.
You will get better
After two weeks of using my voice to work and code for around 80% of the time, I was able to successfully (yet slowly) use Talon and Cursorless to add a whole new feature to my website, and I wrote about it here: How to build a copy code snippet button and why it matters. You will get better at this, but it will take time and practice. Make sure to take regular breaks, because using your voice so much will be exhausting, not to mention the new cognitive overheads of trying to do your job in such a different way.
Fortunately for me, my pain is also getting better and so I’ve been able to use my keyboard and trackpad more than I was able to over the last few weeks. That being said, given I have become comfortable with using my voice to code, write, and navigate the internet, I find myself switching between using my hands and voice throughout the day. Maybe it’s because I feel like I don’t want to lose this new skill that I had the necessity to learn, or maybe it serves as a cool party trick to demonstrate when live streaming. But more importantly, it hammers home the fact that one day we all might succumb to a temporary or permanent disability, and as web developers we have an important responsibility to build empathy and accessibility into our professional practice at all times.
🦋 likes on Bluesky
Like this post on Bluesky to see your face on this pageSalma Alam-Naylor
I'm a live streamer, software engineer, and developer educator. I help developers build cool stuff with blog posts, videos, live coding and open source projects.