A New Journey
For the past year or so, my wife and I have slowly been piecing together a plan to upend our lives (in a good way!) and commit to some radical changes. We've already been homeschooling our two children, and with our older child eligible for free national park admission for the next year, we've decided to take our family on the road, and try road schooling, starting this fall (2022).
This has some immediate side effects!
We've sold our home! Our new home is going to be a "rig", composed of a pick-up truck and an RV trailer, which we will be living in full time for the foreseeable future! We're ironing out the details, and I'll post more pics when I can.
Part of the planning has been the recognition that my current position as Director of Software Engineering at Crossover Health is not one that would fit well with our travel lifestyle. In particular, we'll be traveling often mid-week, I'll be helping with home schooling more, etc. Trying to maintain my current role would be incredibly stressful, and I would not feel like I was doing my best work, and that would really hurt my need for integrity.
As such, I've had to do the right, but sad, thing, which was to give notice to my amazing boss, Ben, and the rest of my team, that I'll be stepping away from the Crossover family at the end of July.
I've had an amazing time building out the engineering team the past 5+ years, from me and two other engineers, to a team over 35+ folks, all of which I've been incredibly grateful to have had an opportunity to work with. I will miss them all, and am looking forward to staying in touch.
The other huge change, is that as the door closes on my time at Crossover, a new door opens for me to have time to focus on ZMK and keyboard design while we travel! Instead of trying to take on part time or contract work doing healthcare software, or other backend API work as I might have in the past, my intention is to devote that time to ZMK.
I am really excited for this. Full stop.
So Much To Do
So far, in the 2+ years working on ZMK, we've done a lot:
- Initial work to create the core keymap infrastructure, basic encoders, user config repos, and basic mod-taps
- Adoption and evolution got us to a usable system, with BLE profiles, generic hold-taps.
- Keymap/HID refinements, Implicit Modifiers, Power Management
- Combos, Sticky Keys, Initial Display Support, Misc. Fixes
- Caps Word, Macros, Tap Dance, Split Locality for RGB/Power Control
My goal is to be able to build upon the amazing core we have so far and keep going! Some things already have work/PRs I want to review and merge, others need me to stay heads and down and add code:
- Encoders/sensors for split peripherals
- Fix the few lingering display issues to make them officially supported
- More powerful power management, including for connected peripheral hardware
- Simpler BLE profile management
- Multiple peripheral support (dongle mode!)
- RGB animations, and per-key RGB
- ZMK Studio, to make runtime keymaps a thing!
- Consistent PR review of contributions from others (our PR backlog is painful right now)
In order to achieve this focus, I will be working towards trying to be financially supported by my work on ZMK. This is a huge change.
Aside: Open Source Sustainability
In the wake of the log4j vulnerabilities, there was a renewed focus on open source sustainability. This is not a new issue, but one that is getting more attention only thanks to an unfortunate set of reported security vulnerabilities.
I am a firm believer in open source, but my experience with open source and money are less than stellar. My previous employment at an "open source company" was mixed: the company itself is still going, but the 'open source' part of that was a dud.
There are a lot of different business models for open source work. For something like ZMK, which does not have a copyleft license, the options up for consideration really break down in to two major categories:
Non-OSS Work Funds OSS Work
Some example models that fit this:
- Sell commercial support/consulting/services based on the OSS project.
- Commercial product built on open source core.
- "Freemium" model where additional features are made available for a price.
Directly Funding OSS Work
This includes approaches like:
- Direct sponsorship/patronage by users/companies.
- Bounties on bugs/features
Getting Paid To Do What I Love?
As I imagined how I might want to approach this, a set of priorities stuck out:
- I desperately want not to break the trust that I have earned with the community, who so far have relied on ZMK not having financial interests influencing it (or me, given my role as the creator and lead)
- I want the time spent on ZMK to broadly benefit the project and the community as a whole, not one particular user or company leveraging ZMK.
Put another way:
- Transparency in the process, direction, and funding is key,
- Money can mean influence; what I focus on, where I spend my time, etc.
From those funding options I discussed above, this is what I've settled on:
- Direct sponsorship/patronage, with no constraints on what I spend my time on.
- A selection of services I offer for a fee, i.e. contract work, which can be split into sub-categories:
- Paid work on specific open source features
- Paid work on new open source drivers
- Paid work on "board bring up" for open source keyboards
- Paid work on "board bring up" for commercial/closed source keyboards
I am NOT going to:
- Do a "freemium" model.
- Build some commercial product on top of ZMK.
- Do bounties on bugs/features
Ideally, the funds from this would be enough to support me and my family, and I can continue to generally contribute to the project, with as broad an impact as I can make. I am also realistic: getting my sponsorship to these levels may take time, or perhaps never happen. But given the advantages to sponsorship, I am going to keep working towards this as the end game.
To sponsor me, I've set up several sponsor tiers in GitHub Sponsors, named after various wireless standards:
I've added some "perks" to those tiers, but none that are gate-keeping (you shouldn't have to sponsor me to see my plans, or access me via Discord, etc. See my previous note about transparency).
I would love to see companies that are leveraging ZMK recognize the value in this kind of contribution to my efforts, but also understand that might be harder for them to recognize the value in this kind of financial contribution. This might be especially difficult, given they've already been "getting my time for free" historically.
Given that, the second funding option will also be a part of the picture, at least as a gap measure:
Project Sponsorship Versus Personal
As some of you may know, ZMK already has sponsorship on Open Collective for over a year. At no point have those funds been used to pay any individuals for their time/work on ZMK. Those funds are used for DNS name registration, other services, and most recently my work on ZMK Uno, a development kit for ZMK.
ZMK project sponsorship isn't going to go anywhere. We will continue to find new ways to use the funds, e.g. making ZMK stickers, possibly paying legal fees to trademark certain terms, etc. I would encourage individuals and companies who are financially able to do so to continue donating there.
My personal sponsorship is just that, funding the work I specifically do for the project. For those individuals or companies who recognize the specific value I add to the project, I appreciate your sponsorship for that work.
Getting paid for specific work done on ZMK, or for keyboard using ZMK, is an obvious additional revenue source. The main downside to this funding source is the "influence" that such work plays on my time; every hour doing contract work for a specific user/company is an hour not spent on work of my choosing. There's certainly a chance that the contract work aligns with what I would choose to work on anyways. Ideally, I will be able to be selective with the contract work I take on, and favor work that aligns in this way.
To avoid any one company or contract having too much influence, there are a few mitigations I'm considering:
- Spend a max percentage of my time any given month on a certain contract. 50%? 25%? Something to be evaluated.
- Bake "open source work of my choosing" into my contracts. This might be in the form of adjusting my bill rate for contract work to be "doubled" to cover time spent on other OSS work, or include hours baked into the contract that are for that OSS work.
For now, to kick start this, I've created a selection of "one-time" options within GitHub Sponsorship for these, but you can also contact me directly if you are interested in something else/more specific.
I'm incredibly excited for this journey. I'm so thankful my wife and family are embarking on it with me.
I'm also thankful for all of the users and companies who have chosen ZMK, trusted me and our community to power their keyboards, and contributed to ZMK.
I can't wait to see what we can accomplish together in the future.