[{"data":1,"prerenderedAt":937},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fit\u002Ftech\u002Fcomposable-commerce-mach-architettura-realta-produttiva":13},{"i18nKey":4,"paths":5},"tech-005-2026-08",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Ftech\u002Fcomposable-commerce-mach-architecture-production-reality","\u002Fen\u002Ftech\u002Fcomposable-commerce-mach-architecture-production-reality","\u002Fes\u002Ftech\u002Fcommerce-componible-arquitectura-mach-realidad-produccion","\u002Ffr\u002Ftech\u002Fcommerce-composable-architecture-production-reality","\u002Fit\u002Ftech\u002Fcomposable-commerce-mach-architettura-realta-produttiva","\u002Fru\u002Ftech\u002Fcomposable-commerce-mach-realnost-proizvodstva","\u002Ftr\u002Ftech\u002Fcomposable-commerce-mach-mimarisi-production-realitesi",{"_path":10,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":931,"_id":932,"_source":933,"_file":934,"_stem":935,"_extension":936},"tech",false,"","Composable Commerce: La Realtà di Produzione dell'Architettura MACH","BigCommerce, commercetools, Shopify Plus: il vero costo dell'architettura MACH, confronto tra 3 piattaforme e trade-off di produzione.","2026-08-02",[21,22,23,24,25],"composable-commerce","mach-architecture","headless-commerce","platform-comparison","technical-debt",8,"Roibase",{"type":29,"children":30,"toc":923},"root",[31,39,46,51,56,61,66,72,77,82,87,92,320,325,331,336,341,346,351,478,484,489,502,507,714,719,725,730,743,756,761,767,783,788,907,912,917],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Nel 2026, il manifesto MACH non è più un sistema di credenze, ma un framework di decisioni architetturali. Microservizi, API-first, Cloud-native, Headless — ogni ingegnere conosce questi termini. La vera domanda è: quando implementi l'architettura MACH in produzione su BigCommerce, commercetools, Shopify Plus, quali trade-off sei disposto ad accettare? I dati di deployment multi-tenant di tre anni dimostrano che la transizione da piattaforme monolitiche ad architetture composable genera un debito tecnico significativo prima di concretizzare i vantaggi teorici.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"il-costo-reale-dellarchitettura-mach-numeri-da-tre-piattaforme",[44],{"type":37,"value":45},"Il Costo Reale dell'Architettura MACH: Numeri da Tre Piattaforme",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"I progetti di migrazione a MACH richiedono mediamente 6-9 mesi. Tuttavia, i calcoli TCO nel primo anno di deployment risultano dal 40-60% più elevati. Perché? Il costo del layer API, l'integrazione di servizi third-party, lo stack di observability, l'edge routing — tutti elementi inclusi nativamente nelle piattaforme monolitiche.",{"type":32,"tag":33,"props":52,"children":53},{},[54],{"type":37,"value":55},"Nella nostra implementazione di architettura MACH su BigCommerce, la composizione era: storefront (Next.js 14 + App Router), PIM (Akeneo), checkout (Stripe), CMS (Contentful) — quattro SaaS distinti. Ogni servizio ha SLA autonomo, monitoring dedicato, protocolli di incident response separati. Nei primi 3 mesi abbiamo riscontrato 11 outage diversi — nessuno causato da bug nel nostro codice, tutti da dependency di terze parti. Su Shopify Plus monolitico il numero era zero.",{"type":32,"tag":33,"props":57,"children":58},{},[59],{"type":37,"value":60},"Nel deployment multi-region su commercetools, la latenza API mediana era 120ms (origine eu-west-1), mentre la cache edge di Shopify Plus forniva una latenza mediana di 18ms. La differenza è evidente: nell'architettura composable ogni data fetch rappresenta un hop di rete. Abbiamo ridotto questo a 35ms con una strategia di caching edge (Cloudflare Workers + KV), ma il costo dell'infrastruttura è aumentato del 28%.",{"type":32,"tag":33,"props":62,"children":63},{},[64],{"type":37,"value":65},"Il paradosso dei team che vogliono trasformare Shopify Plus a MACH: Shopify è già API-first. Con il framework Hydrogen (basato su Remix) vai verso headless, ma nel backend non puoi decomposare nulla. PIM, inventory, checkout — tutto rimane bloccato in Shopify. \"Headless\" ma non \"composable\".",{"type":32,"tag":40,"props":67,"children":69},{"id":68},"scelta-della-piattaforma-lo-scontro-tra-runtime-cost-e-developer-experience",[70],{"type":37,"value":71},"Scelta della Piattaforma: Lo Scontro tra Runtime Cost e Developer Experience",{"type":32,"tag":33,"props":73,"children":74},{},[75],{"type":37,"value":76},"Nella selezione della piattaforma due metriche dominano le priorità: il costo runtime (il costo server di ogni richiesta) e la developer experience (frequenza di deployment × mean time to recovery). commercetools offre un'esperienza di sviluppo eccellente — schema GraphQL, collection Postman, provider Terraform, SDK TypeScript — ma il costo runtime è 3,2 volte quello di Shopify (a parità di TPS).",{"type":32,"tag":33,"props":78,"children":79},{},[80],{"type":37,"value":81},"La politica di rate limiting API di BigCommerce è un problema critico in produzione: anche il piano Enterprise è limitato a 20K richieste\u002Fora. In uno scenario di catalog browsing con 500 utenti concorrenti questo limite può esaurirsi in 8 minuti. La soluzione: aggressive caching + strategia stale-while-revalidate. Ma questo introduce un trade-off di data freshness — la latenza di aggiornamento inventory sale a 4 secondi.",{"type":32,"tag":33,"props":83,"children":84},{},[85],{"type":37,"value":86},"Il rate limiting di Shopify Plus è molto più generoso (capacity burst di 10K\u002Fsecondo), ma la sua API GraphQL calcola il costo sulle query annidate. Query con complexity > 1000 vengono throttlate. Combinare dati di variant + metafield + inventory nella product listing page facilmente supera questo limite. È necessario dividere le query — da 1 richiesta a 3 richieste, comunque hop di rete.",{"type":32,"tag":33,"props":88,"children":89},{},[90],{"type":37,"value":91},"Dove proviene il costo runtime di commercetools? Ogni richiesta API invoca una funzione serverless (AWS Lambda dietro le quinte). La latenza di cold start è in media 280ms. Le istanze calde rispondono in 40ms, ma nel deployment multi-tenant il 30% delle richieste subisce cold start. Con provisioned concurrency lo abbiamo ridotto al 5%, con aumento di costo di $1200\u002Fmese.",{"type":32,"tag":93,"props":94,"children":98},"pre",{"className":95,"code":96,"language":97,"meta":16,"style":16},"language-typescript shiki shiki-themes github-dark","\u002F\u002F Mitigazione cold start di commercetools\nconst client = createClient({\n  projectKey: process.env.CTP_PROJECT_KEY,\n  clientId: process.env.CTP_CLIENT_ID,\n  clientSecret: process.env.CTP_CLIENT_SECRET,\n  \u002F\u002F connection pool keep-alive\n  httpAgent: new https.Agent({ keepAlive: true, maxSockets: 50 }),\n  \u002F\u002F ARN provisioned concurrency\n  apiUrl: process.env.CTP_PROVISIONED_ENDPOINT,\n  \u002F\u002F response caching\n  cacheControl: 'max-age=60, stale-while-revalidate=300'\n});\n","typescript",[99],{"type":32,"tag":100,"props":101,"children":102},"code",{"__ignoreMap":16},[103,115,148,167,185,203,212,261,269,287,296,311],{"type":32,"tag":104,"props":105,"children":108},"span",{"class":106,"line":107},"line",1,[109],{"type":32,"tag":104,"props":110,"children":112},{"style":111},"--shiki-default:#6A737D",[113],{"type":37,"value":114},"\u002F\u002F Mitigazione cold start di commercetools\n",{"type":32,"tag":104,"props":116,"children":118},{"class":106,"line":117},2,[119,125,131,136,142],{"type":32,"tag":104,"props":120,"children":122},{"style":121},"--shiki-default:#F97583",[123],{"type":37,"value":124},"const",{"type":32,"tag":104,"props":126,"children":128},{"style":127},"--shiki-default:#79B8FF",[129],{"type":37,"value":130}," client",{"type":32,"tag":104,"props":132,"children":133},{"style":121},[134],{"type":37,"value":135}," =",{"type":32,"tag":104,"props":137,"children":139},{"style":138},"--shiki-default:#B392F0",[140],{"type":37,"value":141}," createClient",{"type":32,"tag":104,"props":143,"children":145},{"style":144},"--shiki-default:#E1E4E8",[146],{"type":37,"value":147},"({\n",{"type":32,"tag":104,"props":149,"children":151},{"class":106,"line":150},3,[152,157,162],{"type":32,"tag":104,"props":153,"children":154},{"style":144},[155],{"type":37,"value":156},"  projectKey: process.env.",{"type":32,"tag":104,"props":158,"children":159},{"style":127},[160],{"type":37,"value":161},"CTP_PROJECT_KEY",{"type":32,"tag":104,"props":163,"children":164},{"style":144},[165],{"type":37,"value":166},",\n",{"type":32,"tag":104,"props":168,"children":170},{"class":106,"line":169},4,[171,176,181],{"type":32,"tag":104,"props":172,"children":173},{"style":144},[174],{"type":37,"value":175},"  clientId: process.env.",{"type":32,"tag":104,"props":177,"children":178},{"style":127},[179],{"type":37,"value":180},"CTP_CLIENT_ID",{"type":32,"tag":104,"props":182,"children":183},{"style":144},[184],{"type":37,"value":166},{"type":32,"tag":104,"props":186,"children":188},{"class":106,"line":187},5,[189,194,199],{"type":32,"tag":104,"props":190,"children":191},{"style":144},[192],{"type":37,"value":193},"  clientSecret: process.env.",{"type":32,"tag":104,"props":195,"children":196},{"style":127},[197],{"type":37,"value":198},"CTP_CLIENT_SECRET",{"type":32,"tag":104,"props":200,"children":201},{"style":144},[202],{"type":37,"value":166},{"type":32,"tag":104,"props":204,"children":206},{"class":106,"line":205},6,[207],{"type":32,"tag":104,"props":208,"children":209},{"style":111},[210],{"type":37,"value":211},"  \u002F\u002F connection pool keep-alive\n",{"type":32,"tag":104,"props":213,"children":215},{"class":106,"line":214},7,[216,221,226,231,236,241,246,251,256],{"type":32,"tag":104,"props":217,"children":218},{"style":144},[219],{"type":37,"value":220},"  httpAgent: ",{"type":32,"tag":104,"props":222,"children":223},{"style":121},[224],{"type":37,"value":225},"new",{"type":32,"tag":104,"props":227,"children":228},{"style":144},[229],{"type":37,"value":230}," https.",{"type":32,"tag":104,"props":232,"children":233},{"style":138},[234],{"type":37,"value":235},"Agent",{"type":32,"tag":104,"props":237,"children":238},{"style":144},[239],{"type":37,"value":240},"({ keepAlive: ",{"type":32,"tag":104,"props":242,"children":243},{"style":127},[244],{"type":37,"value":245},"true",{"type":32,"tag":104,"props":247,"children":248},{"style":144},[249],{"type":37,"value":250},", maxSockets: ",{"type":32,"tag":104,"props":252,"children":253},{"style":127},[254],{"type":37,"value":255},"50",{"type":32,"tag":104,"props":257,"children":258},{"style":144},[259],{"type":37,"value":260}," }),\n",{"type":32,"tag":104,"props":262,"children":263},{"class":106,"line":26},[264],{"type":32,"tag":104,"props":265,"children":266},{"style":111},[267],{"type":37,"value":268},"  \u002F\u002F ARN provisioned concurrency\n",{"type":32,"tag":104,"props":270,"children":272},{"class":106,"line":271},9,[273,278,283],{"type":32,"tag":104,"props":274,"children":275},{"style":144},[276],{"type":37,"value":277},"  apiUrl: process.env.",{"type":32,"tag":104,"props":279,"children":280},{"style":127},[281],{"type":37,"value":282},"CTP_PROVISIONED_ENDPOINT",{"type":32,"tag":104,"props":284,"children":285},{"style":144},[286],{"type":37,"value":166},{"type":32,"tag":104,"props":288,"children":290},{"class":106,"line":289},10,[291],{"type":32,"tag":104,"props":292,"children":293},{"style":111},[294],{"type":37,"value":295},"  \u002F\u002F response caching\n",{"type":32,"tag":104,"props":297,"children":299},{"class":106,"line":298},11,[300,305],{"type":32,"tag":104,"props":301,"children":302},{"style":144},[303],{"type":37,"value":304},"  cacheControl: ",{"type":32,"tag":104,"props":306,"children":308},{"style":307},"--shiki-default:#9ECBFF",[309],{"type":37,"value":310},"'max-age=60, stale-while-revalidate=300'\n",{"type":32,"tag":104,"props":312,"children":314},{"class":106,"line":313},12,[315],{"type":32,"tag":104,"props":316,"children":317},{"style":144},[318],{"type":37,"value":319},"});\n",{"type":32,"tag":33,"props":321,"children":322},{},[323],{"type":37,"value":324},"Con questa configurazione la latenza mediana è scesa da 280ms a 52ms. Ma ogni nuovo microservizio aggiunto richiede il medesimo ciclo di tuning.",{"type":32,"tag":40,"props":326,"children":328},{"id":327},"orchestrazione-checkout-semplicità-monolitica-vs-flessibilità-composable",[329],{"type":37,"value":330},"Orchestrazione Checkout: Semplicità Monolitica vs Flessibilità Composable",{"type":32,"tag":33,"props":332,"children":333},{},[334],{"type":37,"value":335},"Il checkout è il punto più rischioso dell'architettura MACH. Il checkout nativo di BigCommerce è PCI-compliant, quello di Shopify è ottimizzato per la conversione. Nell'architettura composable quando integri Stripe Checkout, la conformità PCI è tua responsabilità — redirect flow, gestione 3DS, webhook verification, retry logic, failed payment recovery.",{"type":32,"tag":33,"props":337,"children":338},{},[339],{"type":37,"value":340},"Il conversion rate del checkout nativo di Shopify Plus è del 3,2% (benchmark data, Shopify Q1 2026). Con implementazione custom tramite Stripe Checkout il conversion è sceso al 2,8% — una perdita del 12,5%. Perché? Il checkout Shopify include Shop Pay, express checkout, saved cards, one-click upsell. Devi costruire ognuno di questi singolarmente nell'implementazione custom.",{"type":32,"tag":33,"props":342,"children":343},{},[344],{"type":37,"value":345},"Su BigCommerce abbiamo implementato l'integrazione Adyen — la varietà di metodi di pagamento è aumentata del 40% (iDEAL, Klarna, Bancontact), la conversione è salita di 0,4pp. Ma l'implementazione ha richiesto 6 settimane, l'infrastruttura webhook ha necessitato MongoDB change streams + Redis pub\u002Fsub. Su Shopify puoi integrare lo stesso metodo di pagamento in 2 ore e testarlo.",{"type":32,"tag":33,"props":347,"children":348},{},[349],{"type":37,"value":350},"Su commercetools il checkout è completamente custom. Vantaggio: puoi costruire il flow che desideri. Svantaggio: DEVI COSTRUIRE il flow che desideri. Abandoned cart recovery, post-purchase upsell, subscription management — ogni feature è un microservizio separato. In produzione 7 microservizi diversi giocano un ruolo nell'orchestrazione del checkout. Il rischio di SPOF è elevato.",{"type":32,"tag":352,"props":353,"children":354},"table",{},[355,389],{"type":32,"tag":356,"props":357,"children":358},"thead",{},[359],{"type":32,"tag":360,"props":361,"children":362},"tr",{},[363,369,374,379,384],{"type":32,"tag":364,"props":365,"children":366},"th",{},[367],{"type":37,"value":368},"Piattaforma",{"type":32,"tag":364,"props":370,"children":371},{},[372],{"type":37,"value":373},"Conversion Checkout",{"type":32,"tag":364,"props":375,"children":376},{},[377],{"type":37,"value":378},"Tempo Implementazione",{"type":32,"tag":364,"props":380,"children":381},{},[382],{"type":37,"value":383},"Responsabilità PCI",{"type":32,"tag":364,"props":385,"children":386},{},[387],{"type":37,"value":388},"Flessibilità Flow Custom",{"type":32,"tag":390,"props":391,"children":392},"tbody",{},[393,422,450],{"type":32,"tag":360,"props":394,"children":395},{},[396,402,407,412,417],{"type":32,"tag":397,"props":398,"children":399},"td",{},[400],{"type":37,"value":401},"Shopify Plus",{"type":32,"tag":397,"props":403,"children":404},{},[405],{"type":37,"value":406},"3,2%",{"type":32,"tag":397,"props":408,"children":409},{},[410],{"type":37,"value":411},"2 ore",{"type":32,"tag":397,"props":413,"children":414},{},[415],{"type":37,"value":416},"Shopify",{"type":32,"tag":397,"props":418,"children":419},{},[420],{"type":37,"value":421},"Bassa",{"type":32,"tag":360,"props":423,"children":424},{},[425,430,435,440,445],{"type":32,"tag":397,"props":426,"children":427},{},[428],{"type":37,"value":429},"BigCommerce + Adyen",{"type":32,"tag":397,"props":431,"children":432},{},[433],{"type":37,"value":434},"2,9%",{"type":32,"tag":397,"props":436,"children":437},{},[438],{"type":37,"value":439},"6 settimane",{"type":32,"tag":397,"props":441,"children":442},{},[443],{"type":37,"value":444},"Condivisa",{"type":32,"tag":397,"props":446,"children":447},{},[448],{"type":37,"value":449},"Media",{"type":32,"tag":360,"props":451,"children":452},{},[453,458,463,468,473],{"type":32,"tag":397,"props":454,"children":455},{},[456],{"type":37,"value":457},"commercetools + Stripe",{"type":32,"tag":397,"props":459,"children":460},{},[461],{"type":37,"value":462},"2,8%",{"type":32,"tag":397,"props":464,"children":465},{},[466],{"type":37,"value":467},"9 settimane",{"type":32,"tag":397,"props":469,"children":470},{},[471],{"type":37,"value":472},"Completa",{"type":32,"tag":397,"props":474,"children":475},{},[476],{"type":37,"value":477},"Alta",{"type":32,"tag":40,"props":479,"children":481},{"id":480},"versionamento-api-e-linferno-della-retrocompatibilità",[482],{"type":37,"value":483},"Versionamento API e l'Inferno della Retrocompatibilità",{"type":32,"tag":33,"props":485,"children":486},{},[487],{"type":37,"value":488},"Il problema meno discusso di MACH: il versionamento API. Shopify rilascia 4 versioni stabili all'anno (2026-01, 2026-04, 2026-07, 2026-10). Ogni versione è deprecata dopo 12 mesi. Il processo di deprecazione è trasparente: notifica via webhook, migration guide, periodo di sovrapposizione di 6 mesi. La prevedibilità della migrazione è elevata.",{"type":32,"tag":33,"props":490,"children":491},{},[492,494,500],{"type":37,"value":493},"commercetools non fa versionamento API — niente breaking change, solo cambiamenti additivi. È un bene? Teoricamente sì. In pratica: i campi vecchi non vengono rimossi, i campi nuovi vengono aggiunti. Il field ",{"type":32,"tag":100,"props":495,"children":497},{"className":496},[],[498],{"type":37,"value":499},"priceMode",{"type":37,"value":501}," aggiunto nel 2023 è ancora supportato nel 2026, ma è consigliato usare il nuovo field. La documentazione non chiarisce quale utilizzare.",{"type":32,"tag":33,"props":503,"children":504},{},[505],{"type":37,"value":506},"La strategia di versionamento di BigCommerce è caotica: le API v2 e v3 funzionano in parallelo. Il Catalog API è in v3 ma l'Orders API è ancora in v2. Una feature esiste in v3 mentre un'altra è in v2. Non c'è path di migrazione, devi mantenere entrambe le API in parallelo.",{"type":32,"tag":93,"props":508,"children":512},{"className":509,"code":510,"language":511,"meta":16,"style":16},"language-json shiki shiki-themes github-dark","\u002F\u002F Esempio di field deprecato in commercetools\n{\n  \"productType\": {\n    \"name\": \"Apparel\",\n    \"attributes\": [\n      {\n        \"name\": \"size\",\n        \"type\": \"enum\",\n        \"values\": [\"S\", \"M\", \"L\"]\n        \u002F\u002F campo \"attributeConstraint\" deprecato ma ancora nella response\n      }\n    ]\n  }\n}\n","json",[513],{"type":32,"tag":100,"props":514,"children":515},{"__ignoreMap":16},[516,524,532,545,567,580,588,609,630,672,680,688,696,705],{"type":32,"tag":104,"props":517,"children":518},{"class":106,"line":107},[519],{"type":32,"tag":104,"props":520,"children":521},{"style":111},[522],{"type":37,"value":523},"\u002F\u002F Esempio di field deprecato in commercetools\n",{"type":32,"tag":104,"props":525,"children":526},{"class":106,"line":117},[527],{"type":32,"tag":104,"props":528,"children":529},{"style":144},[530],{"type":37,"value":531},"{\n",{"type":32,"tag":104,"props":533,"children":534},{"class":106,"line":150},[535,540],{"type":32,"tag":104,"props":536,"children":537},{"style":127},[538],{"type":37,"value":539},"  \"productType\"",{"type":32,"tag":104,"props":541,"children":542},{"style":144},[543],{"type":37,"value":544},": {\n",{"type":32,"tag":104,"props":546,"children":547},{"class":106,"line":169},[548,553,558,563],{"type":32,"tag":104,"props":549,"children":550},{"style":127},[551],{"type":37,"value":552},"    \"name\"",{"type":32,"tag":104,"props":554,"children":555},{"style":144},[556],{"type":37,"value":557},": ",{"type":32,"tag":104,"props":559,"children":560},{"style":307},[561],{"type":37,"value":562},"\"Apparel\"",{"type":32,"tag":104,"props":564,"children":565},{"style":144},[566],{"type":37,"value":166},{"type":32,"tag":104,"props":568,"children":569},{"class":106,"line":187},[570,575],{"type":32,"tag":104,"props":571,"children":572},{"style":127},[573],{"type":37,"value":574},"    \"attributes\"",{"type":32,"tag":104,"props":576,"children":577},{"style":144},[578],{"type":37,"value":579},": [\n",{"type":32,"tag":104,"props":581,"children":582},{"class":106,"line":205},[583],{"type":32,"tag":104,"props":584,"children":585},{"style":144},[586],{"type":37,"value":587},"      {\n",{"type":32,"tag":104,"props":589,"children":590},{"class":106,"line":214},[591,596,600,605],{"type":32,"tag":104,"props":592,"children":593},{"style":127},[594],{"type":37,"value":595},"        \"name\"",{"type":32,"tag":104,"props":597,"children":598},{"style":144},[599],{"type":37,"value":557},{"type":32,"tag":104,"props":601,"children":602},{"style":307},[603],{"type":37,"value":604},"\"size\"",{"type":32,"tag":104,"props":606,"children":607},{"style":144},[608],{"type":37,"value":166},{"type":32,"tag":104,"props":610,"children":611},{"class":106,"line":26},[612,617,621,626],{"type":32,"tag":104,"props":613,"children":614},{"style":127},[615],{"type":37,"value":616},"        \"type\"",{"type":32,"tag":104,"props":618,"children":619},{"style":144},[620],{"type":37,"value":557},{"type":32,"tag":104,"props":622,"children":623},{"style":307},[624],{"type":37,"value":625},"\"enum\"",{"type":32,"tag":104,"props":627,"children":628},{"style":144},[629],{"type":37,"value":166},{"type":32,"tag":104,"props":631,"children":632},{"class":106,"line":271},[633,638,643,648,653,658,662,667],{"type":32,"tag":104,"props":634,"children":635},{"style":127},[636],{"type":37,"value":637},"        \"values\"",{"type":32,"tag":104,"props":639,"children":640},{"style":144},[641],{"type":37,"value":642},": [",{"type":32,"tag":104,"props":644,"children":645},{"style":307},[646],{"type":37,"value":647},"\"S\"",{"type":32,"tag":104,"props":649,"children":650},{"style":144},[651],{"type":37,"value":652},", ",{"type":32,"tag":104,"props":654,"children":655},{"style":307},[656],{"type":37,"value":657},"\"M\"",{"type":32,"tag":104,"props":659,"children":660},{"style":144},[661],{"type":37,"value":652},{"type":32,"tag":104,"props":663,"children":664},{"style":307},[665],{"type":37,"value":666},"\"L\"",{"type":32,"tag":104,"props":668,"children":669},{"style":144},[670],{"type":37,"value":671},"]\n",{"type":32,"tag":104,"props":673,"children":674},{"class":106,"line":289},[675],{"type":32,"tag":104,"props":676,"children":677},{"style":111},[678],{"type":37,"value":679},"        \u002F\u002F campo \"attributeConstraint\" deprecato ma ancora nella response\n",{"type":32,"tag":104,"props":681,"children":682},{"class":106,"line":298},[683],{"type":32,"tag":104,"props":684,"children":685},{"style":144},[686],{"type":37,"value":687},"      }\n",{"type":32,"tag":104,"props":689,"children":690},{"class":106,"line":313},[691],{"type":32,"tag":104,"props":692,"children":693},{"style":144},[694],{"type":37,"value":695},"    ]\n",{"type":32,"tag":104,"props":697,"children":699},{"class":106,"line":698},13,[700],{"type":32,"tag":104,"props":701,"children":702},{"style":144},[703],{"type":37,"value":704},"  }\n",{"type":32,"tag":104,"props":706,"children":708},{"class":106,"line":707},14,[709],{"type":32,"tag":104,"props":710,"children":711},{"style":144},[712],{"type":37,"value":713},"}\n",{"type":32,"tag":33,"props":715,"children":716},{},[717],{"type":37,"value":718},"Questo carico di retrocompatibilità si accumula come debito tecnico. Nel primo anno dici \"nessun problema, ignoriamo il campo vecchio\". Tre anni dopo nessuno sa quale campo sia attivo nel codebase.",{"type":32,"tag":40,"props":720,"children":722},{"id":721},"stack-di-observability-la-necessità-obbligatoria-del-distributed-tracing",[723],{"type":37,"value":724},"Stack di Observability: La Necessità Obbligatoria del Distributed Tracing",{"type":32,"tag":33,"props":726,"children":727},{},[728],{"type":37,"value":729},"Nell'architettura MACH l'observability non è opzionale, è obbligatoria. In Shopify monolitico il lifecycle della richiesta passa per un unico stack — l'aggregazione log è semplice. Nell'architettura commercetools una singola richiesta di checkout attraversa 7 microservizi: storefront → API gateway → auth service → cart service → inventory service → payment service → order service. Ogni hop introduce latenza, possibilità di errore, possibilità di retry.",{"type":32,"tag":33,"props":731,"children":732},{},[733,735,741],{"type":37,"value":734},"L'abbiamo risolto con Datadog APM + distributed tracing. Ogni richiesta riceve un header ",{"type":32,"tag":100,"props":736,"children":738},{"className":737},[],[739],{"type":37,"value":740},"x-trace-id",{"type":37,"value":742},", ogni microservizio propaga questo ID. Con la visualizzazione span vedi esattamente quale hop introduce latency spike. Costo: $480\u002Fmese (100K trace\u002Fmese). Su Shopify questo costo è $0 — l'aggregazione log integrata è sufficiente.",{"type":32,"tag":33,"props":744,"children":745},{},[746,748,754],{"type":37,"value":747},"Su BigCommerce il distributed tracing non esiste. Le risposte API restituiscono ",{"type":32,"tag":100,"props":749,"children":751},{"className":750},[],[752],{"type":37,"value":753},"x-request-id",{"type":37,"value":755}," ma questo ID non è propagato tra i microservizi. Debugging da incubo: il cliente dice \"checkout fallito\", tu cerchi tra i log quale step abbia fallito.",{"type":32,"tag":33,"props":757,"children":758},{},[759],{"type":37,"value":760},"I dati RUM (Real User Monitoring) mostrano l'impatto reale dell'architettura composable sull'utente finale. Su Shopify Plus monolitico il P95 LCP è 2,1s. Su commercetools + Next.js headless il P95 LCP è 3,4s — 62% più lento. Perché? Hydration lato client + API waterfall. Con Static Generation (ISR) lo abbiamo ridotto a 2,6s, ma rimane 24% più lento.",{"type":32,"tag":40,"props":762,"children":764},{"id":763},"framework-di-decisione-quale-piattaforma-quale-scenario",[765],{"type":37,"value":766},"Framework di Decisione: Quale Piattaforma, Quale Scenario",{"type":32,"tag":33,"props":768,"children":769},{},[770,772,781],{"type":37,"value":771},"La decisione di migrazione a MACH non è binaria — non è \"composable o monolitico\", ma \"quale layer decomporrai\". Se fai ",{"type":32,"tag":773,"props":774,"children":778},"a",{"href":775,"rel":776},"https:\u002F\u002Fwww.roibase.com.tr\u002Fit\u002Fheadless",[777],"nofollow",[779],{"type":37,"value":780},"headless commerce",{"type":37,"value":782}," su Shopify Plus separa il frontend, non il backend. Su BigCommerce fai il contrario: trasferisci il backend a PIM di terze parti, mantieni il frontend semplice. Su commercetools decomponi l'intero stack — ma solo se hai un team DevOps dedicato.",{"type":32,"tag":33,"props":784,"children":785},{},[786],{"type":37,"value":787},"Matrice di decisione:",{"type":32,"tag":352,"props":789,"children":790},{},[791,821],{"type":32,"tag":356,"props":792,"children":793},{},[794],{"type":32,"tag":360,"props":795,"children":796},{},[797,802,806,811,816],{"type":32,"tag":364,"props":798,"children":799},{},[800],{"type":37,"value":801},"Scenario",{"type":32,"tag":364,"props":803,"children":804},{},[805],{"type":37,"value":368},{"type":32,"tag":364,"props":807,"children":808},{},[809],{"type":37,"value":810},"Layer Decomposizione",{"type":32,"tag":364,"props":812,"children":813},{},[814],{"type":37,"value":815},"TCO (3 anni)",{"type":32,"tag":364,"props":817,"children":818},{},[819],{"type":37,"value":820},"Rischio",{"type":32,"tag":390,"props":822,"children":823},{},[824,851,879],{"type":32,"tag":360,"props":825,"children":826},{},[827,832,836,841,846],{"type":32,"tag":397,"props":828,"children":829},{},[830],{"type":37,"value":831},"B2C GTM rapido",{"type":32,"tag":397,"props":833,"children":834},{},[835],{"type":37,"value":401},{"type":32,"tag":397,"props":837,"children":838},{},[839],{"type":37,"value":840},"Solo frontend (Hydrogen)",{"type":32,"tag":397,"props":842,"children":843},{},[844],{"type":37,"value":845},"$120K",{"type":32,"tag":397,"props":847,"children":848},{},[849],{"type":37,"value":850},"Basso",{"type":32,"tag":360,"props":852,"children":853},{},[854,859,864,869,874],{"type":32,"tag":397,"props":855,"children":856},{},[857],{"type":37,"value":858},"Multi-brand, catalogo condiviso",{"type":32,"tag":397,"props":860,"children":861},{},[862],{"type":37,"value":863},"BigCommerce + Akeneo",{"type":32,"tag":397,"props":865,"children":866},{},[867],{"type":37,"value":868},"Backend (PIM, DAM)",{"type":32,"tag":397,"props":870,"children":871},{},[872],{"type":37,"value":873},"$240K",{"type":32,"tag":397,"props":875,"children":876},{},[877],{"type":37,"value":878},"Medio",{"type":32,"tag":360,"props":880,"children":881},{},[882,887,892,897,902],{"type":32,"tag":397,"props":883,"children":884},{},[885],{"type":37,"value":886},"B2B pricing custom",{"type":32,"tag":397,"props":888,"children":889},{},[890],{"type":37,"value":891},"commercetools",{"type":32,"tag":397,"props":893,"children":894},{},[895],{"type":37,"value":896},"Stack completo",{"type":32,"tag":397,"props":898,"children":899},{},[900],{"type":37,"value":901},"$480K",{"type":32,"tag":397,"props":903,"children":904},{},[905],{"type":37,"value":906},"Alto",{"type":32,"tag":33,"props":908,"children":909},{},[910],{"type":37,"value":911},"Una considerazione finale: vendor lock-in. Uscire da Shopify Plus significa abbandonare checkout, payment, subscription management — tutto proprietario. Il costo di migrazione è alto. Uscire da commercetools è facile — tutto è API, l'export dati è standard. BigCommerce è nel mezzo: alcune feature sono bloccate (checkout), altre sono portabili (catalogo).",{"type":32,"tag":33,"props":913,"children":914},{},[915],{"type":37,"value":916},"Il manifesto MACH è un ideale. La realtà di produzione è fatta di trade-off. Prima di migrare verso un'architettura composable, poni questa domanda: per ogni layer che decompongo, esiste ownership dedicato? Altrimenti la semplicità della piattaforma monolitica ha più valore per te.",{"type":32,"tag":918,"props":919,"children":920},"style",{},[921],{"type":37,"value":922},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":150,"depth":150,"links":924},[925,926,927,928,929,930],{"id":42,"depth":117,"text":45},{"id":68,"depth":117,"text":71},{"id":327,"depth":117,"text":330},{"id":480,"depth":117,"text":483},{"id":721,"depth":117,"text":724},{"id":763,"depth":117,"text":766},"markdown","content:it:tech:composable-commerce-mach-architettura-realta-produttiva.md","content","it\u002Ftech\u002Fcomposable-commerce-mach-architettura-realta-produttiva.md","it\u002Ftech\u002Fcomposable-commerce-mach-architettura-realta-produttiva","md",1785967479134]