Closed seporterfield closed 5 months ago
I'd add nextjs
as an option and scalability
as a decision driver
Done. Does it look correct?
What i'd update
Maybe no need to mention frontend as this is only about backend?
Backend engineering is Next.js' biggest weakness. There is really no comparison with a mature web framework like Spring, Laravel, Django etc. In mature web frameworks you have multiple abstractions for organizing your backend code and separation of concerns. In Next.js, Vercel gives users "Server Actions" and make it sound like they just invented sliced bread. Also in Next.js, everything is a la carte - will need to bring your own serialization, orm, migrations and much much more. Also you will have to bring your own patterns for organizing lots of backend business logic. Which basically means your large backend codebase will be a special snowflake.
Not sure about the workload claim. Especially for a website that we can scale horizontally.
Default python is strongly typed and dynamic. Using mypy, python is statically typed.
Maybe no need to mention frontend as this is only about backend?
How our choice of backend plays into the overarching architecture is important.
I don't see how we can avoid talking about other components in that architecture and how they would be affected and the restrictions they set on our choice of backend framework.
Maybe no need to mention frontend as this is only about backend?
How our choice of backend plays into the overarching architecture is important.
I don't see how we can avoid talking about other components in that architecture and how they would be affected and the restrictions they set on our choice of backend framework.
You're right, should we reference the dependencies and impact then?
File for Decision-B
in the case where Decision-C
& Decision-D
are dependent on Decision-B
and Decision-B
is dependent on Decision-A
:
Decision-B.md (Frontend framework)
## Impacts
- #42 (Decision-C): API fetching method
- #55 (Decision-D): State management
## Dependencies
- #30 (Decision-A): Backend framework
How maintainable would that be though?
^ Moved discussion on dependencies to #187
Added my confidence level
Choice of backend framework
Deciders & Confidence:
Context
Rebutify's backend will primarily serve API endpoints. What framework will we use for Rebutify's backend?
Decision Drivers
Considered Options
Ruby on Rails
Ruby on Rails
:orange_circle: [Compatibility with team]
:green_circle: [Already completed Rebutify MVP features in ecosystem]
:orange_circle: [Scalability]
Django
Django
:green_circle: [Compatibility with team]
:green_circle: [API functionality]
:green_circle: [Support]
:orange_circle: [Scalability]
Next.js
Next.js
:green_circle: [Compatibility with team]
:green_circle: [API functionality]
:green_circle: [Support]
:orange_circle: [Scalability]
Decision Outcome
Chosen option: Django Reason: Django was chosen due to its strong compatibility with the team's existing skills, its robust API functionality through the Django Rest Framework, and the extensive community and support available, ensuring ease of onboarding and long-term project viability. The fact that something other than Django is more suitable for the frontend gives us the opportunity to choose Django for the backend and split the architecture in a more scalable way.