We have been working at my company for a few months decoupling our 5 years old monolith to a bunch of 'micro' services (we are starting to drop the 'micro' part...) and I am totally confused...
What kind of utopian code needs to have the monolith for a kinda smooth transition to services? Let me elaborate
Our code is a f?_ing mess. Domain objects using injected services, business logic in aspects, the most coupled tests that you have ever seen (really), defining constants at the very end of the class (fck this particular piece of code!) and so on. It looks like the code has been written without any kind of affection by the 'gurus' who now are Big Data experts or Data Science (duh!) in their new roles (never our fault!).
We were aware of all of this but we didn't imagine how much it would impact our architecture migration (noobs!) So now we have our classic huge monolithic and a bunch of services (5 in production and 8 WIP).
Developers don't want to spend any time in the monolith because it sucks, we are expecting to have more and more (and more) services so the system's administrator and operations guys are close to explode, due to the highly coupling the entire system needs to be deployed at the same time which we solved using green blue deployment but it sucks.
All the code problems now become code and infrastructure problems. What was a highly coupled code, now is a highly coupled infrastructure. We had only one scalling problem to solve (the monolith) and now we have N problems.
I knew that the migration was going to be frustrating, but not this much... The ammount of technical and non-technical problemas it's too damn high!
Beware of micro/small/any service architecture! All your coupling problems are going to shine!