I work for a company called Attest, and we transitioned from only a very small number of services to many more with the ability to create new ones easily (and monitor and manage them!) This talk (video) focuses on some of the language agnostic changes that we made to enable the delivery of small, well defined services… microservices!
In the beginning
At the start when you only have a very small team, few enough to feed with 2 pizzas, you don’t need a distributed system. You don’t need a microservice architecture. Instead you can have one main app, a monolith, that does everything. Something like this:
This works great for your small team, no longer do you have to worry about debugging distributed systems, or distributed transactionality. You build new features into this blob, but if you do not keep your eye on the ball, then before you know it this is a mass of unsustainable code! I never wanted to get to that point, so we invested time into making our stack better at handling both different languages and increasing the speed we could move. Reducing the time to market.
What did we choose?
These make up the majority of our stack now, but watch the skillscast (link below) to see how and why!