---
# System prepended metadata

title: Tandero Review

---

# Tandero Review

Consider the following comments: 

* Descriptive documentation on `README.md` or `docs/`:
    * Should contain a general description of the project.
    * Should contain a step-by-step guide for first-setup. 
    * Should contain a step-by-step guide for testing.
    * Should contain collaboration instructions and license. 

* Focus on reproducibility: 

    * Use environment variables to set up the project!
        * Application secrets and other variables can be placed in a `.env` file. You can load the `.env` with `export $(cat .env | xargs)`.
        * Avoid hard-coding sensible data into the application! (`SECRET_KEY`, database-passwords, etc)
        * Consider which other variables can be defined using environment variables (e.g. `DEBUG=true`).
        
    * Leverage python virtual-environments!
        * Use python virtualenv to isolate the dependencies (standalone python application): https://virtualenv.pypa.io/en/latest/ 
        * Create a `requirements.txt` file with all the dependencies (libraries + versions).
        * First-setup should reference these resources. 

    * Use a version control system (github).
        * Use development environments: `dev`, `stg`, `prd`.
        * Spin off branches from `dev` to implement new features. 
        * Stick to a "feature per branch". 
        * A complete feature should be testable!
        * Use PRs to merge from the feature-brach back to the `dev` branch. 
        * Periodic PRs from `dev -> stg` and from `stg -> prd`.

    * (optional) Dockerize the application!
        * Use docker to encapsulate dependencies. 
        * Define a docker-image for the Django project. 
        * Use docker-compose to manage external services (e.g., databases)

* Idiomatic Django/python

    * Remember that methods defined in a python class should contain a `self` as the first argument: `def method_name(self, arg1, arg2, ...)`
    * To create static-methods use the `@staticmethod` decorator. 
    * Each Django application contains a `test.py` file to do unit-testing. 
    * Configure the logging module! https://docs.djangoproject.com/en/2.2/topics/logging/ 
    * Follow the PEP8 style guide: https://www.python.org/dev/peps/pep-0008/ 
    * Note that python is usually written with the snake-case convention instead of camel-case. 

* Distribute python tasks! 
    * Consider using `celery` to distribute python tasks:
        * Standalone: http://www.celeryproject.org/
        * Django + Celery: https://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

    * Redis brocker is recommended (you can add this service in the docker-compose file). 