The Year of Burnout
2021 was an interesting year for Nodewood, in retrospect. I burnt out hard, but managed to get some serious work done. I essentially bailed on the marketing process entirely, but managed to do some interesting sales work. Nodewood is still in beta, but only just. A year of contradictions.
Let's look at that burnout first.
2021 Engineering Review
Last year saw six major releases and three minor ones. That's actually pretty good for a side project! It also saw three months of the most torturous slog I've had since I started working on this project. That's pretty bad. Overall, though, I think it worked out alright.
Feb 2021 - Nodewood 0.15.0 - Open Beta
I'd been working on Nodewood quietly until this point, and only as of last February launched it to the wider world. The basic user management, subscription management, basic application flow, and basic admin section were pretty much all that were in place at this time. Still a suite of features that would save you months of work to develop to a similar level of polish, but pretty rough compared to what prospective customers were asking for.
Feb 2021 - Nodewood 0.16.0 - Grab Bag
This release rolled together a bunch of smaller features that just made it more pleasant to develop with. The big one was enabling Hot Module Reloading for webpack, which made waiting for UI changes take a fraction of the time. Nothing that really write home about, but a collection of little things you'd just appreciate as you came across them.
Jul 2021 - Nodewood 0.17.0 - Teams
This is a big one! Team management was added in this release. The data model has been updated so that all users are on a team and subscriptions are tied to teams instead, even if the teams feature is disabled. This might seem odd if you never plan on supporting teams, but a lot of great projects have grown to require team support and had to spend an unreasonable amount of time converting all their billing later. In the meantime, the overhead to abstract the "team" away in "non-team" mode is pretty trivial and handled by Nodewood anyway.
This is a huge feature that I wanted to get done before exiting beta.
Nov 2021 - Nodewood 0.18.0 - Vue 3
This was the bad time. For these four months, I could barely get anything done. Doing anything at the day job alone (which I enjoy!) was taking the vast majority of my energy, and I just had nothing left afterwards or on weekends to push through. Plus, "converting from Vue 2 to Vue 3" isn't fun at all. Like at all.
Not only is it not a big feature that users are asking for, it's just a miserable experience. Vue 3 is really neat once you wrap your head around it, but they take the framework in a pretty different direction and it takes time to appreciate that. And worse, library developers are taking their time as well. Much like when Python switched from 2 to 3, Vue library developers are really dragging their heels in releasing code that supports the next version. (Or maybe they're burnt out too? This is the middle of the pandemic, after all, being burnt out is pretty common right now, so I'm sympathetic.)
For most libraries, I was able to change to the upgraded version. Some I had to abandon completely and find replacements for (and change a lot of code to use the new library). And some I had to rewrite myself, since there are no alternatives, and the original author has disappeared.
But eventually, finally, it's done, and the big reward for Nodewood customers is... a hefty upgrade cost. All the conversion work and library upgrades I had to do is now something that Nodewood users have to do as well.
Still, it had to be done. The longer Nodewood stayed on Vue 2, the more and more library and userspace code would have had to have been migrated. This is like ripping off a band-aid: no fun at all, but preferable to a long, slow, tear. For now, Vue 3 is running in Vue 2 compatibility mode, so users have time to upgrade their own code and libraries.
This is also the month that Steven and I decide to put The Modest Product Podcast on haitus. Burnout is getting to him as well.
Dec 2021 - Nodewood 0.19.0 - Mobile-responsive design
This was a fun one - I redesigned Nodewood's UI to be properly responsive on mobile displays. Prior to now, if you viewed a Nodewood site on a phone, it was hideous. Even nodewood.com, if you tried to purchase a Nodewood license from your phone, you just couldn't. The purchase form was squashed and stretched, you had to pinch and drag all over the place, it was just terrible.
But like I said, this was also a fun release to work on. UI releases are kinda great like that - as you work you get this immediate feedback on an improved experience that you know is going to be useful for people. Watching Nodewood go from a desktop-web only framework to a mobile-responsive one was invigorating in a way that slogging through three months of Vue 3 warnings and errors was not.
I also developed and added in a DataTable component to replace all the hand-coded tables I was using everywhere. Since I'd need custom code for proper mobile tables (you really want to display tables very differently in mobile, and that's a lot easier done if you just have different markup that you show/hide based on screen size), this was a lot easier and more efficient than having to write that code in every case where a table was being used.
Dec 2021 - Nodewood 0.20.0 - Scripting, full Vue 3, final beta release
I felt reinvigorated working on the UI in the last release, and I was able to parlay that energy into building a Scripting feature, making it easy to launch scripts using the Nodewood Docker containers, but also allowing you to use Nodewood's Cascading Filesystem in your scripts.
This meant I could write a script to roll up your daily user/team/subscription data, and use that rolled up data to provide a more-accurate admin dashboard. I also used that daily data to create a 30-day chart, finishing the expected design of the admin dashboard.
I also disabled Vue 3's "compatibility mode" in this release, which meant that if you were still using Vue 2-specific code that had been deprecated, it would flat-out break. But on the plus side, if all your code was Vue 3-specific, it would run faster, be smaller, and show no warnings anymore.
And a big milestone: this marks the final beta release, meaning the next major release will be 1.0, and I won't have any more excuses not to kick the marketing into high gear.
Speaking of marketing, though...
2021 Marketing Review
Not a... great year for marketing?
First, there was the burnout, which made it hard to even do the engineering work, and second, I have a hard time believing I should do marketing until Nodewood is at least out of Beta. I know it's an entirely self-imposed label, and Nodewood is more fully-featured than a variety of its competitors, but well, the label's on there now, and I have some promises for what I announced I'd have done before I took it off there.
Still, I did two interesting things this year that I'm going to work on trying to expand on in 2022:
Okay, I didn't really knock it out of the park on this one, but I wrote an article about how to speed up Docker on MacOS that is worth a good third of the hits to the site. That article represents one of the coolest things I learned about Docker and something that makes me happy to work on Nodewood every day, and it is not only generally useful to others, it's also driving traffic to the site. I really need to experiment with breaking out other parts of Nodewood that make me happy to develop on it, and using those to try to draw in traffic.
As a last-minute experiment, I threw together a "secret" Black Friday sale. I put up a 50% off coupon, emailed the mailing list, and made a couple mild posts on the various indie developer sites to which I am a member. That's it. I didn't expect to really get any traction at all, which is why it was such a surprise to get two sales directly thanks to this. Because of my intense lack of marketing, Nodewood usually only makes about a sale a month, on a good month, but this really reinforces how taking advantage of even the most slapdash opportunity can really make a difference. Next year, I'll have to plan out a campaign with a little more reach, to make sure people know.
I honestly only have two big plans for 2022: 1) Hit 1.0, and 2) do marketing.
Obviously I'm going to do more engineering that just release 1.0 and sit on it all year, but I think it would be frankly irresponsible of me to spend a whole 'nother year putting the lion's share of the work into quietly building things that nobody will ever hear about and use.
I heard from a few people who might be interested in doing some promotion for Nodewood once it's out of beta and has a few customers. Well, it has customers, definitely, but I need to be able to put that 1.0 label on there, still. So that is an early goal for the early part of the year.
But after that's done, I've already seen how making some small moves in marketing has outsized effects, so I really need to focus there. Get some new, helpful articles written around keywords that SaaS entrepreneurs are likely to be searching for, set up some promotions through newsletters or potentially things like AppSumo, see about growing the mailing list so that new feature announcements and Black Friday sales reach a wider audience, etc.
2021 was, privately, a very interesting year for Nodewood. The product grew by leaps and bounds, is much nicer to use, and does way more than it did a year ago. The problem is: practically nobody knows about it.
2022 should be, publicly, a lot more interesting.