I know it's a broad question so I'll try to be as specific as possible. This question is more an "organisational" question than a technical one.
We have a multi-sided project with these main components:
- A server, hosting the core business logic (data models)
- A backoffice for clients which uses the core business logic
- An application API (REST) which uses the core business logic too
- There are smartphone apps (iOS and android) using the application API
- There are another tablet app (android) different from the smartphone one using the same application API.
Soon, I'll be in production with active clients. And as any project, I'll need to maintain all different components over time. That means all of the following can be upgraded:
- the code of core business logic in the server (used by the back-office, the API, and as a side effect, by mobile apps)
- the API itself (used by both smartphone and tablet apps)
- all the mobile apps (via appstore/googleplay)
Of course, server-side parts (core business logic code and API code) can be changed immediately by myself. However, new mobile apps must be downloaded by the clients on the appstore/googleplay, and I can't be sure they're up to date.
Could you provide any guidance, good practices tips, to make theses upgrades smooth and, unrisked for the client?
Which component do I need to "version"? How to ensure everything works even if the client does not upgrade its mobile app? Should I force him to upgrade to make my work easier?
In a word, how should I organize to make my multi-sided-project live over time?