Twelve-Factor App methodology
This article needs additional citations for verification. (December 2017) |
Part of a series on |
Software development |
---|
The Twelve-Factor App methodology is a methodology for building software as a service applications. These best practices are designed to enable applications to be built with portability and resilience when deployed to the web.[1]
History
The methodology was drafted by developers at Heroku and was first presented by Adam Wiggins circa 2011.[1]
The Twelve Factors
# | Factor | Description |
---|---|---|
I | Codebase | There should be exactly one codebase for a deployed service with the codebase being used for many deployments. |
II | Dependencies | All dependencies should be declared, with no implicit reliance on system tools or libraries. |
III | Config | Configuration that varies between deployments should be stored in the environment. |
IV | Backing services | All backing services are treated as attached resources and attached and detached by the execution environment. |
V | Build, release, run | The delivery pipeline should strictly consist of build, release, run. |
VI | Processes | Applications should be deployed as one or more stateless processes with persisted data stored on a backing service. |
VII | Port binding | Self-contained services should make themselves available to other services by specified ports. |
VIII | Concurrency | Concurrency is advocated by scaling individual processes. |
IX | Disposability | Fast startup and shutdown are advocated for a more robust and resilient system. |
X | Dev/Prod parity | All environments should be as similar as possible. |
XI | Logs | Applications should produce logs as event streams and leave the execution environment to aggregate. |
XII | Admin Processes | Any needed admin tasks should be kept in source control and packaged with the application. |
Criticism and adaptation
As of 2017[update] a number of more recent references to the Twelve-Factor app may comment on how it is a creditworthy effort remaining generally applicable but have suggested they feel some principles were specific to Heroku Platform as a service.[3]. The twelve factors are however cited as the baseline methodology from which it has been felt necessary to adapt or extend. [3][4]
As of 2018[update] and since at least 2014 at least one open source project guidelines refer developers to the Twelve Factor App methodology for principles of good app design.[5]
References
- ^ a b c Hofmann,, Michael; Schnabel, Erin; Stanley, Katherine (13 March 2017). Microservices Best Practices for Java. IBM Redbooks. p. 2—3. ISBN 9780738442273.
{{cite book}}
: CS1 maint: extra punctuation (link) - ^ Wiggins, Adam. "The Twelve-Factor App". Archived from the original on 13 June 2017. Retrieved 21 December 2017.
- ^ a b Horowitz, Ben (28 July 2016). "MRA, Part 5: Adapting the Twelve‑Factor App for Microservices". NGINX. Archived from the original on 22 December 2017. Retrieved 22 December 2017.
{{cite web}}
: Unknown parameter|dead-url=
ignored (|url-status=
suggested) (help) - ^ "Beyond the Twelve-Factor App - Exploring the DNA of Highly Scalable, Resilient Cloud Applications". O'Reilly. Retrieved 22 December 2017.
- ^ <ref name="CF-DEV2013"}{{cite web|url=https://docs.cloudfoundry.org/devguide/deploy-apps/prepare-to-deploy.html%7Ctitle=Prepare to Deploy an Application - Application Design for the Cloud|website=Cloud Foundry|dead-url=yes|archive-url=https://web.archive.org/web/20140305003530/http://docs.cloudfoundry.org:80/devguide/deploy-apps/prepare-to-deploy.html%7Carchive-date=5 March 2014}} Cite error: The
<ref>
tag has too many names (see the help page).