Create Massive Successes Via Rocky Learning Curves
Big wins come from tasks that may not pay off immediately. Lesser successes can emerge more quickly. A QMK keyboard firmware technical semi-allegory.
Several years ago, I developed a user interface device called the JC Pro Macro 2. After fully funding this device Kickstarter, then selling more on Tindie in the following years, it’s arguably been a nice success from a monetary1 perspective. I also learned a lot during the process, and I love using it to manipulate media, design circuit boards in KiCad, and edit video in Final Cut Pro.
One thing that really held this device back, however, is that it is (or was) programmed in the Arduino IDE. While there is nothing wrong with this C-like programming environment, if the end-user wants to make modifications, this means installing the IDE, along with various libraries, then understanding and changing the code that I’ve written.
This process shouldn’t be a huge challenge for an experienced programmer, though it’s certainly a bit of a hassle. However, for the vast majority of keyboard users, this would represent a significant learning curve. That being said, the JCPM2 hardware is solid, and the software is ready to go if you like to do the same things with computer that I do.
QMK: steep learning curve, massive rewards
As I write this today–approximately 3 years after I sent out the final Kickstarter JCPM2–I am now using QMK, or Quantum Mechanical Keyboard firmware for my personal JCPM2 macro pad. Initial QMK programming was not easy for me, and it took many hours of research/work to get everything working as it should.2
While I could have made small individual changes in Arduino-C (e.g. type “A” instead of “B” when a certain key is pressed) much faster than redoing everything for QMK, my macro pad is now set up via a widely understood keyboard architecture. QMK is used on a lot of other keyboards. The end-user experience should be slightly better by default3, with a much gentler learning curve if you want to make modifications (even for me at this point).
This concept doesn’t just apply to keyboards. Meaningful engineering tasks often progress in a similar non-linear manner4. Here visible accomplishments come all-at-once or in discreet jumps, and you may even see setbacks along the way. Properly targeted and executed, however, these big (but intermittent) jumps can be much more meaningful than their more linear counterparts.
On an even more general level, building a business, sales, and many other more nebulous business tasks work in the same way. For example, Amazon wasn’t profitable for years. It certainly is now.

Just make sure you to put your effort into the right project (as touched on in my 2025 goal #2 - Be Selective About Your Work). For every Amazon.com, there were many Dot-Com companies circa 2000 that didn’t make it… OTOH, sometimes it’s a matter of timing.5
Set up tools/documentation once for infinite reuse
Related: when you figure something out yourself, be sure to document it well and/or provide the tools for others to duplicate it. That’s kind of the point of my QMK setup for the JCPM2; make it easy for others to flash firmware and set up their macro pads for optimum usage.
If everyone had to go through what I’m going through, my QMK efforts would make little sense, but if I can do it once and allow others to perform an easier version of this task in, say, 15 minutes, that is a much better bargain time-wise. For that matter, proper documentation can help future you to figure out how you did something. I’ve referred back to my posts on embeddedcomputing.com on various subjects countless times.
If documentation is helpful for you, it’s probably helpful for others too.
Constant input and taking big swings
Was putting QMK firmware on my JCPM2 a big risk (i.e. a big swing) for me? Not really, but it’s still a semi-large time commitment with a potentially big reward. I had been putting off because I had other things on my plate.
For more on the subject of risk vs reward in the context of book publishing, you might also check out Elizabeth Cook’s post On Taking Big Swings. Things may not turn out the way you planned (and she did have decent-sized setback last summer), but those who are truly successful often would have a “life chart” that looks more like the red line 👆 versus the ~safer green line that most of us pursue.
Of course, whether you’re team 🍀 green or team 🎸 red, keep that work axis moving to the right! Slow and steady input (or at least steady) certainly still wins the race over those that give up.
Note that any Amazon links are affiliate
Addendum/Footnotes:
Great Success!
Actually, was the JCPM2 a success? A great success even? Based on all the time I put in (that I didn’t track), I’m not sure it was a success on a pure monetary basis (if I’m aiming to make more than minimum wage). OTOH, I learned a lot during this process, and have a computer accessory that I really really like and use constantly. So yes it was a success, if not a purely monetary one.
QMK, or a version of it, was likely available as I was developing the JCPM2. If I had considered that option then, rather than continuing to slug away via Arduino-C, it could have been a much better product, and saved me from developing what seems now to be an inferior custom solution. A bit of research/thinking outside of the box at the outset of a project can be a very good time investment.
It is pretty good now, but still takes some setup to modify the QMK keyboard layout. It should be really good once the QMK people add it to their configurator, but this process apparently takes some time 🤞
Unlike, say, digging a ditch. And not to demean ditch digging, I very much enjoyed digging up my back yard as a kid, even if my parents didn’t. Planting things–the responsible adult homeowner version, is pretty enjoyable too.
When pursuing difficult problems, I like to think of setbacks not as mistakes, but as the path that you were going to have to walk down to accomplish some task. You just didn’t know it yet. And if that sounds a bit hokey, maybe it. It has also helped keep me sane at times.
🤍🤍🤍🤍🤍