felix's blog

Lessons learned from building consumer-facing products

Recently, I've been building out some random products in my spare-time. Such ventures include PennyPal and albms.net... both of which are consumer-facing web apps. PennyPal is a more recent project with the aim of replacing the personal finance spreadsheet (for myself mostly). Albms.net was an idea to build some kind of Letterbox'd type app for Music (specifically albums) - both ideas are nothing groundbreaking. The albms.net website gained a good amount of traffic with around ~150 users on the platform of which there are a very tiny amount (~1-2) of monthly active users. A success in my book!

This blog post is a collection of random learnings from doing these two projects. As of writing this, I am shifting most of my focus into PennyPal.

  1. Keep it simple.
    I started albms.net with some of the high-tech offerings available such as things like a dedicates Kubernetes cluster for hosting apps. I even explored using Kafka which encourages a micro-service pattern for decoupling pieces of code. In reality all you need is a simple (preferably managed) database and some kind of monolith app to prove out your product-market-fit first. Scaling stuff is quite easy these days and if you ever get to a point where you struggle scaling things that is likely a good place to be in. I recall reading an article on using something like PostgreSQL functions to encapsulate lots of the API operations within the database. This means you can focus on the data first and foremost which is key! Messing around with fancy APIs or Protobuf/gRPC is not very productive. The less code you write the better.

  2. Marketing is where you should spend 95% of your time
    I gained a lot of value from using things like X (formerly Twitter) to find prospective customers for my app. I ran a couple of Google Surveys which showed me what to build. Keeping up the consistency can lead to good results and having tight feedback loops means you know when to jump ship and focus effort elsewhere. At a minimum, one of the key things I took as a learning from my albms.net experience is that email/transactional marketing is so critical. You want people to remember your product exists and keep them coming back. You want to have a balance so that you are not spamming your users. You want to have systems in place that let you experiment and measure what you are delivering to your customers. This stuff is so important!

  3. People don't like to pay for things
    This ties into the coming point (#4). This is especially true for products with a younger audience or something that does not create tangible value - likely a common theme in consumer software. Advertising models are fantastic for keeping something alive though I loathe how this can greatly ruin the user-experience of software. In the modern internet, amazing software like Google Search has (probably) trained everyday consumers into accepting the ad-models in replace of spending a small fee to keep up with a service. This is a shame as many of the great products I use in my day-to-day are billed for, such as: bearblog, fastmail, 1password, kagi, etc.

  4. The bar for consumer-facing products is very high
    Oh so high. Like seriously. Making something polished is quite difficult to do and people will only settle for less-than-perfect if it is such a burning problem in their lives. Albms.net started (and ended) with a web-app. Mostly due to my narrow skillset in building phone applications and the fantastic agility in being able to build out a product reasonably quickly with this approach. That being said, it's important to really think about what you build and how you build it. Code less, think more! Some of the most common feedback I had was that users would prefer a mobile app for their phones. You can hot-load a progressive-web-app (PWA) onto mobile devices but the experience is nowhere near as great. Especially on an iPhone.

  5. KEEP IT SIMPLE!
    To really drive it home. I think around the mindset of "nail the basics" is something that is great to keep in mind when developing products. Write less code and keep systems as straightforward as possible. Prefer managed products and simple technologies. Leading with the problem is something that I hear a lot in my day-to-day work as a software engineer and is highly relevant in side-projects too. I likely spent way too much time on the fun but not so useful features just to end up scrapping them later on. This is great if you want to keep learning but is not so useful if you are trying to build something that people will enjoy and use regularly.

Some random extra bonus tips/notes:

  1. User authentication and login is difficult. Consider as many off-the-shelf products as you can such as Clerk.com, Supertokens, or Auth0
  2. Keep your design systems consistent! I liked to use Tailwind and DaisyUI. I also have a bias in what I think looks good which is evident in both projects I've listed in this blog post so YMMV.
  3. Don't fall in love with your MVP!
  4. Cut cut cut. Nail the basics first. Be ruthless.

And that's it! I think these are some of the key things to consider and I hope that you find them useful in your entrepreneurial ventures. This is by no means an exhaustive list and if you have opposing views I'd love to know more!

Thanks for reading.