A fejlesztési és az üzemeltetési folyamatok legyenek annyira hasonlóak amennyire csak ez lehetséges.
- Az idő különbség: a fejlesztő a kódon dolgozhat napokig, hetekig vagy akár hónapokig, mire a munkája az üzemeltetett alkalmazásba kerülne.
- A személyi különbség: A fejlesztő írja a kódot, az üzemeltető mérnök telepíti azt.
- Az eszköz különbség: a fejlesztő dolgozhat olyan csomaggal, amiben Nginx, SQLite és OS X van, az üzemeltetés viszont Apache, MySQL és Linux környezetre telepíti az alkalmazást.
- Az időbeli különséget tegyük kicsivé: a fejlesztő írhatja a kódot, és az órák vagy akár percek múlva az üzemeltetésbe kerülhet.
- A személyi különbséget tegyük kicsivé: a kódot író fejlesztőt szorosan bevonjuk a a telepítésbe így közelről figyeli az üzemeltetésben az alkalmazás viselkedését.
- Az eszközökben megjelenő különbséget tegyük kicsivé: legyen a fejlesztési és az üzemeltetési környezet olyan hasonló, amennyire csak lehet.
Hagyományos alkalmazás | Tizenkét tényezős alkalmazás | |
Telepítések közötti idő | Hetek | Órák |
Kód létrehozó kontra telepítő | Különböző emberek | Ugyanazok az emberek |
Fejlesztési kontra üzemeltetés | Szétágazó, különböző | Amennyire lehetséges hasonló |
Típus | Nyelv | Könyvtár | Adapter |
Adatbázis | Ruby/Rails | ActiveRecord | MySQL, PostgreSQL, SQLite |
Üzenetsor | Python/Django | Celery | RabbitMQ, Beanstalkd, Redis |
Gyorsítótár | Ruby/Rails | ActiveSupport::Cache | Memory, filesystem, Memcached |
A tizenkét tényezős fejlesztő ellenál annak a kísértésnek, hogy más háttérszolgáltatást használjon a fejlesztési és az üzemeltetési környezetben még akkor is, ha az adapterek elméletileg bármilyen háttérszolgáltatások közötti különbséget eltüntetnek. A háttérszolgáltatások közötti különbségek azt jelenti, hogy apró inkompatibilitási problémák merülhetnek fel azt eredményezve, hogy a kód, ami működött és a teszteken megfelelően teljesített fejlesztési és tesztkörnyezetben, üzemeltetés közben hibára fut. A hibáknak ez a típusa súrlódást hoz létre ami a folyamatos telepítést akadályozza. Ennek a surlódásnak a negatív hatása a folyamatos telepítésre és az alkalmazás életciklusára összegzett kültsége rendkívül magas.
A pehelysúlyú háttérszolgáltatások ma már kevésbé vonzóak, mint korábban voltak. A modern háttérszolgáltatásokat, mint a Memcached, a PostgreSQL és a RabbitMQ a modern csomagkezelési rendszereknek köszönhetően -mint a Homebrew és az apt-get, (vagy a Windows világban a nuget és chocolatey) egyáltalán nem körülményes telepíteni és futtatni. Alternatív megoldásként a deklaratív telepítő eszközök, mint a Chef és a Puppet, kombinálva a vékony virtuális rendszerekkel, mint a Docker és a Vagrant lehetővé teszi a fejlesztők számára, hogy az üzemeltetési környezethez nagyon hasonló fejlesztési környezetben dolgozhassanak. Ezen rendszerek telepítésének és használatának a költsége alacsony - összehasonlítva a fejlesztési és üzemeltetési egyensúllyal valamint a folyamatos telepítés előnyeivel.
A háttérszolgáltatások eléréséhez adaptereket használni továbbra is hasznos, mivel az újabb háttérszolgáltatásokra való áttéréet relatív fájdalommentessé teszik. De az alkalmazás valamennyi telepítésének (fejlesztési környezet, tesztelés és üzemeltetés) azonos típusú és verziójú háttérszolgáltatásokat kell használnia.
The Twelve-Factor App: X. Dev/prod parity