Choosing a stack for an SMB client is not about fashion. It is about who maintains the system in five years.
Three criteria. Long-term maintenance : the language and framework must still exist in five years. .NET, Java, Node, Python, Go : yes. Last month's hot tech : no.
Local hiring : your SMB must be able to hire in its talent pool. In francophone Canada that means JavaScript / TypeScript, .NET, Java, and Python. Not Elixir, not Rust, not Haskell — unless you are ready to pay New York rates.
Living ecosystem : up-to-date libraries, responsive community, maintained docs. We check GitHub stars, last release, open vs closed issues. We do not sign a project on a stack that has not had a release in 18 months.
That means less novelty. It means a system your teams can take over.