Instead of a big bang know-it-all upfront architectural design, which I have often come across and observed in a lot of software development companies, I propose to defer your architectural decision as late as possible and let those design choices "emerge" as you continue to evolve your product codebase.