Did I make a mistake by building a SaaS product before I marketed it?

A Hero's Journey

Friday, July 19, 2024

Hey there Reader,

Hold on a minute. This can't be right. Am I actually writing another issue of A Hero's Journey one week after the last one???

No, that can't be.

Let's see, the last issue was published on—checks notes—July 3rd, 2023...and today is...July 10th, 2023. Huh, imagine that...

All jokes aside, it has been far too long since I last published two issues back-to-back, and it feels good to do it again. I don't want to jinx myself, but maybe I can keep this going? Guess time will tell.

Moving the publish date to Monday helps, as it means I can write these on the weekends and not have to contend with my day job at the same time. However, the big reason is that I'm getting this SaaS product (PushBrand) ready for the big 1.0 release soon. I've learned first-hand how products don't live and die on their technical quality alone but on their marketing and technical quality combined. And that brings me to the heart of today's issue...

Also, PS, there's another development screenshot of PushBrand at the bottom of this issue for my patient readers.

PushBrand's Development Lessons

I posed the question in the subject of this issue of whether it was a mistake to build the PushBrand product before figuring out how I would market it or determine its product-market fit.

And honestly, the answer to that question is yes.

The reason is simple: I've put a lot of time into building this product—roughly six months of active development over the course of a year and three months, not including the time spent on the original KolorKit in 2019 that PushBrand was based on—and I have no idea whether or not I can sell it. That's quite a bit of opportunity cost for a somewhat uncertain outcome.

There's a lot I can dive into here. I want to save most of it for another blog series to release with the launch of PushBrand; however, in this issue, I will give you a brief history of PushBrand and some of the reasons development ended up working out this way. Then I'll give you a few key takeaways.

The Origins of PushBrand: KolorKit (February – September 2019)

PushBrand began life as a humbler soul named KolorKit (Easter Egg in the last issue's screenshot). KolorKit was initially meant to be a business, but I never felt convinced it was a strong enough idea to be commercially viable (a callback to last week's issue about lacking faith in myself and my work). So instead, it became a portfolio project.

KolorKit was mainly about having an impressive project to show to potential employers to help me land a better job. For context, this was around four years ago, and I was about to start the hunt for my second job.

And in that respect, it was reasonably successful. That project gave me excellent interview content and was moderately impressive, given my experience level.

The KolorKit Refresh (March 2022 – January 2023)

Fast forward to three years after I had first started work on KolorKit, and I'm again entering a phase of feeling like it's time for a new job (I've already talked about this fairly extensively) but also felt that I didn't have enough experience to talk about to get a job that I wanted. And so I decided to dust off KolorKit.

The way I figured it: KolorKit was never really "completed" per se, just taken to a certain point before being abandoned (and only ever used, moving forward, by myself). I thought I could come in, give the app a fresh coat of paint, improve the existing API and front-end with the experience I had gained in the past few years, round out the feature set a bit, and call it a day.

With a few months of work, I figured I could both "complete" an unfinished chapter of my career (which would be immensely satisfying in itself) and have a great project to discuss in my interviews for a new job. And I could even monetize it in the future if I wanted to.

Of course, it ended up being a lot more complicated than that. It turned out that starting over from scratch was easier, only re-using a small amount of the business logic (roughly 10-15% of the code). I ended up porting the API to Firebase instead (which was a great choice, I might add) and porting the UI to a new framework (Nuxt.js) which was based on the same library as the original KolorKit (Vue.js) but was an entirely new structure.

In the end, though, it worked again. While it didn't help much in my initial interviews (since it wasn't really in a showable state until the Fall of 2022, six months after my initial interviews), it ultimately proved pretty impressive in my final job hunt period, ending with me getting my current job.

The Evolution Into PushBrand (June 2023 – Present)

After another (briefer) hiatus with limited development (as I was getting started with my new job and had less bandwidth for this project), I eventually returned to KolorKit.

Only this time, I wanted more.

This time, I wanted to not only "complete" the project but also try to get other people to use it and make a serious run at turning this into a business. But something was missing.

The original design of KolorKit was essentially this: users could define their color palette for a project, iterate on it with other users/clients, drill into things like color accessibility, show that color palette in use in a selection of mock UIs, and ultimately export the palette in a form they could use in their code.

While this was okay, I couldn't get past the nagging feeling that there wasn't enough value here to get people to pay me for it. And that if I priced the product cheaply, some might buy it, but ultimately it wouldn't be sustainable as the revenue would be too small for whatever it cost me in time or money to acquire those customers.

So, while on vacation in Tel Aviv, I decided to make a pivot that I had been mulling over for months. KolorKit would become PushBrand, and instead of being just a color palette tool, it would be a brand design tool.

I'll save the explanation of exactly what that means for another issue, though, cause this is already getting quite long.


And finally, the takeaways I promised.

  1. PushBrand was developed as a product first because I was trying to straddle between building a portfolio project and a business—my advice: pick one or the other and stick to it.
  2. Even when I did have notions to build KolorKit into a business, I did not adequately do market research and validate the business first. I let my fear of failure and lack of self-belief keep me from continuing. And ultimately, that's why KolorKit ended up just being a portfolio project.
  3. If I were starting again today, I would make different engineering decisions, too: ones designed to increase development velocity. While I've made a high-quality product, it could have been made considerably faster.
  4. The core challenge for releasing PushBrand is not engineering but marketing. I will need to find sustainable marketing channels, partnership opportunities, and some good, old-fashioned direct message sales to get this off the ground and make some money.
  5. While my goals for PushBrand in the short term are very modest, it's going to stretch all my skills to make them happen (I smell a growth opportunity).

The Number of Blog Platforms Is Too Damn High!!

Last week, I also promised a little missive on my blogging drama, so here we go. After I published the issue on May 11th, I set out to write the story I mentioned and did. Only, I had a hard time finding a publication to publish my story on Medium (where I have historically published).

That got me thinking about other ways to publish the story instead since it's a little depressing to publish a story only for it not to get read by anyone because it has no distribution.

Four weeks and one very deep, dark rabbit hole later, I eventually settled on publishing first on Hashnode, a blogging platform that caters to developers specifically. And I decided to make my blog on this platform my domain blog as well (it lives at https://blog.millansingh.com). Moving forward, I plan on doing my initial publishing there and then looking to platforms like Medium and HackerNoon for additional reach for those stories.

Why the switch? Well, for one, it means I'll have more stories generating SEO and domain authority for my domain, and Hashnode still feels like an early platform with room for a lot of growth. I'm hoping that I get some audience headwinds from said growth.

And honestly, it's demoralizing how I couldn't find a publication to accept my story even when I thought it was really good. The truth is that there are many reasons why they may have passed, and I'll never know. For all I know, maybe they aren't even watching new submissions and never read mine.

The main takeaway is that I should be less concerned with getting published by a publication than I am. It's one way I'm letting others dictate my feelings about my work. But learning not to get attached to rejection/acceptance is easier said than done, and I'm only human.

Journey Update

Here are a few highlights from last week:

  1. Successfully deployed a new tool for quickly adding/modifying font information for PushBrand (a critical piece of the typography design features of the app, which I'm working on next). I used a new software called Retool to create this little app which I very much enjoyed working with. I can see myself using this software again in the future.
  2. Began my apartment search in NYC.
  3. Met up with an old friend from HS that I hadn't seen in ten years!!

PushBrand Release Status

As of publishing this issue, here are the stats on PushBrand's development:

  1. 81 tasks have been completed.
  2. 14 tasks have been planned for v1.0.
  3. Approximately 10–15 unplanned tasks are left for v1.0.

At an average velocity of 4–5 tasks/week, and factoring in a little wiggle room, that would mean 7–9 weeks' worth of work until I'm ready to release v1.0. Obviously, this is just an estimate and is subject to change. I will include these progress updates in each issue moving forward until the launch, so you guys can stay on track with me.

Personal Updates

I've started "living" in NYC, as in doing things I would typically do while living my everyday life: going to the grocery store and making food, going to the movies, going to yoga classes, etc. That may sound silly, but for me, it's really about getting a taste of living here and starting to integrate into this city and feel like I belong here.

Side note, I went to see the movie "No Hard Feelings" starring Jennifer Lawrence this past weekend, and it was fantastic! It's one of those rare R-rated comedy movies with just the right amount of heart to balance out the laughs, and I would highly recommend you see it if you haven't.

That's all for this week's issue. Thanks for reading, and you'll see me in your inbox again next week!

If I can ask you to do just one thing, consider sharing this newsletter with a friend or family member. Here's the link so you can pass it along: https://aherosjourney.co/.

113 Cherry St #92768, Seattle, WA 98104-2205
Unsubscribe · Preferences

Millan Singh

I'm writing about my journey to build, learn, and grow as a Creative Entrepreneur and Software Engineer. Stories about my job (I'm employee #2 at a seed-stage startup), entrepreneurial work, investing (a personal passion), and personal growth—a blend of professional and personal content.

Read more from Millan Singh

A Hero's Journey Friday, July 19, 2024 Hey there Reader, I'm going to take a break from PushBrand this week (except for another development screenshot and small development update towards the end of this issue) and instead focus on the title topic of AI, or as I like to say, "AI" (cause the name is perhaps the misnomer of the century). You've undoubtedly heard a lot about AI in recent months (years), with many predictions of doom and gloom on the near horizon. I'm here to tell you that it's...

A Hero's Journey Friday, July 19, 2024 Hey there Reader, Not going to lie, I feel guilty. And I don't like it. First of all, to the new subscribers who came from Sam Gabrail, welcome! This issue will start on a little bit of a downbeat, but there's some good reflective stuff in here, I promise. So stick with me for two minutes, and I promise it'll be worth it. Also, there's a sneak-peak at a SaaS app I'm working on at the bottom of the issue. I feel guilty, because I said—nay, I committed—to...

A Hero's Journey Friday, July 19, 2024 Hey there Reader, So this is a little awkward...I just upped and ghosted ya'll for a little over five months (my last issue was on New Year's Eve). But, I have to say, at least I called it: I can already tell I'll face one critical challenge next year: time and energy bandwidth...So the question remains: will I manage to balance all the things, or will A Hero's Journey be a little quiet next year? -- Me, writing to you on New Year's Eve. And the truth...