Read this: http://12factor.net/
Then. After reading it. Read it again to be sure you've got it. It's
dense with best practices.
Now that you've read it, make yourself a Quality Engineering
checklist.
I. Codebase: One codebase tracked in revision control, many deploys
II. Dependencies: Explicitly declare and isolate dependencies
III. Config: Store config in the environment
IV. Backing services: Treat backing services as attached resources
V. Build, release, run: Strictly separate build and run stages
VI. Processes: Execute the app as one or more stateless processes
VII. Port binding: Export services via port binding
VIII. Concurrency: Scale out via the process model
IX. Disposability: Maximize robustness with fast startup and graceful
shutdown
X. Dev/prod parity: Keep development, staging, and production as
similar as possible
XI. Logs: Treat logs as event streams
XII. Admin processes: Run admin/management tasks as one-off processes
If your app doesn't follow all of these patterns, you've got technical
debt to work off. Start by posting the debt remediation stories in
Jira (or whatever you're using.)
I've got config issues left, right, and center. Numerous assumptions
include the URL's for RESTful services on which my RESTful services
rely: this is not good.
Some of these things, however, are a done deed in the Python/Flask
world with no real thinking required.
- Build, release, run - done
- Processes - done
- Port binding - done
- Disposability - done
Other things require some care. And the config is something that I've
really got to fix.