If not, how do you decide whether micro services are appropriate for your environment?
Simply via pain. It sounds unusual, but is from my perspective a valid indicator, that something is going wrong.
If you look at the reasons, why microservices are all the rage, there is a historical dimension to it which plays a big part.
Usually succesful projects go like this:
Start with a prototype
Flesh out prototype
Get business going
Enormous growth which results in
a. A big number of features are cranked out
b. Codebase growth beyond control
PAIN starts: scheduling of deployments become a nightmare, dependend subsystems could not be deployed separately
RELIEF Microservices FTW
Dividing the whole codebase in easy deployable components.
The question you are asking is a good indicator, that you are not experiencing pain on such a level, that it would be necessary to move to microservices.
Doing microservices is not without a price. Your system will definitively increase in terms of complexity.
When you have a monolith, your world is plain simple: »Call a method, do stuff, get results after a precalculatable amount of time«
When you are dealing with microservices, you jump right into the mud of distributed systems: »Call me maybe«
Things which are certain in a monolith, become uncertain in a microservice world.
The reason, why the microservice approach was chosen by many big companies is simple: dealing with the problems of distributed systems was simpler than scaling their monolith.
Of course: from an architectural point of view, a bunch of separated units looks cleaner (on paper) than a hairball of a monolith.
I lead a team of developers and one of them insists that we adopt a micro services approach to architecture.
I would ask him what would change (better or worse) in your concrete scenario.
We won't ever be servicing millions of users and there's only 5 of us so it's not like we're going to have full teams dedicated to such fine-grained services.
I do not see a (direct) problem here. Splitting up your codebase into separate deployable parts has nothing to do with team size. The codebase as such would be nearly the same. If your team handles the codebase now, it should be possible to do it after the migration.
What is necessary, besides splitting up the codebase, is: educating your team in terms of how to deal with problems of distributed systems. This is an investment to make.
We won't ever be servicing millions of users and there's only 5 of us so it's not like we're going to have full teams dedicated to such fine-grained services.
I wouldn't call these micro services as they're a bit more coarse than the fine-grained responsibilities that micro services appear to have.
Microservices have nothing to do with millions of users - though with problems of deploying a codebase facing a million of users. More: Despite the term »micro«, the "services" must not only be 100 Lines long or so - which is one, but not the only reason for calling it "micro".
I like the term »focussed service« much more. That's what it is: in terms of »separation of concerns« such a service deals with one topic.
tl;dr
If you do not have any problem running your current system, you shouldn't make a switch.