This is a question about Android, and iOS apps. The technology is Xamarin (C#) but this is not really important. The app will be deployed to the stores. The client app must be compatible with the back end up. As we know, a user can reject an upgrade at any time, so the client must try to work with the current version of the back end if possible. However, in my situation, the client could also be upgraded before the back end (long story and completely out of my control). So, the client version could be behind, or in front of the back end.
The only solution I can think of is to compile multiple versions of these things in every release:
- Database structure
- Business logic (rules)
- UI
This would mean that the client / back end would find the best fit version and work together as best they can. If no compatible versions are found, then the client would just throw up an error and ask the user to upgrade the app in the hope that this would fix the problem.
Constraints:
- A customer (an organisation) can delay a back-end upgrade for as long as they want
- A user cannot delay a front end upgrade (a deployment in to the app store)
- A user (a person with a phone who works for the organisation) can choose to not upgrade to the latest client version because App Store.
For example, customer x could be on version 1.3 of the back-end, but customer y may be on version 6.8, and the version of the app in the store may be on 7.5. However, user z may delay the upgrade and stay on version 4.7 for example.
The implication is that merely trying to keep versions somewhat compatible isn't going to solve the problem.
My question is: what is best practice for this scenario? What are some techniques that can be used to mitigate the bifurcation in the code? What successful strategies have worked in the past? Is this doomed for failure?