Twelve Important Design Patterns
Designing software for today's world can and should involve numerous well-established patterns. Do you employ them?
Join the DZone community and get the full member experience.Join For Free
Read this: http://12factor.net/
I. Codebase: One codebase tracked in revision control, many deploys
Dependencies: Explicitly declare and isolate dependencies
Config: Store config in the environment
Backing services: Treat backing services as attached resources
Build, release, run: Strictly separate build and run stages
Processes: Execute the app as one or more stateless processes
Port binding: Export services via port binding
Concurrency: Scale out via the process model
Disposability: Maximize robustness with fast startup and graceful shutdown
Dev/prod parity: Keep development, staging, and production as similar as possible
Logs: Treat logs as event streams
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.
Published at DZone with permission of Steven Lott, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.