At the end of 2022, 10x and London Microservices partnered for an exciting meetup in our London offices.
We had around 40 members of the community attending, where 10xers Frederik Brysse and Daniel Oakes shared some insights and lessons from our microservices journey. Jim Fielding, Backend engineer at Attest, closed the night with a practical talk on Testcontainers.
Microservices – Worth it?
The first talk was by Frederik Brysse, Director of Engineering at 10x, who reflected on the costs and complexities driven by microservice-orientated architectures, drawing on over a decade of experience working with them.
Frederik highlighted the importance of being deliberate about the trade-offs that come with microservices and how having less distribution in the system can help to mitigate some of these challenges.
One of the key points that Frederik made was that microservices should not be accepted as the defacto architectural style, as is now the industry norm, because of the overheads, complexity, and reliability risks they drive. Instead, distribute sparingly to accommodate crucial technical or organizational requirements.
Paving the road for engineering autonomy
The second talk of the day was from Daniel Oakes, Senior Principal Engineer at 10x, on our Common Tooling team.
Daniel talked about the importance of developer experience and the "paved road" approach to alleviate the day-to-day frustrations of engineers. Daniel emphasized the importance of making it as easy as possible for developers to work with microservices within the platform and how taking a "paved road" approach to reducing boilerplate code and engineering toil can help to achieve this goal.
Daniel also discussed how focusing on improving observability with detailed tracing and business context can help provide an invaluable source of documentation about the system, which is always up-to-date. In addition, better observability allows developers to understand how the system works and to become much more effective in quickly identifying and fixing issues when they arise.
Another of the key points that Daniel made was striking a balance between maintaining consistency and still providing engineering autonomy, which is key to operating at scale without stifling innovation.
Testing what we really care about: service testing with Testcontainers
Finally, Jim Fielding was Attest's up. Testing with dependencies is hard. we can fully mock them at the unit test level or fully test with them at the integration test level.
There's a gap in between that we still want to iterate in. To move quickly, it's helpful to test against a subset of dependencies and to mock out the rest in a real environment.
This is where service tests with Testcontainers come in. Write tests with real dependencies (Kafka, Postgres, etc.) with real network calls (to mocked service stubs) without the need to spin up the real world. Service tests with Testcontainers help us move quickly at a level of abstraction that sometimes gets ignored.
Overall, the meetup provided valuable insights into microservices and highlighted the importance of understanding the trade-offs and finding ways to make it easier for developers to work with them. As more and more companies are moving towards a microservices architecture, it's essential to know about these topics to make the best decisions for your organization.
The event closed with pizzas and drinks, where everybody could share their experiences and thoughts on the microservice architecture.