A useful architecture starts with context. Before choosing a framework, deployment model, or service boundary, answer these questions.
01 · Who needs this?
Name a specific user and the result they want. For a learning platform, “a teacher organizing a course” is a more useful starting point than “a platform for everyone.”
02 · What must remain true?
Write down the rules: a learner cannot access another tenant’s private content; changing a course should not silently erase progress. These rules shape your design.
03 · Where are the boundaries?
Group behavior around responsibilities, not just technical layers. Ask who owns the data and which changes should remain local to one module.
04 · What can fail?
Follow one request from start to finish. Consider invalid input, denied access, unavailable dependencies, and retries. Decide what the user should experience.
05 · What are you trading?
Every option has costs. Prefer a decision you can explain and revisit over a fashionable pattern you cannot justify. Record what would make you reconsider.