In general:
*⃣ monoliths > microservices
*⃣ integ tests > unit tests
*⃣ manual testing > automated testing
*⃣ inline styling > css classes
*⃣ vms > containers > functions
*⃣ full table scans > indexes
*⃣ duck typing > normal typing
*⃣ email > chat
Monoliths are simpler to develop, operate, and maintain: One repo, one process, one build artifact, one version, one deployment. A monolithic app doesn't necessarily run on one machine. It can scale horizontally as much as any microservice.
Unit tests have a cost, and are generally only worth it for standard library-like code: data structures, algos, serializers, formatters, protocols, etc. For highly dynamic or interactive logic, unit tests are often just a nuisance.
Manual testing is artisanal & handmade. Automated is more efficient, but can never compare in quality. There's a lot of value in test automation, but if that's all you do you'll definitely miss out in quality from exploratory manual testing.
The extra level of indirection is often not worth the complexity. Style it where you use it. Use classes for DRY, but keep it simple. A CSS class used by a single component is unnecessary complexity.
You can still deploy and run an app on a server in 2019. Once you accept that, you'll feel liberated from all the complexities and limitations of containers and serverless functions.
Brute-force linear scans are simpler and not necessarily slower. An index should strongly justify its reason for existing. Then question it's reason periodically. It might be causing more harm than benefit.
Most code I write has to deal with a lot of ambiguity from all the layers and dependencies underneath my code. Any extra ambiguity in my variable types is just insignificant compared to all that. So I take the beauty of duck typing at no extra cost
Asynchronous communication is preferable over synchronous. Let the recipients decide when to interrupt themselves. Leave chat for emergencies.
PS. I'm not against the things on the right, but I value the things on the left more.