The real dividing line isn't codebase size or file count — it's whether your components ship, scale, and fail together, or independently across a network.
Ask a team why they're "doing microservices" and a common answer is some version of "our monolith got too big." But size was never the actual problem — a million-line monolith with clean internal module boundaries can be perfectly maintainable, and a "microservice" with 200 lines can still be a nightmare if it's tightly coupled to three others. The real distinction is the deployment boundary: a monolith is one deployable unit where every module talks to every other module through in-process function calls, while microservices are multiple independently deployable units that talk to each other over the network. Everything else — scaling, blast radius, debugging difficulty, transaction complexity — falls out of that one architectural choice.