It’s important to control your SaaS stack
I recently have become involved in a startup where I, fortunately, do not have to worry about cash-flow, yet. It’s been an exciting experience because I am working with a great partner, but it’s also been a humbling experience because I have never worked in enterprise development. Luckily, I have picked things up on the way. Even though I am well funded, it turns out we do not depend on very many paid services.
My business partner is a seasoned entrepreneur that has done very well in life launching and growing scalable businesses. One of the biggest things that I have learned so far is how important control of your business is. If you are in a business where you have very little control of the operations, you are in a position where you can be shut down easily, have your website revenue drop off in a night, get your commission rate slashed 50%, etc.
My responsibility in this startup is to position technologies in a way that they all fit together, and in the early days here, make them work. We are working towards an MVP currently, but there have already been important design decisions that I would have made in the past that I am not making now with this new control mentality.
You NEED to control your startup stack.
This is a mistake that I definitely have made in the past. I see a lot of developers who are not as concerned with this, but they should be. You need to control your vertical integration of your technology.
There’s no question that Google Firebase, AWS, Apple, Digital Ocean, etc provide great toolsets for getting off the ground and running. However, you should look at their tendencies to lock you into their infrastructure. The Apple ecosystem is designed to lock you into buying more Apple products because they work seamlessly with each other. This is a great thing for consumers, but it can also be a dangerous thing because leaving the ecosystem becomes more complicated. The development tools created by the same companies are designed in much the same way.
I answered a question earlier today on Reddit about starting an MVP with serverless infrastructure. Serverless infrastructure is still, in my opinion, very hard to move away from, and it forces you into using other services in a lot of cases. When you sign a terms of service agreement with a company, you are most likely not the winning party. It’s a checkbox, not a negotiation. Most terms of service agreements state “we can do whatever we please and whenever we please.” Your serverless infrastructure can increase in price any time. In most cases, it starts out more expensive than traditional hosting, and it has the unlimited potential to price you out of your business model. You can see the same problem exists with no code/low code PaaS models.
Our design decisions
We decided that the technology we use needs to be first and foremost replaceable. For example, we use PostgreSQL on Amazon RDS. We can spin up a PostgreSQL database on any server located anywhere and move our data without any true migration problems, and without risking code-breaking changes.
We also are using an n-tier service heirchy to develop our business logic, which allows us the ability to change anything about our data infrastructure. We made sure to limit dependencies to a very small number unless they have a trivial function.
There are some libraries and services that simply do too much for you. When you rely on them, you are getting added development speed (sometimes, lol). You are sacrificing control over those functions in your application. You can run into weird bugs or weird design, and it turns out that it wasn’t your fault, it’s how the underlying code was written.
It’s a balancing act.
No, you should NOT write everything from scratch. If you are a software developer, you will probably be wasting a lot of time if you’re trying to laser cut the walls of your server rack unit.
I am simply making the point that control is a major aspect of your startup. If your user experience is degraded because of a version update on iOS, you used too many abstractions. If your user experience is degraded because the serverless functions take too long to ping back to the user, you used too many abstractions. Unfortunately, these are abstractions that are hard to remove and control.
I just want to point this out, all abstractions on 1’s and 0’s are ultimately just pieces of compiled code that someone wrote. You can’t really control the device ecosystems and their wonkiness, but you can always write your own abstractions if you’re unhappy with how a library accomplishes a task.
Make design decisions that give you the most control over the product/service you provide without sacrificing too much of your developer effort and time. Reinvent the wheel IF you think it makes your car better.