I had looked into “half keyboards” that mirror the other half of a (usually QWERTY) keyboard while holding down the space bar. But they were far out of my budget. So I mustered my strength and hobbled a software version good enough to barely work.
This was my first time building anything native for any platform (Mac in this case) and my first time writing anything that needed to account for allocating memory. It was small but riddled with bugs, and would crash with reckless abandon.
Normally I’d debug and fix it, but with it crashing I could barely code anything at all! So I just waited for it to crash and relaunched it. And then I automated that. It got me through a monthslong recovery and kept me housed and fed.
I considered open sourcing it and developing it to maturity, but there are patents involved. I didn’t want to risk it. But completely unrelated to the software itself the one lesson I learned (which sort of reflects the linked wiki page, especially mention of erlang) is that the crash-relaunch behavior was safe because my program was almost totally stateless. It was basically transparent enough for my usage that it didn’t matter whether it crashed or not (other than occasional latency).
At one point I wondered if it would be worthwhile to learn for playing video games but never bothered.