Skip to content

Design and Development Principles

Ihar Suvorau edited this page Jun 13, 2023 · 3 revisions
  1. Automation

    • Building (GitHub Actions), testing (GitHub Actions), and deploying (GitHub Actions + Ansible) should be automated.
    • Configuring machines in ETAIS should be automated (Ansible).
  2. Breadth-first and API-first development

    • While working on a user story, it's better to take a user story that spans across multiple services, so we can get a better understanding of the system as a whole after the implementation. Taking one microservice and developing it in full might lead to rework when we start working on the other microservices.
    • We should also try to design the API first, and then provide the simplest implementation possible. This will help us to understand the API better, and also to get feedback from the other developers. The implementation can be upgraded to a more complex and feature-rich one later.
  3. Python coding conventions

    • Use black for formatting.
  4. Performance

    • We don't optimize for performance unless it's necessary. Performance matters in the algorithms, not in the microservices.
  5. Development

    • We use JavaScript, TypeScript and React for the frontend, and Python for the backend.
    • We use flask or fastapi with uvicorn for web servers.
    • OpenAPI specification is required for all the APIs. It would help to autogenerate client libraries (potentially, servers).
    • Databases are internal to its services.
    • Commit and push code daily. Don't develop in a separate branch for days without merging.
  6. Licenses

    • Any tool that we use should be free to use for commercial purposes.

Clone this wiki locally