“What if we cannot easily change the system later? What if it can’t scale? What if it goes down? What if…?
I’ve been building software for 15+ years, and I still remember those feelings when I started building my first SaaS. You want to account for every possible circumstance…but you drown in a sea of permanent hesitation and overwhelm.
However, there is a way out. Here, I will show you how to grow a sustainable architecture that can adapt more easily to your evolving needs.
Unfortunately, that’s not the habitual reality for many founders.
Most SaaS Architectures Do Not Fit Their Context Well.
They demand more than they need to.
And that’s because people often fall into one of these two poles:
- They take the simplest path.
- Or they overengineer and make things more complex than necessary.
Want to grow a sustainable architecture that helps you move fast today without paying the price in the future? Here is how.
Step 1: Logically Structure Your System for Evolvability.
Get the logical distribution right while keeping the temporal and physical distribution as simple as possible.
Split responsibilities among loosely-coupled, highly-cohesive logical areas. Use clear and expressive language. Run all requests synchronously and keep everything within a single, monolithic deployment unit.
You’ll get a working system that you can evolve as needed with the least possible effort.
But sometimes, we need to go further.
Step 2: Defer Things Up.
Synchronous request processing doesn’t always work.
- User requests could start taking too long.
- Concurrency issues might appear.
- Or maybe our database might fall short, either because it’s not suitable to deliver a unique feature or because it’s become a bottleneck.
If that’s the case, go down the temporal dimension and distribute responsibilities in time.
Do some initial processing of the user request, and postpone the rest to run later. Keep everything within a monolith —except for some essential background workers we’ll require to ensure Guaranteed Delivery in communication between parties.
But is that really enough?
Step 3: Offload it.
Sometimes, we may need to go beyond the logical and temporal dimensions, delve into the physical distribution, and offload responsibilities from the monolith.
Here is where we finally get to background workers and microservices/SOA. This is something people often abuse, often in the name of scalability.
But there are just a few scenarios in which getting this far is really necessary:
- A specific part of the system may be too costly or require special resources. We might need to manage it independently.
- Or the organization grows bigger and we need to establish autonomous teams in charge of specific features.
- Or maybe we need to comply with privacy, security, or other self-imposed or regulatory concerns. That may require isolating some part of our system, its code, and data within a specific setting.
In all these situations, distribute responsibilities in physical space.
Offload pieces of the workload and its related data onto independent physical services.
Growing it Simple.
Change is the only constant.
You need to run away from complexity and keep your system as simple as possible.
To do so:
- Take organic steps that naturally build on top of each other.
- Don’t move up the ladder unless it’s essential.
- Take the leap at the right time only for the parts that demand it. It’s not all or nothing.
- Grow backward. When complexity goes unnecessarily high, move down the ladder towards a more straightforward system.
Don’t get tangled in useless technical battles. You won’t get a prize for it. Grow a sustainable architecture and save what you have to deliver meaningful progress for you and your customers.
That’s the real game.
Say it out loud. Is there anything you disagree with? Anything missing that you’d like to add? If so, I’d love to hear your thoughts so, please, leave them in the comments.
Get on board. Do you want to receive more content like this right in your inbox? You can sign up for the newsletter here or in the form below 👇.
Share it. Do you think someone you know may enjoy this post too? If so, please forward it to them.
Have a creative time.