Choosing a technology stack to build microservices is not an easy task. Large, batteries included frameworks like Spring, Rails or Django don’t feel like the fit the bill anymore.
The Spring framework for example feels like an antiquated and excessive choice for building
microservices. It can easily get sluggish startup times the more complex your dependency
graph gets and just using Hibernate/JPA makes it unbearably slow to start.
Using Spring also comes with a mental overhead, not just a startup one,
since it aims to facilitate more enterprise-y and monolith-y applications,
meaning even simple stuff require either some expertise or some waddling
through documentation a bit too often. They give you the kitchen sink from
which you need to remove the stuff that you don’t need instead of the opposite
and that’s not a good thing when you need to build and maintain multiple apps.
On the Python front, Django, the most battle and time tested of the web frameworks is very capable when building traditional web applications it’s not as slick when building APIs. Django with DRF, is the tool of choice for thalasio.com and it was a very productive experience but I am not so sure how it would fare if I had to break out modules and re-use code between services. The fact that Python doesn’t have a good dependency management track record is also a fairly serious downside, who wants to setup intricate docker images or ansible scripts to pip install dependencies?
The push back against these web framework staples is evident when you look around on what frameworks have increased their popularity in recent years. Frameworks like Micronaut in Java, FastAPI or Http4s and Http4k seem to be little more than a layer on top of HTTP that aims to just work as a gateway to your business logic, the rest is up to the developer to put together.