Wow, I have been working on this project for a long time. This has been a side project through-and-through: a pursuit of passion that has lived in the margins of jobs and urgent political projects. The above graphs are commits on the two biggest components of swhenever.com: the backend API and the React frontend app. You can see periods of intense activity and inactivity; some focus alternating between frontend and backend; and how much more domain logic is in the backend.
I proudly and officially released version 1.0 at the beginning of January. It’s a good time for reflections.
Domain-Driven Design worked well
Not pictured in the commit graphs: lots of hours of hashing out the domain back in 2015. I had read a lot of Implementing Domain-Driven Design and found the ideas compelling. This project was my first attempt to apply them seriously, and the team at the time (primarily Jim Cummins, Jeremy Ward and me) brainstormed and disagreed and documented domain concepts before doing serious coding. (I had a brittle proof-of-concept before that).
I think it was worth it. The resulting domain concepts (“ubiquitous language”) feature prominently in the code and have been really helpful in guiding architecture. I still think about the system in those terms even though I haven’t referenced/modified the planning documents for a couple years.
Take MVP a little more seriously
Honestly, there are parts of the system that are pretty over-engineered. I’ve cut back on aspects of it, but could go farther. Used CouchDB to store JSON documents that should have just been a longtext field in MySQL. Used RabbitMQ to serve up a couple job queues that should have just used laravel’s MySQL queue provider. It was worth the time to think through the domain and code to those abstractions, even though it was probably slower. But it was not worth the time to learn pieces of technology that will theoretically provide benefits later. Neither would have been expensive to switch to later on. That said …
I have learned so, so much
Taking up this project and sticking with it - regardless of serious stretches on the back burner - has been the best technology learning experience of my life. If I ever want to justify the slow burn or the overengineering to myself, this is it. I’ve learned Python, Docker, React, and Kubernetes. I’ve tackled the challenges of designing, building and deploying a complex system from alpha to omega. Almost three years on, sitting down to work on this is still the most rewarding and pleasurable work I’ve ever done in technology.
It’s just been an incredible blessing to make the space for a project that I deeply believe in. I’m able to do that because of a lot of privilege: specifically because I’ve worked part-time while still pulling a salary around the US household median income. Everybody deserves a life of dignity and creativity, but instead of producing that, our political economy has given all the productivity gains for 40 years to the 1%. I think about the local artists I’ve known or followed over the years and it staggers me how much more beauty the world would have in it if those folks just had a stable economic position. Artists are some of the hardest working people I know, who take some of the most risk in service of an ideal. If swhenever.com gets a little more recognition to these folks I will be very satisfied.
Slow and steady works OK
I wish I would have gotten this out to a broader audience earlier. Software that nobody is using, by definition, isn’t terribly useful. The intrinsic joys of the project are seductive: I honestly could probably have never launched anything and still really enjoy building it. But on the plus side, the system is working pretty well. It’s been working for a while. I really wanted the project to be sustainable, with as little manual data entry as possible.
It’ll be interesting if people engage with the recommendation feature. That’s the part that probably has the least basis in measureable user feedback (as opposed to my own hopes/vision), and I delayed launch to build that out. If it doesn’t get much engagement, then that would be a pretty clear example of indulging too much waterfall-style software development.
But hey, First Avenue just DM’d me, so it’s all good :)