A Twitter thread by Ian Grabill.
With inspiration from @flybayer and @patio11. I wanted to share my design decisions for building cheap and simple SaaS MVPs.
- NO JS frameworks
- Solo Dev
- Simplified devops
- Get MVP built in 1-2 weeks (if not less)
- Cost < $20/month
Thread below 👇
I start as simple as possible. If I can get by with a landing page using @typeform, I will just do that. For those scenarios, my goto is either a @carrd or @WordPress with a purchased theme (themeforest) and then hosted on @ServerPilot + @digitalocean.
Once I've decided that I need to build something custom, I will start mapping out the MVP functionality. Sometimes functionality will impact architecture decisions, but for the sake of this thread I will focus on the simple (majority of mine) SaaS products.
See my stack below.
Ruby 2.5 / Rails 5 - I've been developing in Ruby/Rails for close to 10 years now so I know my way around. The time frame isn't a pre-req, but working in something that you are comfortable with is. Rails documentation, community and plugin (gems) ecosystem does that for me.
On the backend I use Postgres for my DB, this is mostly out of comfort. Postgres has some cool things like Full Text Search and JSON column types, but I rarely use these at the start. At this stage the DB is a low cost decision. (See @levelsio Nomad List - $1M+ ARR on SQLite.)
I use a queue in almost all apps (ex: sending emails), for this I use @sidekiq and Redis. Sidekiq integrates beautifully with Rails, takes about 10 minutes to setup and comes with a very powerful UI. The syntax is simple and allows you to do cool things like schedule future jobs.
For file storage, I use S3 with the Carrierwave gem. I remember there being a cheaper S3 solution out there but I can't remember the name. For now this works for me. Most will make the AWS free tier and this will be free.
For authentication, I use the clearance gem. Clearance is lighter weight than devise and will give you login/logout/forgot password functionality in hours. I prefer not to use any external auth APIs (auth0) at this stage.
For transactional emails I am using @sendgrid. With @heroku they offer 12,000 emails a month for free. That's a no brainer. Easy to setup and can have emails working very within hours. For email design, there are a ton of templates out there, here is one. https://github.com/mailgun/transactional-email-templates …
On the frontend, I use bootstrap and some bootstrap based template. I rarely build a UI from scratch. Partly because I'm not great at it, but mostly because there is no point. I've been meaning to try out @tailwindcss, but until then Bootstrap it is.
I don't stray away from vanilla JS unless I absolutely have to. This means no JS framework, just plain old HTML+CSS+JS. I even still use jQuery. This may be unpopular, but I find JS frameworks to be a PITA and for what I need to do, they are unnecessary (future rant coming).
For hosting I love @heroku. It is simple, cheap enough and it just works. I can have multiple environments, CI/CD pipelines, tons of free addons and when the time comes to scale, it's easy. Yes it can be more expensive as you grow, but it's not prohibitive.
I am a strong believer of not prematurely optimizing. Why build something for scale that may never need it. Heroku is not great for everything, but for the audience that I am targeting this thread for, it should be enough to start.
For all of the administrative stuff. I use gsuite for email, namecheap for DNS, mailchimp for marketing emails, google analytics for tracking. Don't reinvent the wheel.
Software Architecture/Design Considerations: I always start with a monolith. Don't get sucked into the hype. Monoliths are just fine and will only help you move faster. For this reason I stay away from SPAs as they force you to build out an API and fragment your codebase/focus.
I am a big proponent of testing, but it's not a silver bullet. 100% test coverage is silly and just a vanity metric. Test the parts that are critical to your business - billing, integral business logic, calculations, etc. For testing I use Rspec, and mostly out of comfort.
I don't want specs to detract from feature development. At the very start, I don't write any tests, but once I see that a project is growing and will need to be maintained, I start to slot in time to write them. As a solo dev, specs act as a QA sanity check and documentation.
For error handling I tend to use whatever is free in the Heroku marketplace, right now my favorite is http://Sentry.io . This just captures any runtime errors and sends me an email when they happen.
For uptime monitoring I use @HappyAppsIO. It's free for 3 site checks every 5 minutes. I just want to make sure that my homepage is up. There is no need for anything more elaborate.
For performance monitoring, I like to use the free version of New Relic on Heroku. A lot of the good stuff is restricted ( transaction tracing ), but it at least gives you a good sense of overall performance.
For logging, I use whatever is free on the Heroku marketplace. Big fan of https://timber.io/ but I tend to run out of space on the free tier with my noisy logs. A good backup is LogDNA, which has a larger free tier.
For payments I only use @stripe . I hold off on building anything custom until I get some traction. For @indicatorbot we just built a wordpress site and hooked up a stripe plugin to handle this. Months later with traction, we are now starting a custom integration.
Another example is with @huntifyio, where I used @gumroad to sell marketing bundles and have deferred the need to build in anything payment related. Others have done the hard work for you, let them help.
With all of those resources, the total cost comes to be less than $20/month
Mailchimp - Free
AWS - Free Tier
Postgres - Free
Redis - Free
Theme - Free
Sendgrid - Free
Heroku - $7/month
Gsuite - $6/month
Domain - $10/year
This is the plan I've used to build 20-30 SaaS projects. It's only getting easier and faster to do.
- Start simple
- Don't over-engineer
- Be resourceful and find free products
- Ignore the herds, do what makes sense for you
- Build in comfort zone