Node services proliferate quickly. Without clear boundaries, you get a distributed monolith with worse latency.
Start with modules
Extract a service only when you need independent deploy cadence, scaling, or ownership — not for purity.
Shared libraries carefully
Publish versioned packages for contracts. Avoid shared mutable databases across services.
Failure modes
Timeouts, retries, and circuit breakers are part of the design. Happy-path diagrams are not enough.