I work (very hard –possibly harder than I ever have, in my life) for free. I'm grateful to have the means to do that. I got those means by working on stuff I didn't like working on.
I love coding. I love solving problems. I love shipping. I love writing user interfaces. I love writing device control code.
But I have found that working at the whim of others, does not end well (for me).
It's worth it, to me, to be in a position, where others don't dictate what I do, and where I'm not dependent upon others.
I am currently working for a nonprofit, on a team, where I'm doing the lions' share of the work. It's a fairly robust social media/resource location application that consists of a few backend servers, a couple of SDKs, a whole bunch of dependencies (almost all ones that I wrote), and an iOS/iPadOS app.
I've been working on it for a couple of years. That's a long time, for me. I can usually bang something like this out, in a month or two.
The reason is that I want to bring the team along. It's a big learning experience for most of them. They are a lot younger than me, and, for most of them, this is the first time that they've ever been involved in a soup-to-nuts software deliverable. They didn't really know what they wanted, in the beginning, and we had to spend a great deal of time, prototyping various user experiences, before finally settling on the final one.
Now, we're in the home stretch. Once we had consolidated the project into a concrete workflow and user experience, we brought in a designer, I rewrote the core of the app into a platform-independent engine, and we're writing it from the ground up. It won't take that long (but still, longer than I usually do, on my own).
It's fun. I have learned a great deal, myself, during the process, and, to add a cherry on top, the software will be used to help people to rebuild fairly shattered lives, so it's all good.