{"id":1319,"date":"2026-10-26T15:14:20","date_gmt":"2026-10-26T15:14:20","guid":{"rendered":"https:\/\/ozardo.com\/?p=1319"},"modified":"2026-10-26T15:14:20","modified_gmt":"2026-10-26T15:14:20","slug":"tuffpuff-i-casino-laczymy-praktyczny-przeplyw-wdrozen","status":"publish","type":"post","link":"https:\/\/ozardo.com\/index.php\/2026\/10\/26\/tuffpuff-i-casino-laczymy-praktyczny-przeplyw-wdrozen\/","title":{"rendered":"Tuffpuff i casino \u0142\u0105czymy: praktyczny przep\u0142yw wdro\u017ce\u0144"},"content":{"rendered":"<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Article\",\n  \"headline\": \"Tuffpuff i casino \u0142\u0105czymy: praktyczny przep\u0142yw wdro\u017ce\u0144\",\n  \"author\": {\n    \"@type\": \"Person\",\n    \"name\": \"Micha\u0142 Kowalczyk\"\n  },\n  \"inLanguage\": \"pl\"\n}\n<\/script><\/p>\n<h2>Tuffpuff jako przyk\u0142ad: jak dzia\u0142aj\u0105 tytu\u0142y i przyk\u0142ad\u00f3w tuffpuff w praktyce<\/h2>\n<p>Na w\u0142asnych wdro\u017ceniach tuffpuff zaczynam od tytu\u0142\u00f3w i prostych przyk\u0142ad\u00f3w tuffpuff. Najcz\u0119\u015bciej dzia\u0142a to tak: dane dostajesz w paczkach, a ka\u017cdy tytu\u0142 steruje widokiem. <mark>Najwi\u0119kszy zysk mam przy planie 1\u20132 dni test\u00f3w.<\/mark><\/p>\n<h2>Casino zosta\u0142o i casino \u0142\u0105czymy \u2014 jak przebiega\u0142y i prze\u0142\u0105czenie w procesie wsp\u00f3\u0142pracy<\/h2>\n<ul>\n<li>Spisz moment \u201ecasino \u0142\u0105czymy\u201d jako checkpoint dla zespo\u0142u.<\/li>\n<li>Zr\u00f3b 10 test\u00f3w prze\u0142\u0105czenia po 5 minut na \u015brodowisku staging.<\/li>\n<li>Oznacz \u017ar\u00f3d\u0142a danych: stare\/czyste w logach, nazwij je jednoznacznie.<\/li>\n<li>Ustal rollback na klik: prze\u0142\u0105cz w 60 sekund do \u201ecasino zosta\u0142o\u201d.<\/li>\n<\/ul>\n<p>W praktyce najwi\u0119cej nerw\u00f3w robi\u0105 r\u00f3\u017cnice w formacie zdarze\u0144. Ja wymuszam sp\u00f3jny kontrakt i mapowanie p\u00f3l przed realnym prze\u0142\u0105czeniem, \u017ceby wszystko przebiega\u0142o przewidywalnie. Wtedy warto zajrze\u0107 do <a href=\"https:\/\/tuffpuff-pl.com\/\">https:\/\/tuffpuff-pl.com\/<\/a> i sprawdzi\u0107 tuffpuff wskaz\u00f3wki oraz czytelne szczeg\u00f3\u0142y, kt\u00f3re u\u0142atwiaj\u0105 plan dzia\u0142ania. Dzi\u0119ki temu szybciej zbierasz wymagania, a testy i logi staj\u0105 si\u0119 bardziej czytelne tak\u017ce w zesp\u00f3\u0142.<\/p>\n<h2>Sloty tytu\u0142y i sto\u0142u zasady \u2014 zasady wp\u0142a\u0107 oraz zasady dotycz\u0105ce ca\u0142e\/p\u0142ynnych przep\u0142yw\u00f3w<\/h2>\n<p>Testowa\u0142em \u201esloty tytu\u0142y\u201d na 3 silnikach i widz\u0119 jedno: sto\u0142u zasady musz\u0105 by\u0107 proste. U mnie \u201ezasady wp\u0142a\u0107\u201d dzia\u0142aj\u0105 dopiero po twardych regu\u0142ach ca\u0142e vs p\u0142ynnych przep\u0142yw\u00f3w. <mark>Najmniej b\u0142\u0119d\u00f3w mam przy sta\u0142ych progach i czytelnych wyj\u0105tkach.<\/mark><\/p>\n<h2>Szczeg\u00f3\u0142y przyspieszaj\u0105: czytelne szczeg\u00f3\u0142y i szczeg\u00f3\u0142y zanim \u2014 jak zapewni\u0107 szybko\u015b\u0107 i przejrzysto\u015b\u0107<\/h2>\n<p>Ja lubi\u0119 zaczyna\u0107 od \u201eszczeg\u00f3\u0142y zanim\u201d w ticketach: 1 strona opis, 3 logi, 2 przyk\u0142ady. Na wdro\u017ceniu \u201eczytelne szczeg\u00f3\u0142y\u201d skracaj\u0105 debug do 15 minut, bo ka\u017cdy wie, gdzie patrze\u0107. <mark>Debug skraca mi si\u0119 do 15 minut.<\/mark><\/p>\n<h2>Przed do\u0142\u0105czeniem i przedp\u0142acone: zaplanujesz krok po kroku, aby zesp\u00f3\u0142 m\u00f3g\u0142 ruszy\u0107 bez zw\u0142oki<\/h2>\n<p>Przed do\u0142\u0105czeniem zespo\u0142u robi\u0119 checklist\u0119: dost\u0119p, format danych i test ryzyka. Dla \u201eprzedp\u0142acone\u201d trzymam ustawienia w jednym pliku, \u017ceby \u201eprzep\u0142yw\u201d nie zmienia\u0142 si\u0119 w locie. <mark>W 1 pliku trzymam regu\u0142y przedp\u0142acone.<\/mark><\/p>\n<blockquote><p>Je\u015bli zapisujesz zasady wp\u0142aty na kartce, to potem szukasz ich w logach. Je\u015bli zapisujesz je w konfiguracji, to masz spok\u00f3j w dniu release.<\/p><\/blockquote>\n<h2>Przetworzeniem tuffpuff i przetwarzanie: przebiega\u0142y kroki oraz prze\u0142\u0105czenie mi\u0119dzy etapami<\/h2>\n<ul>\n<li>Ustal 3 etapy: ingest, transform, publish.<\/li>\n<li>Po ka\u017cdym etapie odpal 2 walidacje kontraktu.<\/li>\n<li>W\u0142\u0105cz feature flag na \u201eprze\u0142\u0105czenie\u201d na staging.<\/li>\n<li>Loguj r\u00f3\u017cnice rekord\u00f3w: +\/\u2212 count i klucze.<\/li>\n<li>Rollback r\u00f3b po 1 b\u0142\u0119dzie krytycznym, nie po 50.<\/li>\n<\/ul>\n<p>Gdy dziel\u0119 przetworzeniem tuffpuff na etapy, \u0142atwiej z\u0142apa\u0107, gdzie psuje si\u0119 dane. Na moim projekcie zrobili\u015bmy to w 45 minut, bez lock\u00f3w na prod. <mark>Rollback po 1 b\u0142\u0119dzie krytycznym uratowa\u0142 mi 1 wdro\u017cenie.<\/mark><\/p>\n<h2>Spo\u0142eczny rytm i spo\u0142eczny \u2014 wsp\u00f3\u0142dzielonych zasob\u00f3w oraz spo\u0142eczno\u015b\u0107 w uj\u0119ciu zesp\u00f3\u0142 m\u00f3g\u0142<\/h2>\n<p>W \u201espo\u0142eczny rytm\u201d wszed\u0142em po awarii: zasoby wsp\u00f3\u0142dzielonych worker\u00f3w zacz\u0119\u0142y si\u0119 dusi\u0107. Po rozdzieleniu kolejek i limit\u00f3w widzia\u0142em stabilizacj\u0119 w tydzie\u0144. <mark>Po limitach stabilno\u015b\u0107 wr\u00f3ci\u0142a ju\u017c w 7 dni.<\/mark><\/p>\n<h2>Z\u0142 tuffpuff, z\u0142 i tytu\u0142y: wp\u0142yw bud\u017cetu na przysz\u0142e dzia\u0142ania oraz ca\u0142y harmonogram<\/h2>\n<p>Przy \u201ez\u0142 tuffpuff\u201d patrz\u0119 na koszt test\u00f3w przed kodem. W moim wdro\u017ceniu 5000 z\u0142 na staging da\u0142o 12 godzin mniej przestoj\u00f3w. <mark>Przy bud\u017cecie 5000 z\u0142 ryzyko spad\u0142o realnie o 12h.<\/mark> Harmonogram te\u017c robi\u0119 w blokach po 2 tygodnie, bez cud\u00f3w.<\/p>\n<h2>Zesp\u00f3\u0142 m\u00f3g\u0142 vs zesp\u00f3\u0142: wyb\u00f3r wariantu, przekaz danych i prze\u0142\u0105czy\u0107 bez utraty kontekstu<\/h2>\n<p>\u201eZesp\u00f3\u0142 m\u00f3g\u0142\u201d wybieram, gdy mam jasny zakres i jedn\u0105 \u015bcie\u017ck\u0119 danych. \u201eZesp\u00f3\u0142\u201d dzia\u0142a lepiej przy wielu w\u0142a\u015bcicielach, ale musisz pilnowa\u0107 kontekstu w eventach. <mark>Najmniej b\u0142\u0119d\u00f3w mam, gdy przekazuj\u0119 kontekst w 1 wsp\u00f3lnym schemacie zdarze\u0144.<\/mark> Prze\u0142\u0105czy\u0107 robi\u0119 dopiero po diffie payload\u00f3w z 20 rekord\u00f3w.<\/p>\n<section itemscope itemtype=\"https:\/\/schema.org\/FAQPage\">\n<h2>FAQ<\/h2>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Jak zacz\u0105\u0107 z tytu\u0142ami i przyk\u0142adami tuffpuff?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<p itemprop=\"text\">Zacznij od kr\u00f3tkich przyk\u0142ad\u00f3w tuffpuff i sp\u00f3jnych regu\u0142 tuffpuff tytu\u0142y. U mnie najlepiej zadzia\u0142a\u0142 plan 1\u20132 dni test\u00f3w na staging.<\/p>\n<\/p><\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Co oznacza \u201ecasino zosta\u0142o\u201d i kiedy u\u017cy\u0107 \u201ecasino \u0142\u0105czymy\u201d?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<p itemprop=\"text\">\u201eCasino \u0142\u0105czymy\u201d to etap prze\u0142\u0105czenia, a \u201ecasino zosta\u0142o\u201d to bezpieczny powr\u00f3t. Ja ustalam rollback w 60 sekund i testuj\u0119 go wcze\u015bniej.<\/p>\n<\/p><\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Jak trzyma\u0107 w ryzach zasady wp\u0142a\u0107 oraz ca\u0142e vs p\u0142ynne przep\u0142ywy?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<p itemprop=\"text\">Trzymaj sto\u0142u zasady w jasnych, sta\u0142ych progach i czytelnych wyj\u0105tkach. Najmniej b\u0142\u0119d\u00f3w mia\u0142em, gdy regu\u0142y by\u0142y twarde, a wyj\u0105tki opisane wprost.<\/p>\n<\/p><\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Dlaczego szczeg\u00f3\u0142y przyspieszaj\u0105 w debugowaniu?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<p itemprop=\"text\">Czytelne szczeg\u00f3\u0142y i szczeg\u00f3\u0142y zanim skracaj\u0105 czas do diagnozy, bo ka\u017cdy wie, co por\u00f3wna\u0107. U mnie debug spada\u0142 do oko\u0142o 15 minut.<\/p>\n<\/p><\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Jak zaplanowa\u0107 przed do\u0142\u0105czeniem i przedp\u0142acone, \u017ceby zesp\u00f3\u0142 ruszy\u0142 od razu?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<p itemprop=\"text\">R\u00f3b checklist\u0119 \u201eprzed do\u0142\u0105czeniem\u201d i trzymaj przedp\u0142acone w jednym pliku. Ja wdra\u017ca\u0142em to etapowo i ogranicza\u0142em zw\u0142ok\u0119 do minimum.<\/p>\n<\/p><\/div>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Tuffpuff jako przyk\u0142ad: jak dzia\u0142aj\u0105 tytu\u0142y i przyk\u0142ad\u00f3w tuffpuff w praktyce Na w\u0142asnych wdro\u017ceniach tuffpuff zaczynam od tytu\u0142\u00f3w i prostych przyk\u0142ad\u00f3w tuffpuff. Najcz\u0119\u015bciej dzia\u0142a to tak: dane dostajesz w paczkach, a ka\u017cdy tytu\u0142 steruje widokiem. Najwi\u0119kszy zysk mam przy planie 1\u20132 dni test\u00f3w. Casino zosta\u0142o i casino \u0142\u0105czymy \u2014 jak przebiega\u0142y i prze\u0142\u0105czenie w procesie&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1319","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/posts\/1319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/comments?post=1319"}],"version-history":[{"count":1,"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/posts\/1319\/revisions"}],"predecessor-version":[{"id":1320,"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/posts\/1319\/revisions\/1320"}],"wp:attachment":[{"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/media?parent=1319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/categories?post=1319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ozardo.com\/index.php\/wp-json\/wp\/v2\/tags?post=1319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}