Understand the problem before choosing the technology.
Design architecture for change, not for diagrams.
Keep platform, domain and integration boundaries explicit.
Treat testing and observability as part of the system.
Automate repeatable work; keep judgement human.
Measure performance instead of guessing.