In our organisation, we have a software system, powered by multiple microservices namely :-
Each of the aforesaid micro-service have a master
branch, which has latest codebase.
Now, there are multiple verticals which are actively developing & contributing to aforesaid microservices. Some of the verticals(independent group of developers) are for example :-
There are pre-defined strategies for each vertical (into which they do their development) and some common code as well, in the above microservices.
Also, each vertical have Infrastructure level segregation, which means there are 3 independent cluster-setups for each vertical.
Post their respective deployment, each vertical merges their code to the respective master
branches. Now, if another vertical has to do their development, they have to rebase their feature/local branch with master and then proceed.
Now the Problem is :-
Whenever Say Vertical-A introduces some change in any of three microservices, they need to take the signoff from remaining verticals i.e. Vertical-B & Vertical-C. In another sense, we have a huge inter-dependence of one vertical on other verticals.
I shall be thankful to the community here, if you can suggest some ways of de-coupling the code here.
Any pointers or references would be highly appreciated & welcome.
-- Thanks aditya
You have a classical dependency management problem. In order to manage that correctly you will have to version each MS and treat them like external dependencies, meaning you may have to communicate changes early and provide old versions in parallel to new versions until all verticals have upgraded.
This is the exact reason that microservices should follow the organizational structure or in the best case the organizational structure is changed to reflect the functional responsibilities of the services.
In your case it sounds like it would be best if you can convince your management to create new teams that are responsible for a core service each (aggregator,document, etc.). That way the responsibilities and communication paths are clearly defined. The vertical teams will have to provide a feature request to the core service team and the core team will aggregate the requests from all verticals and announce and manage new version development and roll outs, etc. This is how google and other large companies work internally btw.
For more background information I recommend to read the articles by Martin Fowler.