I participated in a similar transition, with quite a few mistakes along the way. Here are some things I would do as a central governing body:
1. Create architectural independence first
I think the biggest mistake is just letting old SOAP services be their own thing. It won't work. Second mistake is letting Microservices be Data CRUD services (like Product, Customer, etc.). That won't work either.
Those things will just create a lot of synchronous interdependencies and a lot more problems for you!
I would invest in an architecture where interdependencies are minimized. Reduce the need for synchronous communication as much as possible. And I don't mean use MQ, but main functions of a microservice should work with other services down.
That requires a whole new type of decomposition that won't be along the lines of old SOAP services. So this is hard work, but avoids a lot of (exponental) problems later. Check out Self-Contained Systems.
2. Protocol governance
Especially if you are transitioning to RESTful HTTP, I would set rules for:
- Linking format standard (so all applications can be crawled uniformly)
- Linking best practices (all resources have to be reachable through links, urls should not be hard-coded, etc.)
- Documentation standard (how to document Media-Types)
- Versioning Media-Types
- And importantly, an automatic way to mark a version obsolete after a non-backwards compatible change. And a standard grace period after which these are removed (the time they have to be kept alive). Either by calendar interval, or number of releases, etc.
There is no one way of doing either of these, so you have to come up with all of these, then enforce them.
I would stay away of requiring a specific product (like Swagger), and let these decisions with the teams.
If you are just looking for JSON-RPC and not REST, then some of the above points may be irrelevant to you.
3. Infrastructure-like things
Create unified standard for authentication and authorization. Again, I would make those as product-independent as possible, and not require synchronous communication.
For example define to use Json Tokens. Those things can be used "offline", without communication to anybody, and can contain assertions about a user that help with authorization as well.
Define security constraints, like communication encryption of certain messages also. Again, I would just require the "what" not "how".
4. Continuous supervision
I would perhaps create a team for architectural supervision. It is hard to create a proper architecture, it is even harder to change it without falling for quick and dirty solutions projects sometimes demand, creating sneaky dependencies and hidden issues.
These people need to be hands-on domain experts and architects and have to ultimately be responsible for the functioning of the whole landscape.
Well, that's my improvised list of things, HTH..