Skip to content

Decision log

Linda edited this page Mar 29, 2020 · 6 revisions

March 29th, 2020

Codecov for tracking test coverage: https://codecov.io/gh/codebuddies/backend/tree/master/project

See: https://github.com/codebuddies/backend/pull/122

February 5th, 2020

Explored and decided not to use Auth0 for following reasons:

  • no role management
  • “Customer agreements are in place with each Auth0 customer. These agreements cover data transfers to third parties that may occur as part of Auth0’s provision of its services to the customer.”

  • expensive after 7000 users (and we hope to scale)

January 14th, 2020

Use the taggit library

When a user clicks on a tag, we should show a sample of resources/hangouts/learning paths/notes/projects/groups associated with that tag (paginated)

In essence, tags are “global” — and should be editable/creatable by a moderator population

We looked more into the docs for django-taggit and researched using that in conjunction with DRF.

Decided on https://github.com/jazzband/django-taggit for its:

  • ease of use
  • because a global tag manager makes more sense for our uses cases (global tags that would span across models)

December 19th, 2019

Use JSON web tokens instead of sessions

December 9th, 2019

Choose Django + Postgres over Go, Node, and Serverless

We selected Django with the Django REST Framework because it:

  • provides a common framework for building REST services
  • provides an opportunity for those learning Python to contribute
  • allows those experienced with Django to build on skills they already have
  • provides OpenAPI schema/documentation of the services
  • exposing CodeBuddies as REST endpoints encourages decoupling from a single UI
  • while other technology choices may offer better performance in certain situations, we haven't identified any CB functionality requiring performance optimization

We considered but ruled out the following:

  • Go - low interest among the CB community to learn it
  • Java - low interest among the CB community
  • Node - some interest, but not enough people familiar with it
  • GraphQL - additional complexity that doesn't solve an identified problem in the CB codebase. Can be added later if required. Isn't performant with Django right now, though.
  • Serverless and GraphQL (using Netlify and AWS Lambda) -- newer/untested technology, fewer Stackoverflow references, depending on Netlify may be expensive if traffic grows

(h/t to @BillGlover for writing most of the bullet points above)