I've been merging microservices back into the monolith
We used services to great effect at the company I previously worked at. There was not a single engineer that ever voiced a concern over how things worked. A couple important notes:<p>* We used a mono repo and services only had to talk to other services from the same commit (or branch). We didn&#x27;t version service APIs, I think that would have been a huge waste of time for us.<p>* Our tests did unit tests and integration tests.<p>* We could use different languages as the problems required. We started one data processing service in Python and migrated it to Go when it became more CPU bound than we were comfortable with. We have an old but extremely reliable C++ service that had been running for almost a decade.<p>* Each service ran in its own container. When a container&#x2F;vm would run out of memory, we all didn&#x27;t have to scramble to figure out who broke something. The person who owned the code for that service dealt with it. If a service started kicking out errors nobody but the owner had to be distracted.<p>* We had a good team of architects that understood how to build things. We didn&#x27;t split services across atomic boundaries. We knew how to build interfaces that handled errors robustly. If you don&#x27;t know how to do these things, you service APIs can quickly become a mess.<p>* The world is services. Just think about AWS and how it works. There is no such thing as a monolith, eventually you interface to services. Be it a weather API, a CI server, deployment system, a central logger, etc. Just because you didn&#x27;t write all those services doesn&#x27;t mean you don&#x27;t have a service architecture.<p>* We had really disjoint services that would have made zero sense to put together. For example, the web server that handled the front-end vs a back-end data system that refreshed a product database and built PDF assets based on the data in overnight batch runs. We actually had many of the later for different customers. We had services for central logging, for monitoring, for metric storage, etc. No way would I ever want to push all that into a single service and debug a GC issue or segfault.<p>* If we had to hotfix a service, we could deploy just that service with zero concern the other services would have an issue.<p>For us, services were a key part of building a very reliable system that we could update rapidly with minimal risk. We did this for almost a decade. We had a very good group of engineers and never did I hear one of them say services were holding us back. After this experience, I would say everyone one of them is an advocate for the appropriate use services.