Ask HN: How many developers should you have before you switch to micro services?
So, feel free to provide any commentary but, if you've worked on a team that switched to microservices I would appreciate it greatly if you could tell me: - how many people worked on the back-end simultaneously when you made the switch - your feelings about it at the time - amount of time passed since then - how many people work on the back-end simultaneously now - how you feel about it now
I want to see if there are any trends. I'm expecting that anyone who tried it with a team of 5 had a hard time and anyone that tried with 50 had a good time but I'm curious to see if there's a clear cut off which dictates that "if you try micro-services while your team only has x team members you can't hope to have a positive experience with it" and what x approximates to.
Greatly appreciate any input, corrections, insights, or comments!
25 comments
[ 0.29 ms ] story [ 69.6 ms ] threadI've never heard this before or thought about it this way. If you need to restructure your code because of your team size, you have a bigger problem with your code than whether it's separated into microservices or not.
"Let's do everything as microservices" seems like a trend from a few years ago that has now somewhat died down. My suspicion is that it was PaaS companies like Heroku pushing people to do this because it made more sense for their products, but I don't have any evidence for that.
Since then, it seems that people have remembered not to solve a problem you don't have. If your code works and it's easy enough to work on it, you don't need to radically change its structure.
Keep in mind that several companies have tens of thousands of employees working on a mono-repo.
> I'm curious to see if there's a clear cut off which dictates that...
There's no clear cut off for anything in managing a software team. It's not a science, and individual situations vary too much to create hard and fast rules.
> There's no clear cut off for anything in managing a software team. It's not a science, and individual situations vary too much to create hard and fast rules.
Intuitively, I disagree. There's a lot of nuance for sure but, but there are still patterns that can be noticed.
This is precisely the point. When you have a large number of developers all working on the same deployment unit, it isn't easy to work on. A mono-repo is orthogonal to microservices.
> https://nickjanetakis.com/blog/microservices-are-something-y...
Thanks for sharing!
I am currently leading a team of 7 (including myself) and we currently operate a Monolith Rails application with several small to medium microservices.
Our philosophy is essentially, is what we need part of the core functionality of our application, and does it rely on other core functionality. If so then it goes in the monolith. But if it is independent of the other core features then we build it as a standalone service.
We started moving to microservices ~2 years ago when our team was only 2 (me and 1 other). It was much more difficult to maintain at the time, but the flexibility in being able to rewrite certain things when necessary was greatly beneficial. Things like automating our build and great documentation for how things interconnect has alleviated alot of the trouble we had running our microservices.
Thanks for sharing your perspective!
You reference AWS services and Jenkins jobs making things smoother. Is there anything, in particular, you would say should be considered a pre-requisite before adopting microservices, based on what you've learned?
by AWS services I meant things like cloudformation, packer, ansible, consul, the nitty-gritty of ELB, EC2, S3, docker, hardest part for me was IAM and vpc/subnets, dealing with multiple caches instead of a big one, also distributed sessions(in the end we got rid of sessions and used identifiers and a key-value store).
Jenkins jobs to deploy and test every single service on its own, and for deploying everything to a test environment and run integration tests.
UAT for testing all services on test environment.
There is much more than that but these are the things I remember from the top of my head.
Microservices are one way out of that cycle. But then you need teams to run a distributed scheduler, service discovery and load balancing, RPC standards and libraries, IDL registry, central build system, time series metrics collection and reporting, distributed tracing, a standard framework per language, etc, etc. My employer has at least one person working full time on each of those list items. Some have more than 50. And I wouldn’t dream of doing microservices without them.
At least whatever’s in Martin Fowler’s article [0], and more.
A word of caution: any microservices you do before you’ve actually productionized and standardized all that stuff become very painful tech debt.
https://martinfowler.com/bliki/MicroservicePrerequisites.htm...
> Microservices are one way out of that cycle.
Is the implication that microservices lead to fewer bugs, or that microservices allow you to roll back one service instead of the monolith app as a whole?
I would argue the former implication is a dubious claim, and the later doesn't make sense if other services depend on a given service running the latest version, which is often the case when implementing new features.
If you are releasing bugs with every rollout that require a rollback, then perhaps a simpler solution is to do smaller releases with an improved testing/QA cycle.
Properly designed microservices should take this into consideration and support versioning, fallbacks, circuit breakers, etc.
It's an approach with trade offs.
Made it work with 2 devs