Design principles, architecture, dependency injection, concurrency, queues and testing, with trade-offs rather than rules.
What DRY, KISS and YAGNI mean, why DRY is about knowledge rather than similar code, how naming helps, and when an abstraction costs more than duplication.
What the test pyramid recommends and why, how unit, integration and end-to-end tests differ, what makes tests flaky, and which tests to automate in CI first.
What dependency injection is, how constructor injection works in TypeScript, how it relates to IoC and DI containers, and when a function argument is enough.
How monoliths and microservices differ in deployment, data ownership, teams and operating cost, why a modular monolith is a middle path, and when to split.
Queues vs pub/sub, why at-least-once delivery needs idempotent consumers, how ordering, retries and dead-letter queues work, and when to avoid events.
How clean architecture keeps business rules free of frameworks: the dependency rule, use cases, ports and adapters, folder layout and when it is overkill.
What a race condition is, concurrency vs parallelism, a lost-update example, and the fixes: atomic updates, locks, isolation levels and idempotency keys.
Try what these guides describe on your own URLs, domains, code or files.