{"id":7015,"date":"2026-05-28T10:24:04","date_gmt":"2026-05-28T10:24:04","guid":{"rendered":"https:\/\/www.dewise.com\/web\/?p=7015"},"modified":"2026-05-28T10:29:13","modified_gmt":"2026-05-28T10:29:13","slug":"backstage-plugin-migration-at-a-global-enterprise","status":"publish","type":"post","link":"https:\/\/www.dewise.com\/web\/backstage-plugin-migration-at-a-global-enterprise\/","title":{"rendered":"Backstage plugin migration at a global enterprise"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"7015\" class=\"elementor elementor-7015\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-bb8bbad elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"bb8bbad\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6efd099\" data-id=\"6efd099\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-68a2f89 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"68a2f89\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.22.0 - 26-06-2024 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t<p><!--ScriptorStartFragment--><\/p><p><!--ScriptorStartFragment--><!--ScriptorEndFragment--><\/p><h2><!--ScriptorStartFragment--><b>Backstage plugin migration at a global enterprise<\/b><!--ScriptorEndFragment--><\/h2><p><!--ScriptorEndFragment--><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-13b1b6f elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"13b1b6f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><!--ScriptorStartFragment--><\/p><div><p><!--ScriptorStartFragment--><\/p><div>Backstage&#8217;s new frontend system had landed. For a global enterprise running Backstage at scale, that meant migrating an entire plugin ecosystem onto it.<\/div><div>\u00a0<\/div><div><p><!--ScriptorStartFragment-->The new system changed how plugins attach to the instance and how they are displayed. Adopting it was the right call. It would keep the platform on the supported path, and it would make plugin development easier to onboard onto. The migration was the bridge to get there.<\/p><\/div><\/div><p><!--ScriptorEndFragment--><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c08183 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"8c08183\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><!--ScriptorStartFragment--><\/p><h4><strong>The problem behind the migration<\/strong><\/h4><div><p><!--ScriptorStartFragment-->The change was being made for two reasons:<\/p><ul style=\"font-size: 16px; background: #f5f5f5;\"><li style=\"margin-top: 0in; margin-bottom: 8pt; font-size: 16px;\"><span style=\"font-weight: 600;\">Developer experience.<\/span> Onboarding a new contributor onto a plugin was harder than it needed to be. The new frontend system gave plugins a cleaner, more predictable way to attach inside Backstage, which meant new developers could spend less time learning the surrounding scaffolding and more time on the plugin itself.<\/li><li style=\"font-size: 16px;\"><span style=\"font-weight: 600;\">Architectural alignment.<\/span> The new frontend system was built to follow the direction Backstage itself is heading, which keeps the platform on the actively supported path and ready for future upgrades.\u00a0<\/li><\/ul><div><div>For an enterprise running Backstage at scale, both reasons mattered. The new front-end system was the right destination. Adopting it required migrating the existing plugins to work with it.<\/div><p><!--ScriptorStartFragment--><!--ScriptorEndFragment--><\/p><div>One principle stayed clear throughout. The change should happen in the code, not in the experience. At the user level, the plugins still need to behave exactly the same way.<\/div><\/div><\/div><p><!--ScriptorEndFragment--><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd28a56 elementor-widget elementor-widget-text-editor\" data-id=\"bd28a56\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><!--ScriptorStartFragment--><\/p><h4><!--ScriptorStartFragment--><\/h4><h4><strong>A standard system meeting a different architecture<\/strong><\/h4><p><style>\na {<br \/>    text-decoration: none;<br \/>    color: #464feb;<br \/>}<br \/>tr th, tr td {<br \/>    border: 1px solid #e6e6e6;<br \/>}<br \/>tr th {<br \/>    background-color: #f5f5f5;<br \/>}<br \/><\/style><\/p><div><div><p>The complexity of this migration came from the difference between Backstage&#8217;s standard frontend approach and the architecture of the client&#8217;s platform.<\/p><\/div><div>Backstage&#8217;s new frontend system defines a standard way for plugins to attach and render. The client&#8217;s platform had its own requirements, shaped by how the team had been working with Backstage. The plugins in the ecosystem reflected those requirements.<\/div><p><!--ScriptorStartFragment--><!--ScriptorEndFragment--><\/p><div><p>The migration was about fitting the new frontend system into that setup. Some plugins mapped onto the standard cleanly. Others did not, especially where the way pages were displayed had been built around different requirements.<\/p><\/div><\/div><h4><!--ScriptorEndFragment--><\/h4><p><!--ScriptorEndFragment--><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bda9ca5 elementor-widget elementor-widget-text-editor\" data-id=\"bda9ca5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><!--ScriptorStartFragment--><\/p><h4><strong>Where real Backstage experience made the difference\u00a0<\/strong><\/h4><!--ScriptorStartFragment--><div><b>Dewise<\/b> was brought in through <b>DevTeam TO-GO<\/b>, a cross-functional team that plugs directly inside the engineering organisation. Backstage is one of the platforms Dewise works with regularly, and that experience is what we were brought in for.<br \/><br \/>The migration itself was not the hard part. The hard part was fitting a standard frontend system into a platform with its own requirements, across a large plugin ecosystem, without disrupting the teams relying on it every day. That meant understanding both sides well enough to know where the standard could be applied directly, and where the architecture needed the migration handled differently.<br \/><br \/><\/div><div>Those are the things that come from having worked with Backstage before.<\/div><p><!--ScriptorEndFragment--><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2742d1b elementor-widget elementor-widget-text-editor\" data-id=\"2742d1b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><!--ScriptorStartFragment--><\/p><h4><!--ScriptorStartFragment--><\/h4><h4><strong>Using AI to accelerate the work<\/strong><\/h4><h4><!--ScriptorEndFragment--><\/h4><div><p><!--ScriptorStartFragment--><\/p><div><!--ScriptorStartFragment--><div>The migration was complex partly because of the volume. A large plugin ecosystem, many similar changes, and a timeline that could not stretch indefinitely. AI made a real difference here, but the impact looked different at different stages of the work.<br \/><br \/><\/div><div><span style=\"font-weight: 600;\">Early stage: mapping the architectural difference<br \/><\/span><\/div><div>Each plugin sat at a different point of distance from Backstage&#8217;s standard. AI helped interpret how the plugins were currently structured and where they diverged from what the new frontend system expected. This significantly reduced the time needed to map the migration path for each plugin.<br \/><br \/><\/div><div><span style=\"font-weight: 600;\">Later stage: handling volume<br \/><\/span><\/div><div>Once clear patterns were established, AI was used to apply those patterns across the remaining plugins. Each output was still reviewed, tested, and validated by the team. AI handled repetition. The team handled decisions. That separation made the migration scalable without compromising quality.<\/div><!--ScriptorEndFragment--><\/div><p><!--ScriptorEndFragment--><\/p><\/div><p><!--ScriptorEndFragment--><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10615fc elementor-widget elementor-widget-text-editor\" data-id=\"10615fc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><!--ScriptorStartFragment--><\/p><h4><!--ScriptorStartFragment--><\/h4><h4><!--ScriptorStartFragment--><\/h4><h4><strong>What actually changed<\/strong><!--ScriptorEndFragment--><\/h4><h4><!--ScriptorEndFragment--><\/h4><div><p><!--ScriptorStartFragment--><\/p><div><p><!--ScriptorStartFragment--><\/p><div><div>The outcome is not just a completed migration. It is a stronger platform.<\/div><p><!--ScriptorStartFragment--><!--ScriptorEndFragment--><\/p><ul style=\"font-size: 16px; background: #f5f5f5;\"><li style=\"font-size: 16px;\">The plugin ecosystem now runs on Backstage&#8217;s supported frontend architecture<\/li><li style=\"font-size: 16px;\">Onboarding new contributors is faster and more predictable<\/li><li style=\"font-size: 16px;\">The platform is easier to maintain and extend<\/li><li style=\"font-size: 16px;\">Future upgrades are no longer a risk<\/li><\/ul><div>The migration was the mechanism. The real result is a platform ready for what comes next.<\/div><!--ScriptorStartFragment--><!--ScriptorEndFragment--><p><!--ScriptorStartFragment--><!--ScriptorEndFragment--><\/p><\/div><p><!--ScriptorEndFragment--><\/p><\/div><p><!--ScriptorEndFragment--><\/p><\/div><p><!--ScriptorEndFragment--><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-23289ba elementor-widget elementor-widget-text-editor\" data-id=\"23289ba\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><!--ScriptorStartFragment--><\/p><h4><!--ScriptorStartFragment--><\/h4><h4><!--ScriptorStartFragment--><\/h4><h4><!--ScriptorStartFragment--><\/h4><h4><strong>Built for this kind of work<\/strong><\/h4><div>Backstage plugin migration at enterprise scale is complex. It requires more than following a guide. It requires experience with the platform, understanding how enterprise architectures shape it, and the ability to execute without disruption.<br \/><br \/><\/div><!--ScriptorStartFragment--><div>This is exactly what <b>DevTeam TO-GO<\/b> is built for. Embedded teams. Real platform experience. Delivery that holds under pressure.<\/div><!--ScriptorEndFragment--><h4><!--ScriptorEndFragment--><\/h4><div><div><!--ScriptorEndFragment--><\/div><p><!--ScriptorEndFragment--><\/p><\/div><p><!--ScriptorEndFragment--><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c31263a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c31263a\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7743656\" data-id=\"7743656\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Backstage plugin migration at a global enterprise Backstage&#8217;s new frontend system had landed. For a global enterprise running Backstage at scale, that meant migrating an entire plugin ecosystem onto it.\u00a0 The new system changed how plugins attach to the instance and how they are displayed. Adopting it was the right call. It would keep the [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":7018,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,81],"tags":[],"_links":{"self":[{"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/posts\/7015"}],"collection":[{"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/comments?post=7015"}],"version-history":[{"count":18,"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/posts\/7015\/revisions"}],"predecessor-version":[{"id":7036,"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/posts\/7015\/revisions\/7036"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/media\/7018"}],"wp:attachment":[{"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/media?parent=7015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/categories?post=7015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dewise.com\/web\/wp-json\/wp\/v2\/tags?post=7015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}