Microservices
You need to be this tall to use [micro] services:<p>* Basic Monitoring, instrumentation, health checks<p>* Distributed logging, tracing<p>* Ready to isolate not just code, but whole build+test+package+promote for every service<p>* Can define upstream/downstream/compile-time/runtime dependencies clearly for each service<p>* Know how to build, expose and maintain good APIs and contracts<p>* Ready to honor b/w and f/w compatibility, even if you're the same person consuming this service on the other side<p>* Good unit testing skills and readiness to do more (as you add more microservices it gets harder to bring everything up, hence more unit/contract/api test driven and lesser e2e driven)<p>* Aware of [micro] service vs modules vs libraries, distributed monolith, coordinated releases, database-driven integration, etc<p>* Know infrastructure automation (you'll need more of it)<p>* Have working CI/CD infrastructure<p>* Have or ready to invest in development tooling, shared libraries, internal artifact registries, etc<p>* Have engineering methodologies and process-tools to split down features and develop/track/release them across multiple services (xp, pivotal, scrum, etc)<p>* A lot more that doesn't come to mind immediately<p>Thing is - these are all generally good engineering practices.<p>But with monoliths, you can get away without having to do them. There is the "login to server, clone, run some commands, start a stupid nohup daemon and run ps/top/tail to monitor" way. But with microservices, your average engineering standards have to be really high. Its not enough if you have good developers. You need great engineers.