Managed database or run it myself?
The comparison that matters is not price per month:
| Managed | Self-hosted | |
|---|---|---|
| Cost at 100 GB | higher | lower |
| Backups | included, tested | your job |
| Failover | minutes | your job |
| 3am pager | theirs | yours |
Self-hosting wins on invoice and loses on the hours you cannot schedule. Below one full-time operator, managed is usually cheaper in the currency that runs out first.
Is a monorepo worth it for four services?
At four services the deciding factor is how often changes cross a boundary:
| Monorepo | Multi-repo | |
|---|---|---|
| Cross-cutting change | one PR | coordinated PRs |
| CI complexity | needs filtering | simple per repo |
| Access control | coarse | per repo |
If most changes touch one service, separate repos stay simpler. If a typical feature touches three, the coordination cost outweighs everything else.
Which protocol for service to service calls?
gRPC when the callers are yours and latency matters, REST when they are not:
| REST/JSON | gRPC | |
|---|---|---|
| Debuggable with curl | yes | awkward |
| Schema enforced | optional | always |
| Streaming | clumsy | native |
| Browser support | direct | needs a proxy |
The schema is the real difference: with JSON the contract lives in documentation, with protobuf it lives in a file that breaks the build when violated.
How long does this usually take in practice?
An afternoon to do it properly the first time, then minutes when it recurs. Most of the first afternoon goes into discovering which of the defaults do not match your situation.