loading...
Cover image for Lessons From A Failed SaaS - Building SaaS #37

Lessons From A Failed SaaS - Building SaaS #37

mblayman profile image Matt Layman Originally published at mattlayman.com ・3 min read

Building SaaS (47 Part Series)

1) Building SaaS with Python and Django #1 2) Reporting scraped data - Building SaaS #2 3 ... 45 3) Multiple Stripe plans - Building SaaS #3 4) Using a background scheduler - Building SaaS #4 5) Updating data models - Building SaaS #5 6) Third party integration modeling - Building SaaS #6 7) Displaying third party data - Building SaaS #7 8) Connecting third party services - Building SaaS #8 9) Finishing third party integration - Building SaaS #9 10) Admin dashboards - Building SaaS #10 11) Semi-automated tasks - Building SaaS #11 12) Automation aides - Building SaaS #12 13) Deploying with Ansible - Building SaaS #13 14) Ansible Cranked to 11 - Building SaaS #14 15) Feature Flags with Django Waffle - Building SaaS #15 16) Feature Flags in Action - Building SaaS #16 17) Canceling Stripe Subscriptions - Building SaaS #17 18) Completing Account Deactivation - Building SaaS #18 19) Pip-tools and App Packaging - Building SaaS #19 20) Making a Shiv App - Building SaaS #20 21) Shiv zipapps and CI - Building SaaS #21 22) Upload to S3 with CircleCI orbs - Building SaaS #22 23) It's Alive! A Django Shiv app - Building SaaS #23 24) In the Guts of a Shiv App - Building SaaS #24 25) It's Permissions, Dummy! - Building SaaS #25 26) Connecting Shiv Apps with Ansible - Building SaaS #26 27) Plug the Shiv App Into Nginx - Building SaaS #27 28) Webpack and collectstatic in CI - Building SaaS #28 29) Add Static Assets to Deployment - Building SaaS #29 30) Ripping Out Node.js - Building SaaS #30 31) Celery In A Shiv App - Building SaaS #31 32) wal-e Postgres Backups - Building SaaS #32 33) Get Out, Git! - Building SaaS #33 34) Bring in the WhiteNoise, Bring in Da Funk - Building SaaS #34 35) Deploying WhiteNoise - Building SaaS #35 36) Configurama - Building SaaS #36 37) Lessons From A Failed SaaS - Building SaaS #37 38) New Project, Who Dis? - Building SaaS #38 39) django-environ and django-debug-toolbar - Building SaaS #39 40) Make A Custom User Model - Building SaaS #40 41) User Accounts With django-allauth - Building SaaS #41 42) Add Styles To Templates - Building SaaS #42 43) Use Tailwind On A Template - Building SaaS #43 44) Fast Forms With UpdateView - Building SaaS #44 45) Templates and Logic - Building SaaS #45 46) A Week At A Time - Building SaaS #46 47) How To Style Sign Up - Building SaaS #47

In this episode, we talked about the things I learned from my SaaS project and some of the reasons why it failed to succeed financially. We dug into the technical and marketing challenges that I faced and what went wrong.

I'm shutting down my side project, College Conductor. The SaaS never achieved a sustainable level of success. I started the site to help my wife with her college consulting business. As you can see from what follows, the site didn't mange to deliver what she (or anyone else) really needed.

The format of this stream was different from usual in that we weren't looking at code. We did a retrospective. Retrospectives are a fairly common practice in the software industry. They are a chance to reflect on what you did to analyze the good or bad of a project to learn from it. Most retrospectives occur at the end of a release cycle (often 2 week for an "Agile" team).

So, what did I learn from this SaaS product? A lot.

Boring technology

We started the discussion covering my initial inspriration and approach with this article on choosing boring technology. The article discusses picking safe technology so you can focus on the real core of the product. It also includes the idea of innovation tokens. These tokens are a fixed supply of novel things that you can include in your project before you are overcome by the risk of the novel solution space.

I thought I spent an innovation token on Ember, but what I failed to realize was all the extra stuff that using Ember brought along. My lack of knowledge slowed me down when speed was paramount to deliver value on the product.

Because I over-architected my software design, I spent way too much time developing features that I could have produced faster with a simpler approach.

Rolling your own deployment

I also talked about the drag from doing all the deployment myself. Starting your own server and maintaining it can be fun, but it's definitely a headwind if you're trying to produce a product quickly. Over time, my deployment tool of Ansible hindered me because I had to focus on stupid little tasks when I should have been focused on the product.

I also did a bunch of new things (and spent more innovation tokens) on Let's Encrypt, Postgres database backups, server hardening, and other tasks that all distracted me from delivering. By the time I had these things configured, I lost my wife's interest in the product and never recovered.

Wrong focus

My biggest take-away from the whole experience was that I focused on the wrong things. Technology sucked me and I failed to create a Minimum Viable Product.

I learned a ton about development with the project that will help me in the future, but College Conductor is never going to be a true success story.

The future

In the next stream, we're going to start a brand new project! I'll outline the goals for the project and describe what I'm going to differently to give a better chance of success.

This article first appeared on mattlayman.com.

Building SaaS (47 Part Series)

1) Building SaaS with Python and Django #1 2) Reporting scraped data - Building SaaS #2 3 ... 45 3) Multiple Stripe plans - Building SaaS #3 4) Using a background scheduler - Building SaaS #4 5) Updating data models - Building SaaS #5 6) Third party integration modeling - Building SaaS #6 7) Displaying third party data - Building SaaS #7 8) Connecting third party services - Building SaaS #8 9) Finishing third party integration - Building SaaS #9 10) Admin dashboards - Building SaaS #10 11) Semi-automated tasks - Building SaaS #11 12) Automation aides - Building SaaS #12 13) Deploying with Ansible - Building SaaS #13 14) Ansible Cranked to 11 - Building SaaS #14 15) Feature Flags with Django Waffle - Building SaaS #15 16) Feature Flags in Action - Building SaaS #16 17) Canceling Stripe Subscriptions - Building SaaS #17 18) Completing Account Deactivation - Building SaaS #18 19) Pip-tools and App Packaging - Building SaaS #19 20) Making a Shiv App - Building SaaS #20 21) Shiv zipapps and CI - Building SaaS #21 22) Upload to S3 with CircleCI orbs - Building SaaS #22 23) It's Alive! A Django Shiv app - Building SaaS #23 24) In the Guts of a Shiv App - Building SaaS #24 25) It's Permissions, Dummy! - Building SaaS #25 26) Connecting Shiv Apps with Ansible - Building SaaS #26 27) Plug the Shiv App Into Nginx - Building SaaS #27 28) Webpack and collectstatic in CI - Building SaaS #28 29) Add Static Assets to Deployment - Building SaaS #29 30) Ripping Out Node.js - Building SaaS #30 31) Celery In A Shiv App - Building SaaS #31 32) wal-e Postgres Backups - Building SaaS #32 33) Get Out, Git! - Building SaaS #33 34) Bring in the WhiteNoise, Bring in Da Funk - Building SaaS #34 35) Deploying WhiteNoise - Building SaaS #35 36) Configurama - Building SaaS #36 37) Lessons From A Failed SaaS - Building SaaS #37 38) New Project, Who Dis? - Building SaaS #38 39) django-environ and django-debug-toolbar - Building SaaS #39 40) Make A Custom User Model - Building SaaS #40 41) User Accounts With django-allauth - Building SaaS #41 42) Add Styles To Templates - Building SaaS #42 43) Use Tailwind On A Template - Building SaaS #43 44) Fast Forms With UpdateView - Building SaaS #44 45) Templates and Logic - Building SaaS #45 46) A Week At A Time - Building SaaS #46 47) How To Style Sign Up - Building SaaS #47

Posted on Apr 23 by:

mblayman profile

Matt Layman

@mblayman

Matt Layman is a software engineer from Frederick, MD. He is an open source software maintainer and advocate for Python.

Discussion

markdown guide
 

I think it's really normal to over engineer especially your building a MVP. I would start with just a lean canvas and build basic non-code using just a design software like "Adobe Xd" or "Figma" to build MVP before dedicating development time in building it out.