{"id":10183,"date":"2026-08-31T08:51:22","date_gmt":"2026-08-31T06:51:22","guid":{"rendered":"https:\/\/qdata.pl\/blog\/erp-migration-when-cloud-when-stay-on-prem\/"},"modified":"2026-09-01T02:31:44","modified_gmt":"2026-09-01T00:31:44","slug":"erp-migration-when-cloud-when-stay-on-prem","status":"publish","type":"post","link":"https:\/\/qdata.pl\/pl\/blog\/erp-migration-when-cloud-when-stay-on-prem\/","title":{"rendered":"Migracja ERP: kiedy chmura, a kiedy zosta\u0107 on-prem"},"content":{"rendered":"<div class=\"qdata-blog-tldr\">\n<h3>TL;DR<\/h3>\n<ul>\n<li>ERP moves fail on <strong>integration and downtime<\/strong>, not on VM sizing \u2014 map every interface before choosing cloud or on-prem.<\/li>\n<li>Stay on-prem when latency, OT coupling, or licensing forbids lift-and-shift; move when elasticity, DR, or SaaS replacement path is clear.<\/li>\n<li>Hybrid often means <strong>ERP core on-prem + analytics or portal in cloud<\/strong> \u2014 not two half-finished migrations.<\/li>\n<li>Require a named rollback owner and tested restore before any production cutover window.<\/li>\n<\/ul>\n<\/div>\n<p>The operations director\u2019s ERP was fifteen years old, heavily customised, and still profitable. A systems integrator proposed \u201ccloud-first ERP modernisation\u201d in eighteen months. A hoster proposed lifting the existing VM into managed cloud in six weeks. Both slides showed upward arrows. Neither explained what happens to the barcode scanners on the shop floor when the warehouse module moves, or who rolls back if month-end close fails on a Sunday night.<\/p>\n<p>ERP decisions for companies with fifty to two hundred employees are rarely pure cloud or pure on-prem. They are risk decisions about downtime, integrations, and who owns the truth when something breaks. This guide offers a four-axis scorecard \u2014 not a vendor roadmap \u2014 to use before the board approves budget.<\/p>\n<h2>Four axes that matter more than \u201ccloud yes\/no\u201d<\/h2>\n<p>Score each axis from 1 (keep on-prem) to 5 (cloud-friendly):<\/p>\n<ol>\n<li><strong>Downtime tolerance<\/strong> \u2014 Can you survive a weekend cutover? Do you need near-zero downtime with active\/active?<\/li>\n<li><strong>Integration coupling<\/strong> \u2014 PLCs, label printers, WMS, EDI, custom DLLs, flat L2 networks?<\/li>\n<li><strong>Licensing and compliance<\/strong> \u2014 Per-core cloud rules, data residency, sector regulator (finance, health)?<\/li>\n<li><strong>Operational maturity<\/strong> \u2014 Do you have owners for ERP, DB, and network \u2014 or one generalist?<\/li>\n<\/ol>\n<p>Low scores on integration and downtime push toward staged hybrid or on-prem refresh. High scores on maturity and compliance clarity favour managed cloud or SaaS replacement \u2014 if a real SaaS product exists for your processes.<\/p>\n<h2>When staying on-prem is rational<\/h2>\n<p>Manufacturing and logistics often keep ERP and historians close to the line. Medical or regulated workloads may require on-prem or sovereign cloud with explicit data flow documentation. Legacy ERP with decades of custom code may cost more to refactor than to stabilise on modern hardware with good backup and monitoring.<\/p>\n<p>On-prem is not \u201cno cloud\u201d. It means fixing AD, MFA, patch cadence, offline backup, and monitoring first \u2014 then connecting cloud portals or analytics with documented interfaces.<\/p>\n<h2>When cloud or managed hosting wins<\/h2>\n<p>Elastic test environments for upgrades without buying hardware every year. Disaster recovery when your current server room has no generator and no tested off-site copy. Replacing end-of-life hardware while the vendor still supports the ERP version in a managed VM. Moving adjacent workloads (reporting DB, customer portal, file shares) while ERP stays temporarily on-prem \u2014 a pattern we see succeed more often than big-bang ERP lift.<\/p>\n<h2>Hybrid done right vs \u201ctwo problems\u201d<\/h2>\n<p>Good hybrid: ERP on-prem, nightly anonymised extracts to cloud for BI, SSO from Entra ID, one incident runbook per tier. Bad hybrid: production ERP in cloud, \u201ctemporary\u201d PostgreSQL on a NAS, VPN hairpins for every batch job, two teams blaming each other at month-end.<\/p>\n<p>If you choose hybrid, document data flow direction, encryption, and which team owns incidents that cross the boundary \u2014 the same discipline as in our BaseCloud hybrid article, applied specifically to ERP.<\/p>\n<h2>Rollback and month-end \u2014 non-negotiable<\/h2>\n<p>Before any cutover:<\/p>\n<ul>\n<li>Named rollback decision-maker (not \u201cthe committee\u201d).<\/li>\n<li>Restore test of ERP DB within the last 30 days with timing note.<\/li>\n<li>Month-end or peak-season blackout window agreed with finance.<\/li>\n<li>Integration partners on standby with escalation numbers \u2014 not only email.<\/li>\n<\/ul>\n<p>If the integrator cannot describe rollback in one page, postpone the migration date \u2014 not the testing.<\/p>\n<p><!-- qdata-expand-v1 --><\/p>\n<h2>Interface inventory: ninety minutes that save a quarter<\/h2>\n<p>Before anyone sizes a VM, lock a room with operations, finance and the person who actually posts invoices. Write every system that <em>reads or writes<\/em> ERP data \u2014 official APIs last, unofficial first. In Polish and German mid-market we keep finding the same ghosts: a CSV drop to a freight forwarder that runs from a scheduled task on a warehouse PC; a barcode printer mapped as LPT1 through a terminal server; an Excel \u201cintegration\u201d that a controller built in 2017 and still emails to the bank; a shop-floor terminal that talks raw SQL to the ERP because the vendor licence for the proper connector expired.<\/p>\n<p>Each interface gets four fields: direction, owner, what breaks if it is late by four hours, and whether it survives a hostname or IP change. If you cannot fill the last field, you do not have a migration plan \u2014 you have a cutover prayer. We have postponed more ERP cloud moves for missing printer and EDI paths than for insufficient vCPU.<\/p>\n<h2>Stacks we actually meet (and what they imply)<\/h2>\n<ul>\n<li><strong>Comarch Optima \/ XL<\/strong> \u2014 often on a single SQL Server, heavy custom printouts, e-commerce and WMS add-ons. Cloud-friendly if you treat SQL + application + print spooler as one unit. Hostile if someone proposes \u201cjust the database in Azure\u201d and leaves terminals on-prem with a chatty VPN.<\/li>\n<li><strong>Enova365<\/strong> \u2014 more service-oriented, still dies on print and fiscal device assumptions. Ask who owns the local fiscal printer path before you celebrate SaaS.<\/li>\n<li><strong>SAP Business One<\/strong> \u2014 licensing and partner politics matter as much as latency. A lift of the VM can be rational; a rewrite \u201cwhile we are at it\u201d is a second project hiding in the first.<\/li>\n<li><strong>Custom \/ Fox \/ Access leftovers<\/strong> \u2014 if month-end still depends on a desktop MDB, fix that on-prem or accept that cloud will wait. Pretending otherwise is how cutovers slip to Sunday 23:00 with finance on the phone.<\/li>\n<\/ul>\n<p>SaaS ERP is a good answer when your processes fit the product. It is a trap when the integrator sells \u201cconfiguration\u201d that is really a rewrite of your warehouse logic with no rollback to the old vendor.<\/p>\n<h2>Cutover weekend: an honest timeline<\/h2>\n<p>A typical 80\u2013150 person firm with one warehouse and one accounting entity, if interfaces are mapped and restore was tested in the last 30 days:<\/p>\n<ol>\n<li><strong>Thursday 16:00<\/strong> \u2014 freeze non-critical writes; last backup; confirm restore target is empty and reachable.<\/li>\n<li><strong>Friday 18:00<\/strong> \u2014 final users off; final backup; start cutover; integration partners on a conference number, not email.<\/li>\n<li><strong>Saturday morning<\/strong> \u2014 smoke: post a test invoice, print a label, send a dummy EDI, open a known sales order. Finance signs \u201cwe can close if we stay\u201d or \u201crollback\u201d.<\/li>\n<li><strong>Sunday 12:00 latest<\/strong> \u2014 go \/ no-go. If no-go, rollback owner (one name) executes the restore runbook. Not a committee.<\/li>\n<li><strong>Monday 07:00<\/strong> \u2014 hypercare list: printers, EDI, bank files, the three reports the board actually opens.<\/li>\n<\/ol>\n<p>If the integrator cannot put this on one page with names and phone numbers, move the date \u2014 not the testing. Related: <a href=\"\/pl\/blog\/backup-restore-what-to-demand-before-you-sign\/\">restore proof<\/a> before any production window; <a href=\"\/pl\/blog\/basecloud-when-hybrid-makes-sense\/\">hybrid<\/a> when the line must stay local.<\/p>\n<h2>What to do next<\/h2>\n<p>List every system that reads or writes ERP data \u2014 not only official interfaces. Score the four axes in a room with finance, operations, and IT. Pick one adjacent workload to cloud first (reporting, portal, files) before moving ERP core. For architecture review, landing zone design, or managed hosting around an on-prem ERP, start with our <a href=\"\/pl\/service\/cloud-services\/\">Us\u0142ugi chmurowe<\/a> practice; for shop integrations and e-commerce connectors, see <a href=\"\/pl\/service\/app-ecommerce\/\">Aplikacje \/ E-commerce<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p><span data-no-translation>\u201ePrzenie\u015b ERP do chmury\u201d to nie strategia. Kryteria dla firm \u015bredniej wielko\u015bci: tolerancja przestoju, integracja z produkcj\u0105, licencje, rezydencja danych i w\u0142a\u015bciciel rollbacku \u2014 macierz czterech osi przed bud\u017cetem od zarz\u0105du.<\/span><\/p>","protected":false},"author":1,"featured_media":10157,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-10183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-business-guides"],"_links":{"self":[{"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/posts\/10183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/comments?post=10183"}],"version-history":[{"count":0,"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/posts\/10183\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/media\/10157"}],"wp:attachment":[{"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/media?parent=10183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/categories?post=10183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/qdata.pl\/pl\/wp-json\/wp\/v2\/tags?post=10183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}