I need some best practices or experiences of developer teams who had to treat the same issues I have at the moment =)
Our company is developing a client software for years. The one and only dependency was to have an appropriate database. With each release (update) we also update (incremental) the database if necessary. The versioning schema is well-established and matches our ideology.
Now we have started developing mobile applications (act as external client). Some preliminary remarks to our architecture:
The interface between the mobile client and the database (same database as for the desktop client) is a RESTful webservice. The versioning of both clients are independent. One application is maintained by the desktop development team and the mobile part is maintained by another team.
But I don’t know how to handle the webservice. Should it be independent as well (own versioning) despite the fact that it’s using a lot of shared libraries which are maintained by the desktop development team?
How it works:
The mobile client synchronizes it’s reference data with the webservice which interacts live with the database (read-only access to database).
User data which are produced on the mobile application become also synchronized with the webservice but it’s written to some persistent temporary tables. And an asynchronous job will be started to try the import to the database (could fail in case of locking issues, permissions, ….). If the import fails the same import procedure can also be started on the desktop client (they use the same library for importing from temporary tables to the specific ones)
In general each of these three parts could change (e.g. bugfix, features, performance improvements) without affecting the other two. Therefore I need a strategy to deploy each by itself. Nevertheless most probably it will affect two of three.
Where / when should i check if all three systems are compatible? How should I check this? Having a table in the database with every single possible combination of version which work together?
If you don’t understand my question because it’s entirely ambiguous, please let me know. It’s not that easy to describe =)