Checklist for a Backend Project¶
Here is a list of things you may want to keep in mind when starting a project that involves a Python backend. I wrote much of it following the tracks of the [12 Factor App](https://12factor.net/) paradigm:
Project Communication¶
What is the business value the project generates?
Who is on the project team?
How does the team communicate (face2face, chat, email, calendar, file exchange, Wiki, JIRA)?
Does the team work in iterations? How long are they?
Is there a requirements document? Is it updated?
Is there a single git repository available?
Architecture¶
What are your main use cases?
What is your data flow?
Do you have a pattern for the systems overall architecture (layered, star-shaped, hexagonal etc.)
How many separate physical machines does the project require?
Does a prototype exist?
What are your most important non-functional requirements?
What legal requlations do you need to comply to (GDPR etc.)
Are you using containers?
Do you need enough containers to justify Kubernetes?
welche Container gibt es?
How does the release/deployment process look like?
Will there be separate test/staging servers?
What special security / safety risks exist?
Credentials¶
How is authentication managed?
What roles are defined in the project?
Do end users need to authenticate?
Which protocols for authentication do you need (SSL, OAUTH2, two-factor-auth, Kerberos etc.)
Is there a central authentication service?
Within services, are credentials stored mainly in the environment?
What is the procedure when a team member leaves?
What is the procedure when you learn that your credentials have been compromised?
Databases¶
How much data are you expecting (now and in the future)?
How much traffic are you expecting?
Is there a data model already?
Which database system(s) do you choose? Consider: ease of use, rigor of the data model, core features, tool support, scalability, speed.
How will you migrate the data when the data model changes?
What data import processes do you anticipate?
Will it be possible to re-create the entire database from scratch?
How are backups of the database handled?
Web Servers¶
What availability do you need?
Does the project expose an API?
Is the API going to be public?
Will there be a HTML front-end?
Will there be a mobile app?
Will there be a proxy server (e.g. nginx)?
Will the backend use an ORM?
Will you use pydantic models for API endpoints?
How will you manage requirements?
Which language(s) will you use for the back-end/front-end parts?
How will you manage versions of the software (front-end and back-end)?
Software Quality¶
How will you write automated tests for the backend?
How will you write automated tests for the front-end?
How will you write end-to-end tests covering both parts?
Can you run slim tests against the production server?
Which CI tool are you going to use?
What software quality gates will you apply (pyflakes, mypy)?
Can you autmatically check for known security issues?
How is logging done? How can you access logs?
How is monitoring done (who is messaged when something goes wrong)?
do you have test users?