DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» is a community of 968,547 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
Dmitry Amelchenko
Dmitry Amelchenko

Posted on • Updated on • Originally published at echowaves.com

Minimalistic architecture for Minimalistic product.

Minimalistic architecture for Minimalistic product.

General principals

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.

Programming Language

The only language that currently can be used across all of the architectural tiers and components is JavaScript. Settling on JavaScript language across the board will allow to build truly cross-functional engineering team. While some specialization is allowed and encouraged, every team member is expected to be comfortable in any tier of the system and switch between front/back end as needed. JavaScript requires certain proficiency. To maintain high level of standard, the development team will have to agree on certain techniques and tools that will apply across different tiers, for example:

  • Linter (sharing customized rules)

  • ES6/7

  • async/await constructs

  • Extensive Unit Testing (at least 70% coverage)

Client

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.

BackEnd

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).

  • Supports JavaScript.

Data Storage

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.

Conclusion

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.

This article was originally posted here
The open-source example project is called What I Saw.

Top comments (0)

Need a better mental model for async/await?

Check out this classic DEV post on the subject.

β­οΈπŸŽ€ JavaScript Visualized: Promises & Async/Await

async await