Minimalistic architecture for Minimalistic product.
Updated: May 24, 2021
Giving scarcity nature of a startup company, main goal of the architecture is to provide simple solution, yet potentially scalable, that requires minimum dev ops involvement and maintenance. This goal can be achieved by minimizing number of key technologies, languages, components, as well as relying on the industry proven solutions.
Linter (sharing customized rules)
Extensive Unit Testing (at least 70% coverage)
Supporting goal of simplification, React based UI will be used on all types of clients. React’s mantra: Learn once -- Write everywhere. Android and iOS UIs will be sharing the same code base. The mobile UI code will not be transferable to the Browser-based single-page app as-is simply because the Browser UI is conceptually very different from the Mobile UI. But, it should be fairly easy for a proficient developer to maintain both types of clients, since the language, the event model, and the tools will be the same.
We will be relying on AWS infrastructure which is the industry proven solution. AWS Lambda Serverless middleware will be used, which has following benefits:
Ease of use and deployment.
Supports incremental deployment of the services that changed (no need to re-deploy the monolith).
Intraday hot re-deploy without service interruption.
Auto-scale out of the box to infinite demand.
Pay as you go (very favorable pricing comparing to other alternatives).
PostgreSQL will be used as a DataBase. AWS currently supports Aurora RDS which greatly simplifies DB maintenance and Administration. Aurora RDS is highly optimized for IO (which is a big concern for any DB technology). Unlike MongoDB, PostgreSQL has guaranteed writes. If we ever need to support Document Data structures, PostgreSQL support JSONB type, which can be indexed for quick access.
And this is really all that's needed for a modern product -- simple, elegant, scalable, maintainable, low cost. And if the product does not take off (which still happens occasionally) -- not a big deal to throw away, rinse and repeat.