I am developing an app using Ionic3+Angular for frontend and SpringBoot+Mysql for backend , the initial version of this app is already in production for one of my client. Meanwhile, there is reference from the client that his friend is also looking for similar app with less features.
Looking at this request I see few more clients will get added probably asking for custom features in the developing application.
So, I am in dilemma now whether to create this app as multi-tenant or multi-instance.
*Disclaimer : This is my first project for a client and I am new to mobile application / multi-tenant..etc. Also the same application is expected in web view as well
Hence, I am looking for suggestions/recommendations from Indie Hackers on the same. Thanks to your comments
Additional Note: Kindly share your experience on either of them multi-tenant and multi instance even if you see similar comments, this will help me to arrive at a conclusion
I run a mobile app platform which is multi-tenant. This means we have one app which serve multiple clients, but also branded separate apps. All of them run on the same codebase and on the same API.
We try to avoid splitting up our codebase for custom development. In general all custom requests are satisfied by either making our product more flexible so they can add/change/customise options to make it to their fitting or by having some feature-flags for certain custom features.
You always have some form of multi-instance with mobile apps since you have to deploy a version per client (unless you cater them all within one app), but try to avoid creating multiple codebases and backends.
It is good idea to have an app with feature based, let me think on it, thanks for your great view
I think depends on what you want from your product. If you think you will have custom versions for different clients, you may need to go to multi-instance. This helps to have completely customizable and separate applications for each client, but it can be a pain to maintain (especially if you start to have too many customizations).
Multi-instance is simple, but doesn't scale easily (but its not impossible). Multi-tenant, if you didn't thought about it from the start, may require a lot of changes to your application..
I suggest to be realistic, and start to consider how much work you need to have a multi-tenant application. If it's not a lot, start to work on the change, and go multi-instance until its completed.
I am still in initial face of the app, so let me check on the feasibilities
This comment was deleted 8 years ago
I highly suggest building most any authenticated app to be multi-tenant from the start. Doing this means that you need to address content and access security questions from the very beginning rather than trying to back-fill such security later.
In this case, perhaps it's valuable to think about what can be implemented as configurable features vs. what needs to be custom coding. Branding and enabling of features ought to be quite feasible in most apps.
One selling feature of multi-instance apps, however, is that they allow for on-prem installation. If this is a selling point, consider how to achieve this (is the build process able to generate easily-deployable artifacts?) Making an app multi-instance also makes the management of multiple test environments much more feasible.
I have built multi-tenant several times and once scalable to the horizon.
The roughest part IMO is running around to codebases if you go multi-instance, and backporting fixes/features which multiplies your efforts unless you’re really good with git merges and disciplined. Also the workload scales as the client base scales unless you come up with a GOOD automated workflow, which requires some really solid DevOps chops. Bug fixes and instance management also are going to pester you.
If you go multi-tenant, you add extra fields to your tables, and need to break things down a little further, making strong use of inheritance to break up your classes into tenant specific areas when needed. Totally doable, and way easier to backport. This approach also scales nicely. You’ll have a lot more switch/case and if/then but I think it would be worth it.
I have done both in the last year and regretted going multi-instance. When I’m focusing on one, I feel like the others are like kids running around in playgrounds with no adult supervision, which is nerve-wracking. I’m one man and the added workload became a time drain quickly.
My opinion only!
Really a great insight to me to start thinking on moving to multi-tenant
I've worked on projects that involve multi-tenant and multi-instance. Multi-tenant is easy if you start your project with that in mind, it would be difficult to come back and add in the ground work for a multi-tenant client/server app. Just keep the fact that various tenants will be accessing the app in mind anytime you make decisions.
Multi-instance or separate code bases can be insane to keep in-sync. The only way I would do this again is if the contract is big enough to allow me to hire someone to support each instance full time.
You can put all the extra features inside controls that are hidden to customers that don't need them or didn't pay for them. That way you only build one app. It would be too much to write different versions of the same app and then try to maintain them.
I can tell you from experience, a multi-instance app is painful. Keeping each instance in sync is hard to get right. Especially for a mobile app. Sure, there are ways you can automate a lot of that, but it's very difficult.
I've spent the last year moving from multi-instance to multi-tenant. With multi-instance, it takes one week to onboard a client. With multi-tenant, it will be no-touch on my end.
Good point for on-boarding new client