Common Mistakes to Avoid When Building a SaaS Application
Common Mistakes to Avoid When Building a SaaS Application
Building a Software-as-a-Service (SaaS) application is a popular and scalable business model, but it comes with a unique set of challenges. In his InfoQ presentation, "Things SaaS Builders Keep Getting Wrong," Jon Topper shares a wealth of experience on the common pitfalls that can derail a SaaS product. This post summarizes the key takeaways from his talk, offering valuable advice for anyone building or scaling a SaaS solution.
1. Building Something Users Don't Want
The most fundamental mistake is building a product that doesn't solve a real problem that users are willing to pay for.
- Advice:
- Adopt a Lean startup mindset and optimize for learning.
- Get to a Minimum Viable Product (MVP) quickly to test your assumptions.
- Establish a commercial model early and talk to your users frequently.
- Build continuous delivery practices from the start to iterate quickly.
- Measure the right things and celebrate learning, not just shipping features.
2. Not Building Tenancy Concepts into Your Application
SaaS is inherently multi-tenanted, and failing to account for this from day one can lead to significant operational complexity and limit your architectural choices.
- Advice:
- Bake tenancy concepts into your application from the very beginning.
- Use foreign keys for tenant IDs in relational databases, or consider row-level security in databases like Postgres.
- For object storage, embed tenant IDs in the path.
- Be prepared for larger B2B customers who may require a siloed tenancy model.
3. Not Calculating and Testing Per-Tenant Costs
If you don't know how much it costs to run a single tenant, you can't price your product effectively.
- Advice:
- Calculate your baseline per-tenant costs upfront.
- Ensure that your pricing model covers these costs plus a healthy margin.
- Be aware that complexity and costs will increase as you add more tenants.
4. Not Automating Tenant Provisioning
Manual tenant provisioning creates bottlenecks and distracts your engineering team from building the product.
- Advice:
- Automate tenant provisioning and lifecycle management with a "control plane."
- This orchestration layer should handle onboarding, billing, configuration, and deployment, separating it from the application itself.
5. Delivering Unique Features or Different Versions to Tenants
Customizing your software for individual customers or allowing them to dictate the update schedule leads to operational complexity and burnout.
- Advice:
- Maintain a strong product philosophy and vision.
- Learn to say "no" strategically to requests that don't align with your product vision.
- Offer alternatives or integration hooks instead of one-off features.
6. Deploying Your Software into Your Customers' AWS Accounts
This is a common request from enterprise customers, but it's a path fraught with peril.
- Advice:
- Push back on these requests.
- Address customer concerns with clear explanations of your tenancy separation, robust security and architecture documentation, certifications (like ISO 27001), and contractual SLAs.
7. Building Your Solution to Be Multi-Cloud or "Cloud Agnostic"
Trying to be "cloud agnostic" from the start is a premature optimization that leads to duplicated effort and increased complexity.
- Advice:
- Focus on one cloud platform and leverage its high-level managed services.
- Avoid the temptation to re-implement managed services within Kubernetes just to be "agnostic."
8. Deploying Your Solution On-Prem for Customers
This is an outdated model that shifts control to the customer and creates a massive operational burden.
- Advice:
- Avoid on-prem deployments whenever possible.
- The model makes updates and troubleshooting extremely difficult and is a relic of a bygone era.
9. Not Thinking Sufficiently About Backups and Disaster Recovery
Over-optimism about system reliability is a recipe for disaster.
- Advice:
- Assume that "everything fails all the time."
- Conduct "premortems" to identify potential failure modes and prioritize mitigation.
- Implement a disaster recovery (DR) strategy that is appropriate for your Recovery Point Objective (RPO) and Recovery Time Objective (RTO).
10. Not Classifying Your Data Assets
You can't protect what you don't know you have.
- Advice:
- Build a data catalog to track the location, type, security classification, backup frequency, retention policies, and ownership of your data.
Bonus Mistake: Listening to Consultants Instead of Understanding Your Customer Base
External advice can be valuable, but it's not a substitute for understanding your own business and customers.
- Advice:
- Make decisions based on what is commercially sensible for your business and your customers, ensuring profitability and avoiding team burnout.
This blog post is a summary of the key points from Jon Topper's InfoQ presentation, "Things SaaS Builders Keep Getting Wrong".