<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: David Tuite</title>
    <description>The latest articles on Forem by David Tuite (@dtuite).</description>
    <link>https://forem.com/dtuite</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F352797%2F456593af-fa0f-40d6-95a3-bb6cc3a8b15c.jpeg</url>
      <title>Forem: David Tuite</title>
      <link>https://forem.com/dtuite</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dtuite"/>
    <language>en</language>
    <item>
      <title>Why Hybrid is Best for IDPs</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Wed, 04 Dec 2024 12:01:18 +0000</pubDate>
      <link>https://forem.com/roadie/why-hybrid-is-best-for-idps-53k7</link>
      <guid>https://forem.com/roadie/why-hybrid-is-best-for-idps-53k7</guid>
      <description>&lt;p&gt;The Internal Developer Portal (IDP) market is only 5 or 6 years old, but we’ve seen a huge amount of growth in that time, and many different options emerging.&lt;/p&gt;

&lt;p&gt;According to Gartner, IDPs are reported as the most frequently piloted technology in their 2022 - 2024 Technology Adoption Roadmap Survey, and 75% of organizations with platform engineering teams will provide IDPs by 2026.&lt;/p&gt;

&lt;p&gt;With this growth, 3 main categories of Internal Developer Portal products have emerged:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-source&lt;/strong&gt; IDPs are exactly what you think. The code is open-source and you host and maintain it yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proprietary&lt;/strong&gt; IDPs are typically software as a service startups funded by venture capital. You purchase access to them just like you purchase access to PagerDuty or GitHub Enterprise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid&lt;/strong&gt; IDPs are a combination of open-source and proprietary. They’re built on an open-source foundation, but come with commercial support and proprietary features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article, I’m going to dive into each category one by one, and learn the pros and cons of each.&lt;/p&gt;

&lt;p&gt;I’ll also explain why I believe the Hybrid model brings the best of both worlds. The community, extensibility and lack of vendor lock-on of the open-source model, alongside the low cost, ease of use, and fast deployment of the proprietary model. &lt;/p&gt;

&lt;h2&gt;
  
  
  Open-source
&lt;/h2&gt;

&lt;p&gt;While technically not an IDP, and technically not the only open-source IDP, you can’t talk about open-source IDPs without the conversation focussing on Backstage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://roadie.io/backstage-spotify/" rel="noopener noreferrer"&gt;Backstage&lt;/a&gt; was open-sourced in early 2020 by Spotify. It was a rewrite of their internal IDP that they’d been using for years. It’s not an IDP because it’s actually a set of TypeScript libraries that developers can combine together to build an IDP, but it has still captured a huge amount of attention in the IDP space.&lt;/p&gt;

&lt;p&gt;When Backstage launched, it was often compared to &lt;a href="https://github.com/hygieia/hygieia" rel="noopener noreferrer"&gt;Hygieia&lt;/a&gt; from Capital One, which predates it by almost 4 years. Even after Backstage appeared, a third contender emerged with a strong start. Ride-hailing company Lyft threw their hat into the ring when they released &lt;a href="https://github.com/lyft/clutch" rel="noopener noreferrer"&gt;Clutch&lt;/a&gt; a few months after Backstage was open-sourced. Clutch describes itself as "an extensible platform for infrastructure management”.&lt;/p&gt;

&lt;p&gt;in 2024, Clutch popularity seems to have stalled, Hygieia is deprecated, and the reality is that Backstage dominates the open-source IDP market. Although not a perfect metric by any means, GitHub stars show the difference in popularity of each tool.&lt;br&gt;
&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/3ztAVoKhmjcidfD90xcIYq/20debb7c682bb4b7384a105e0f2645e1/idp1.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/3ztAVoKhmjcidfD90xcIYq/20debb7c682bb4b7384a105e0f2645e1/idp1.png" alt="idp1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of the open-source model for IDPs
&lt;/h3&gt;

&lt;p&gt;In many ways the open-source model is perfect for building an Internal Developer Portal. IDPs are a window into all of the tools that developers use. They’re the venerable “single pane of glass”.&lt;/p&gt;

&lt;p&gt;Developers use a lot of tools though, and the developer tool landscape is thousands of tools strong and growing. Even the &lt;a href="https://landscape.cncf.io/" rel="noopener noreferrer"&gt;Cloud Native Landscape&lt;/a&gt; alone has more than 1,000 tools in it’s ecosystem.&lt;/p&gt;

&lt;p&gt;How can a single IDP integrate with and plug-in to all these tools? Well, by creating an open-source community who will help with the effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Huge community&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is exactly what Backstage has accomplished. The Backstage community is huge and engaged. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backstage was the &lt;a href="https://www.cncf.io/reports/cncf-annual-report-2023/" rel="noopener noreferrer"&gt;top end-user contributed CNCF project of 2023&lt;/a&gt;, with more than 4,000 contributions from end user companies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits of the open-source model for IDPs
&lt;/h3&gt;

&lt;p&gt;In many ways the open-source model is perfect for building an Internal Developer Portal. IDPs are a window into all of the tools that developers use. They’re the venerable “single pane of glass”.&lt;/p&gt;

&lt;p&gt;Developers use a lot of tools though, and the developer tool landscape is thousands of tools strong and growing. Even the &lt;a href="https://landscape.cncf.io/" rel="noopener noreferrer"&gt;Cloud Native Landscape&lt;/a&gt; alone has more than 1,000 tools in it’s ecosystem.&lt;/p&gt;

&lt;p&gt;How can a single IDP integrate with and plug-in to all these tools? Well, by creating an open-source community who will help with the effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Huge community&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is exactly what Backstage has accomplished. The Backstage community is huge and engaged. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backstage was the &lt;a href="https://www.cncf.io/reports/cncf-annual-report-2023/" rel="noopener noreferrer"&gt;top end-user contributed CNCF project of 2023&lt;/a&gt;, with more than 4,000 contributions from end user companies.&lt;/li&gt;
&lt;li&gt;There are 17,000 people in the Backstage Discord channel, with dozens and dozens of questions being asked or answered every day.&lt;/li&gt;
&lt;li&gt;Backstage has a &lt;a href="https://backstage.io/community" rel="noopener noreferrer"&gt;deep partner ecosystem&lt;/a&gt;. Whether you’re a Fortune 50 enterprise or a Series C startup, there’s a partner who can help you deploy and use Backstage.&lt;/li&gt;
&lt;li&gt;Backstage has official support from leading DevTools companies. Companies like Snyk, PagerDuty, Dynatrace and even AWS have released officially supported plugins for Backstage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This vibrant community means that you can always get help with Backstage. The other benefit is the extensibility and the number of integrations available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Huge number of integrations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The result of this large community is that Backstage is installed and adopted at thousands of organizations. These organizations use a diverse set of engineering tools, and many adopters have built and open-sourced Backstage plugins for these tools.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://backstage.io/plugins" rel="noopener noreferrer"&gt;Backstage plugins directory&lt;/a&gt; has more than 200 plugins available, so you can be fairly confident that there are plugins available for the tools you use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highly extensible&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Underlying all these plugins is a framework which is designed from the ground up to be maximally extensible. &lt;a href="https://backstage.io/docs/plugins/" rel="noopener noreferrer"&gt;The docs say&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Backstage is a single-page application composed of a set of plugins.&lt;/p&gt;

&lt;p&gt;Our goal for the plugin ecosystem is that the definition of a plugin is flexible enough to allow you to expose pretty much any kind of infrastructure or software development tool as a plugin in Backstage.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Practically, this means you can customize and extend your Backstage install to your specific requirements. If you need to build your catalog in Gerrit rather than GitHub, then you can swap out the GitHub integrations and replace them. The same concept applies to most parts of Backstage.&lt;/p&gt;

&lt;p&gt;By coupling this technical extensibility with a permissive Apache 2.0 license and a &lt;a href="https://github.com/backstage/community/blob/main/GOVERNANCE.md" rel="noopener noreferrer"&gt;mature governance model&lt;/a&gt;, adopters can make wholesale changes to Backstage if they like.&lt;/p&gt;

&lt;p&gt;The result is that many organizations have customized Backstage heavily. Take a look at this screenshot of Sunrise, &lt;a href="https://platformengineering.org/talks-library/sunrise-zalandos-internal-developer-platform" rel="noopener noreferrer"&gt;the Backstage-based IDP that Zalando created&lt;/a&gt;, as an example.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/maWMqKoK0KLgvYfvTZn8F/cab20948d658be53033be67abe3f577f/idp2.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/maWMqKoK0KLgvYfvTZn8F/cab20948d658be53033be67abe3f577f/idp2.png" alt="idp2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This completely custom UI shows the progress of changes as they flow through CICD on their way to production. Very little of what you see here comes out of the box with Backstage. Instead, it’s wired together from the basic building blocks of Backstage plugins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lack of vendor lock-in&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because Backstage is open-sourced and backed by large end user companies and the CNCF, adopters can feel comfortable that it will be around for a long time, and will continue to meet their needs into the future.&lt;/p&gt;

&lt;p&gt;The IDP market is still very early. The majority of the players have been founded in the past 5 years. We will likely see some consolidation of this market as players get acquired and wound down. Any customers of these companies will be forced to migrate to a different solution.&lt;/p&gt;

&lt;p&gt;We’ve seen this play out in the CICD market already. There was a time when Travis CI was a dominant provider of continuous integration. In 2019, Travis CI was &lt;a href="https://news.ycombinator.com/item?id=18978251" rel="noopener noreferrer"&gt;acquired by private-equity firm Idera&lt;/a&gt;. One month later, &lt;a href="https://news.ycombinator.com/item?id=19218036" rel="noopener noreferrer"&gt;layoffs began&lt;/a&gt;. In early 2020, Travis CI &lt;a href="https://news.ycombinator.com/item?id=25338983" rel="noopener noreferrer"&gt;stopped providing free support for open-source products&lt;/a&gt;, and in late 2020 &lt;a href="https://news.ycombinator.com/item?id=24964601" rel="noopener noreferrer"&gt;the pricing changes began&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Companies can avoid this fate in the IDP market by building on an open-source project instead of a commercial vendor with it’s own data model and lock-in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Drawbacks of the open-source model of IDPs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;It’s expensive to build&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Backstage is a larger undertaking than most people realize before they get into it. To quote Gartner in their &lt;a href="https://www.gartner.com/en/documents/4010078" rel="noopener noreferrer"&gt;Innovation Insight for Internal Developer Portals report&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Gartner inquiries indicate that Backstage implementations may require substantial effort in standing up the service.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In order to replicate something approaching the Sunrise portal mentioned above, companies should expect to allocate 2 to 5 engineers to the project for a number of years. &lt;/p&gt;

&lt;p&gt;Don’t believe me? Zalando said it themselves in &lt;a href="https://youtu.be/zowEfZoZycs?si=OYdNtCUZ9jee1ydu&amp;amp;t=1515" rel="noopener noreferrer"&gt;this presentation they did&lt;/a&gt; at the Autodesk Developer Productivity Summit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All that I’ve showed you was done through the contributions of many teams, but the core team was three engineers and a engineering manager.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That team has been working on Sunrise since 2020.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And that’s where my team is focussed on, actually like, the discovery part of our application landscape, and where we actually decided to, a few years ago in the beginning of the Backstage era in 2020 when Backstage was released, to actually onboard ourselves into Backstage.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s do the math. Assume an engineer or engineering manager costs $250k per year, therefore the team of 4 costs $1 million per year. 4 years have passed since 2020, so they’ve spent $4 million in total on their core Backstage team. Add in the “contributions of many teams” and we could easily be talking about a $6 million outlay.&lt;/p&gt;

&lt;p&gt;Now you’re probably saying “yeah but we’re not as big as Zalando”, but trust me, even small companies will spend a half a million dollars pretty easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It requires uncommon skills&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Backstage is typically owned and managed by platform teams or DevOps teams. These teams are probably skilled in YAML and kubernetes-native languages like Go.&lt;/p&gt;

&lt;p&gt;Backstage is written in TypeScript. The backend runs on NodeJS, and the frontend is written in React.&lt;/p&gt;

&lt;p&gt;Organizations who are considering self-hosted Backstage should consider whether or not they have the skills to develop in these languages. As mentioned above, Backstage is a set of libraries that users combine together to make a developer portal. That means you need to write TypeScript to make use of it. You need to understand frontend development, HTML and CSS to customize it. It may not make sene make sense to build up these skills in a Platform and Infrastructure organization because they will not be easily transferrable to other projects.&lt;/p&gt;

&lt;p&gt;The second set of uncommon skills that a Backstage deployment needs are project management and developer relations. Once it’s live, you need to evangelize it. You have to go out to the rest of the organization and teach them about it and how to use it. Are your platform developers really going to want to do this work?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s got a long time to value&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The typical Backstage rollout has a few phases. It starts with an initial deployment, which typically takes  a few months to get a basic Backstage instance into production. Some parts of Backstage will work straight out of the box at this point. You’ll be able to use the scaffolder to create new software projects from predefined templates, for example.&lt;/p&gt;

&lt;p&gt;Other parts of Backstage require an adoption phase. The software catalog is usually one of them. In order to have a complete software catalog, teams must first put their software into it. &lt;/p&gt;

&lt;p&gt;In 2023, at BackstageCon North America, I &lt;a href="https://youtu.be/Ar9Tk1t6toQ?si=LfC7CgV77FowTUYr" rel="noopener noreferrer"&gt;spoke to the experiences of some Backstage adopters&lt;/a&gt; who had attempted this feat. I first explained that 60% of the Backstage adopters I had interviewed were attempting to populate their catalog by writing YAML files that contain metadata about their services (these are called &lt;code&gt;catalog-info.yaml&lt;/code&gt; files).&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/2djFTALB80KSSETrFon7ma/14cf1ced01166a13f0f17323626ab4ed/idp3.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/2djFTALB80KSSETrFon7ma/14cf1ced01166a13f0f17323626ab4ed/idp3.png" alt="idp3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then shared some quotes from adopters who had followed this path&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The catalog never really worked for us. We struggled with adoption and rate limiting. Half the info in the catalog was wrong when they first pushed adoption.&lt;br&gt;
&lt;strong&gt;2,000 engineers, 2 years experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The thing we struggled with the most was getting teams to create the YAML file. We spent 6 months actively encouraging teams to register their components with Backstage. After 1 year, only 30 or 40% of the active repos were there.&lt;br&gt;
&lt;strong&gt;120 engineers, 1 year experience&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without a lot of product development and project management, this catalog population process takes a long time. There are many Backstage adopters who are at less than 50% catalog completeness after two years with the tool. Even Spotify admit that &lt;a href="https://thenewstack.io/how-spotify-achieved-a-voluntary-99-internal-platform-adoption-rate/" rel="noopener noreferrer"&gt;Backstage adoption rate often stagnates at 10%&lt;/a&gt;. You may have dreams of your software catalog becoming a single pane of glass for all of the software development in your organization, but it simply cannot fulfill its purpose if the software is not in there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proprietary
&lt;/h2&gt;

&lt;p&gt;At the other end of the spectrum, there are a number of proprietary developer portals like Cortex and Port. &lt;/p&gt;

&lt;p&gt;The concept of proprietary developer portals is largely the same as Backstage. They have similar features and target a similar user in the engineering organization. The main differences are in their extensibility. Users can’t edit the code of a proprietary developer portal, and there won’t be a large community who are producing open-source plugins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of the proprietary model for IDPs
&lt;/h3&gt;

&lt;p&gt;While a proprietary developer portal may never be as extensible as Backstage, they certainly do have some benefits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quicker to get started&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Proprietary IDPs will mostly just work out of the box. You don’t have to plan sprints and do research and write code to get some value. They come with admin interfaces where you can set some properties, connect up your tools, and starting using the product straight away. This is likely a better experience for platform engineers who don’t have the time or expertise to deploy and customize Backstage from scratch.&lt;/p&gt;

&lt;p&gt;When you do need to configure something, the documentation provided by a proprietary developer portal will likely be more comprehensive and up to date. They’re simply more motivated and able to produce high quality documentation than an open-source community. This makes setup faster and less confusing, and helps to prevent misconfigurations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User-friendly interface&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Proprietary IDPs bring their own user interface (UI). They’re developed from the ground up with design systems in place to help to ensure consistency across integrations and pages. They also have designers and UI engineers working to implement design practices in a coherent way.&lt;/p&gt;

&lt;p&gt;While the Backstage core team have done a lot to put the tool in a good place, the reality is that Backstage’s default interface leaves a lot to be desired.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/2c5i5wKrKGkM4u3tJGTccS/ad6033f7fd1eafc4cc2414aa5e4695c3/idp4.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/2c5i5wKrKGkM4u3tJGTccS/ad6033f7fd1eafc4cc2414aa5e4695c3/idp4.png" alt="idp4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This reality is brought on by the combination of overly familiar Material UI libraries and community contributed code that can be hit-or-miss in terms of how it looks and feels.&lt;/p&gt;

&lt;p&gt;Backstages plugins can be contributed by anyone, so there’s no guarantee that they will look good, or look consistent. It’s very likely that different plugins will work completely differently even though they are installed in the same Backstage instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More guidance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Proprietary IDPs are more opinionated in how they should be used. When you work with a vendor you should get access to solutions engineering and customer success resources who can help to share lessons from other customers.&lt;/p&gt;

&lt;p&gt;Working with the open source can sometimes feel like being handed a box of car parts and asked to build a car. Sure you can figure it out eventually, but you’re going to make mistakes along the way, and it probably won’t be the most efficient path.&lt;/p&gt;

&lt;p&gt;Having a partner to work alongside and share lessons is worth a lot, and helps to cut the time to value for your IDP project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Drawbacks of the proprietary model for IDPs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Vendor lock-in&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Proprietary IDPs have their own in-house APIs, their own data model, and their own way of doing things. Many of the options on the market are early stage startups. There’s a good chance some of them will disappear over the next few years. If you’re a customer, your IDP will go with them. &lt;/p&gt;

&lt;p&gt;When they do survive, you’ll likely be forced to choose between paying up for price hikes, or completing an expensive migration project to a different solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limited extensibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s not possible to change the code of a proprietary IDP. If there’s something about the way it works that doesn’t suit the needs of your company, your best hope is to contact support and hope that they have the desire and the roadmap space to change it.&lt;/p&gt;

&lt;p&gt;Most development organizations have some homegrown tools that have sprung up over the years internally. These tools only exist inside the company they were created, and no IDP vendor will have an out-of-the box integration for them. For these tools, you need to create your own plugins if you wish them to be part of your single pane of glass IDP. Some proprietary IDPs do support custom plugin development, but you’ll need to do so using only the concepts and libraries that the vendor provides, and the plugins you create will not be transferrable to any other solution.&lt;/p&gt;

&lt;p&gt;Proprietary IDPs have fewer integrations than the massive Backstage community. Even the most well funded proprietary vendor has 48 plugins listed on their integrations page, less than a quarter of the number that are available for Backstage. No matter how big this vendor grows their team, they won’t be able to compete with the 500+ companies who have contributed to Backstage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limited speed of execution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The tech landscape is constantly shifting and evolving. Before serverless we had Kubernetes, before Kubernetes we had virtualization, before virtualization we had bare metal. In between and around these major platform shifts we had and continue to have a massive number of different types of serverless, containerization and virtualization options.&lt;/p&gt;

&lt;p&gt;A developer portal is supposed to wrap all of these shifts and technologies in order to give the best possible coverage over your internal engineering landscape. Proprietary IDPs may struggle to capture all of these technology shifts into the future, leading to gaps in the portal that platform teams put in front of their internal users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hybrid
&lt;/h2&gt;

&lt;p&gt;Last, but not least, we have the Hybrid model. This model takes an open-source foundation with hundreds of plugins and integrations available, and makes it available in an out-of-the-box format which is easy to get started with.&lt;/p&gt;

&lt;p&gt;This is what Roadie is. It’s the only standalone IDP based on Backstage, and it offers the best of both worlds - extensibility &lt;em&gt;and&lt;/em&gt; speed of execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Huge number of integrations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The vast majority of plugins that have been created for Backstage can work on Roadie. &lt;a href="https://roadie.io/docs/integrations/" rel="noopener noreferrer"&gt;Our integrations library&lt;/a&gt; contains 70+ plugins and integrations today, and we’re adding more all the time, in line with customer requests. Once a new open-source plugin is created, it takes us about a day to make it available in Roadie.&lt;/p&gt;

&lt;p&gt;The only reason we wouldn’t add a Backstage plugin are that it’s of such low quality that it doesn’t work or provide any value.&lt;/p&gt;

&lt;p&gt;This means that Roadie customers can effectively choose from 200+ plugins and integrations that the Backstage community has created and use them on our platform. In fact, &lt;a href="https://github.com/RoadieHQ/roadie-backstage-plugins" rel="noopener noreferrer"&gt;we’ve created some of the most popular plugins ourselves&lt;/a&gt; and open-sourced them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highly extensible&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie strives to support as much customization of our IDP as possible. In addition to theming and branding, we support a custom data model, custom Backstage plugins, custom proxies, layouts, scaffolder actions and on and on. You name it, &lt;a href="https://roadie.io/blog/the-power-of-customization-making-backstage-work-for-you-with-roadie/" rel="noopener noreferrer"&gt;we can probably let you customize it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This means that you can customize Roadie to meet the specifics of your organization, improving adoption and facilitating ease of use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No vendor lock-in&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie is API compatible with Backstage. The same software metadata schema that works on Backstage will work on Roadie. Custom frontend plugins written for Backstage will also work on Roadie. We’re just supporting and extending the same APIs.&lt;/p&gt;

&lt;p&gt;This has two benefits for customers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;They can migrate off self-hosted Backstage onto Roadie very easily. Numerous organizations have already done this. Simply connect us to your source code management tool and we’ll automatically ingest any software metadata files you’ve created.&lt;/li&gt;
&lt;li&gt;They can migrate back to self-hosted Backstage very easily. In fact, our Terms of Service dictate that we will give you your data back within 30 days of termination.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;User friendly interface&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie’s interface is vastly improved compared to the barebones Backstage experience. We’ve worked with our users to streamline how people use the product. This means better out of the box defaults and easier customization.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/1TIBiSInyg1DhJjCj5TvOm/797e7071e5948feec6242bdce60e63ca/idp5.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/1TIBiSInyg1DhJjCj5TvOm/797e7071e5948feec6242bdce60e63ca/idp5.png" alt="idp5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inexpensive&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In many cases, Roadie is 5 times cheaper than self-hosting Backstage. &lt;/p&gt;

&lt;p&gt;People tend not to realize this up front, but the most highly developed Backstage deployments in the world have cost millions of dollars. We talk to companies all the time who have built a team of 5+ engineers around Backstage and run those teams for 3+ years. The most expensive Backstage deployment we’ve seen cost $7.5 million dollars over 3 years.&lt;/p&gt;

&lt;p&gt;Roadie doesn’t require such an extensive team to be built around it. We take away all of the operations and deployment effort, and much of the customer support that has to happen. We also give you out-of-the box features like &lt;a href="https://roadie.io/product/tech-insights/" rel="noopener noreferrer"&gt;Scorecards&lt;/a&gt; and &lt;a href="https://roadie.io/product/access-control/" rel="noopener noreferrer"&gt;Role-Based-Access-Control&lt;/a&gt; that you would otherwise have to build yourself to realize the potential of your IDP.&lt;/p&gt;

&lt;p&gt;Lastly, we charge based on usage. You only pay for the engineers who write code which is tracked in the catalog. Everyone else gets to log in for free. This means you can ramp gradually throughout your org, rather than paying for the developement of the entire IDP up front.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requires few skills&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie doesn’t require any TypeScript skills. You just drag and drop plugins where you want them, and configure the product in our administration panels. It’s dead simple. This is perfect for platform teams who are trained on cloud-native technologies. We even have no-code plugins that you can use to display lists or charts inside the UI without writing any code. &lt;/p&gt;

&lt;p&gt;If you do need to make something completely custom and you don’t want to write a Backstge plugin yourself, we can sort you out with professional services to suit your needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short time to value&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’ve built a ton of features into Roadie to help shorten the time to value. For example, we help teams build out their catalog quickly and we see customers reaching a &lt;a href="https://roadie.io/blog/3-strategies-for-a-complete-software-catalog/" rel="noopener noreferrer"&gt;high level of catalog completeness within 4 months&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;We also provide customer success and guidance to help organizations effect change with their IDP. We take the lessons we’ve learned over the years and use them to guide you to success in as short a time as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We’ve designed Roadie from the ground up with flexibility and easy adoption in mind. We believe engineering organizations should not waste their resources on undifferentiated heavy lifting projects like deploying an open-source IDP. At the same time, they shouldn’t be locked into a proprietary data model or limited in terms of what they can build or the integrations that are available.&lt;/p&gt;

&lt;p&gt;It turns out that you can have your cake and eat it too. An Internal Developer Portal can be both easy to use and supported by a massive and growing open-source community. This means that you can focus on unlocking productivity in your engineering organization while knowing you have a rock-solid and flexible foundation beneath.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I’ve also written about the difference between IDPs and the IDP space in general over on &lt;a href="https://thenewstack.io/internal-developer-portals-is-open-source-enough/" rel="noopener noreferrer"&gt;The New Stack&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Image by &lt;a href="https://pixabay.com/users/mstork-18903484/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=5856452" rel="noopener noreferrer"&gt;MSTORK&lt;/a&gt; from &lt;a href="https://pixabay.com//?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=5856452" rel="noopener noreferrer"&gt;Pixabay&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Power of Customization: Making Backstage Work for You with Roadie</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Thu, 17 Oct 2024 08:48:37 +0000</pubDate>
      <link>https://forem.com/roadie/the-power-of-customization-making-backstage-work-for-you-with-roadie-17nh</link>
      <guid>https://forem.com/roadie/the-power-of-customization-making-backstage-work-for-you-with-roadie-17nh</guid>
      <description>&lt;p&gt;Backstage is the most flexible way to build an Internal Developer Portal that exists. The downside of this flexibility is that it can take a lot of effort to use. Roadie’s mission is to take the hassle out of Backstage, but we want to deliver on this goal without preventing our users from customizing Backstage to the fullest extent possible.&lt;/p&gt;

&lt;p&gt;This article explains many of the customization options available in Roadie today. From look-and-feel customization like theming, to deep data model flexibility, custom scaffolder actions, and completely custom plugins, Roadie has the flexibility you need. &lt;/p&gt;

&lt;h2&gt;
  
  
  Backstage customizability
&lt;/h2&gt;

&lt;p&gt;Backstage is not a Developer Portal. It’s actually a framework for building developer portals. You can think of it as being more like a Software Development Kit for building your own developer portal. Each company is expected to mix &amp;amp; match and extend the libraries that the Backstage community make available, so that they end up with a completely customized and unique IDP.&lt;/p&gt;

&lt;p&gt;This fact is evident from day one of using Backstage. To get started, you don’t download and run a Docker container like you might expect. Instead, you run a command line tool to scaffold your own Backstage instance. Once that’s done, you write your own code to customize it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;-&amp;gt; npx @backstage/create-app@latest
? Enter a name &lt;span class="k"&gt;for &lt;/span&gt;the app &lt;span class="o"&gt;[&lt;/span&gt;required]: acme-corp-idp

Creating the app....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another example of this flexibility is evident in the plugin architecture. The Backstage community has created hundreds of open-source plugins that can be installed into a Backstage-based IDP in order to provide visibility into the many many tools that might be used. Backstage is designed in a way that makes these plugins easy to install and configure.&lt;/p&gt;

&lt;p&gt;From authentication hook points to source code management tool integrations to self-service scaffolder templates and UI components…. each and every part of Backstage can be ripped out and replaced and customized to your needs and desires. This is part of the philosophy of Backstage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadie customizability
&lt;/h2&gt;

&lt;p&gt;Despite being built on Backstage, Roadie is a complete, out-of-the-box, developer portal. We take away all of the work of building and maintaining your IDP, so that you can focus on getting value from the tool.&lt;/p&gt;

&lt;p&gt;We believe that most organizations shouldn’t need to build a team of 4 or 5 engineers around Backstage. You should want most of your engineering efforts focussed on initiatives that deliver direct customer value, rather than building internal tools from scratch.&lt;/p&gt;

&lt;p&gt;This is one of the reasons Roadie is delivered as Software as a Service. We want you to show up on day one and just start using it.&lt;/p&gt;

&lt;p&gt;At the same time, we also want to retain the philosophy of Backstage. You need to be able to customize Roadie just as much as you would customize Backstage. You should to be able to connect your own authentication providers, integrate your homegrown tools, and mix and match the plugins that make sense to you. For this reason, we strive to make Roadie as customizable and extensible as we possibly can.&lt;/p&gt;

&lt;p&gt;We believe that by combining Roadie’s ease of use with the flexibility and scope of the Backstage ecosystem, Roadie offers the best of both worlds, and is the best IDP on the market.&lt;/p&gt;

&lt;p&gt;This post explores many of the major ways you can customize Roadie to meet your needs. Here are your options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Theming and UI
&lt;/h2&gt;

&lt;p&gt;Your IDP should look and feel familiar to your users, and it should focus their workflows in order to improve efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Logos and branding
&lt;/h3&gt;

&lt;p&gt;Roadie let’s you replace the logos and branding across the site so that you can expose an IDP that matches your brand and themes.&lt;/p&gt;

&lt;p&gt;This image shows the dark-mode version of a theme for a fictional company called BeautyBox.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/670uquvHZffr8aHtvMxlam/1d71afd3c790d186c97a635a5f497828/customized-theme.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/670uquvHZffr8aHtvMxlam/1d71afd3c790d186c97a635a5f497828/customized-theme.png" alt="customized-theme"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Sidebar
&lt;/h3&gt;

&lt;p&gt;Roadie’s sidebar configuration lets you cut the navigation down to focus it on the most important use cases in your company. If you don’t need self-service automation capabilities in your IDP then you can easily remove them to streamline things. &lt;/p&gt;

&lt;p&gt;We also support reordering of sidebar sections, custom plugins in the sidebar, and deep links to important documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/FWWZqbbVXeKfK8UNmIvUA/3afa5a4c7fa91f68d44e58a99e18e9ed/sidebar.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/FWWZqbbVXeKfK8UNmIvUA/3afa5a4c7fa91f68d44e58a99e18e9ed/sidebar.png" alt="sidebar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Catalog customization
&lt;/h2&gt;

&lt;p&gt;The Roadie catalog offers control over how the catalog is collected in the first place, and how it is represented to end users who need to consume information in the catalog.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data model
&lt;/h3&gt;

&lt;p&gt;Many engineering organizations have custom terminologies they use to describe their particular software development life cycle. If your company uses Domain Driven Design, you might want top level concepts like “Value Streams” in your catalog. Other companies might want to support groups of people called “Tribes”. Probably every company will want a list of “Products”.&lt;/p&gt;

&lt;p&gt;Roadie supports a flexible and customizable data model that lets you rename existing Kinds and create your own types of entities. &lt;/p&gt;

&lt;p&gt;The screenshot below shows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Backstage’s &lt;code&gt;Group&lt;/code&gt; kind renamed to “Teams”, &lt;/li&gt;
&lt;li&gt;A custom entity type called “Products” has been created,&lt;/li&gt;
&lt;li&gt;Unused kinds like Locations and Domains have been hidden from users.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/5w6J9Mvur1n2DaemlttJPx/713ad2db34650cc2ec8929c21ce5d8b1/custom-data-model.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/5w6J9Mvur1n2DaemlttJPx/713ad2db34650cc2ec8929c21ce5d8b1/custom-data-model.png" alt="custom-data-model"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Table columns
&lt;/h3&gt;

&lt;p&gt;Different IDP users have different jobs, and that means they need different views. Roadie’s tables can be customized on a per user basis, so that everyone can streamline the UI to match the workflows they need.&lt;/p&gt;

&lt;p&gt;Users can turn columns on and off, resize columns and change the density of catalog tables. The best part is that these settings are persisted so you can easily dive back into your workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/6rs6SDhqgOCatiZf6wB2v6/9d013d5ef10d7db637fbc6c7473c0bad/custom-columns.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/6rs6SDhqgOCatiZf6wB2v6/9d013d5ef10d7db637fbc6c7473c0bad/custom-columns.png" alt="custom-columns"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The launch announcement covered &lt;a href="https://roadie.io/blog/august-2023-product-updates/#new-catalog-page-preview" rel="noopener noreferrer"&gt;the benefits of Roadie’s catalog UI&lt;/a&gt; in more depth.&lt;/p&gt;

&lt;h3&gt;
  
  
  Entity providers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://backstage.io/docs/features/software-catalog/external-integrations/#custom-entity-providers" rel="noopener noreferrer"&gt;Custom entity providers&lt;/a&gt; are a way to provide entities into the catalog from external systems and existing data sources. They’re a critical integration point that helps ensure that your catalog will automatically stay up to date with external systems.&lt;/p&gt;

&lt;p&gt;Roadie makes it easy to use custom entity providers via the &lt;a href="https://github.com/RoadieHQ/roadie-agent" rel="noopener noreferrer"&gt;Roadie Agent&lt;/a&gt;. The agent is a library that you can dump entities into in order to have them appear in the catalog.&lt;/p&gt;

&lt;p&gt;Here’s a simple example where we use the Roadie Agent to dump an array of hardcoded entity metadata.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RoadieAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;createRoadieAgentEntityProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@roadiehq/roadie-agent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fakePayload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;full&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;entities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Standard Backstage entity metadata omitted for brevity&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myEntityProviderHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fakePayload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;RoadieAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromConfig&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEntityProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;createRoadieAgentEntityProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;testprovider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myEntityProviderHandler&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Auto-discovery settings
&lt;/h3&gt;

&lt;p&gt;Any software metadata in YAML files should be auto-discovered by Roadie so that engineers don’t need to remember to register it via the UI.&lt;/p&gt;

&lt;p&gt;Roadie supports &lt;a href="https://roadie.io/docs/integrations/github-discovery/" rel="noopener noreferrer"&gt;custom auto-discovery settings&lt;/a&gt;, including glob matching.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/7bn1PECDmPvL8k3LG9oUQ6/18b5cf96c291e4ded2d5b8d12b6e0dff/custom-audodiscovery.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/7bn1PECDmPvL8k3LG9oUQ6/18b5cf96c291e4ded2d5b8d12b6e0dff/custom-audodiscovery.png" alt="custom-audodiscovery"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Group and User ingestion
&lt;/h3&gt;

&lt;p&gt;Roadie needs an organization chart in order to ensure that ownership of software can correctly be assigned to teams (aka. Groups), and to ensure that &lt;a href="https://roadie.io/blog/rollups-tech-insights/" rel="noopener noreferrer"&gt;scorecard data is correctly rolled up&lt;/a&gt; through the org chart.&lt;/p&gt;

&lt;p&gt;The best way to make sure the org chart is up-to-date and correct is to automatically sync it from a HR tool. To facilitate this, Roadie supports built in integrations for &lt;a href="https://roadie.io/docs/integrations/ms-graph-org-provider/#step-3-configure-your-microsoft-graph-org-ingestion-provider" rel="noopener noreferrer"&gt;Microsoft Graph&lt;/a&gt; (also known as Microsoft Entry ID, or Azure Active Directory) and &lt;a href="https://roadie.io/docs/integrations/okta/" rel="noopener noreferrer"&gt;Okta&lt;/a&gt;. Other solutions can easily push Users and Groups into the catalog &lt;a href="https://roadie.io/docs/details/entity-push-api/" rel="noopener noreferrer"&gt;via our API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plugins
&lt;/h2&gt;

&lt;p&gt;The real power of the Backstage ecosystem comes from its plugins. Roadie supports more than &lt;a href="https://roadie.io/docs/integrations/" rel="noopener noreferrer"&gt;70 Backstage plugins&lt;/a&gt; out of the box at the time of writing (September 2024). It typically takes us about a day to integrate a new open source plugin once it’s created by the community. &lt;/p&gt;

&lt;h3&gt;
  
  
  Plugin configuration
&lt;/h3&gt;

&lt;p&gt;Most plugins have configuration options that Roadie admins need to be able to configure to suit their particular setup. This is easily done via admin panels we have built into the product.&lt;/p&gt;

&lt;p&gt;Take the &lt;a href="https://roadie.io/backstage/plugins/argo-cd/" rel="noopener noreferrer"&gt;Argo CD plugin&lt;/a&gt; for example. Roadie supports two completely separate ways of integrating with Argo CD:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The app locator method allows you to dynamically search and identify Argo CD registered applications from multiple Argo CD instances.&lt;/li&gt;
&lt;li&gt;The proxy method is used to construct links to individual Argo CD applications. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can choose the best one for your needs, and even configure minute details like Namespace and Resource allowlists and blocklists.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/6yC7BTsQPJxsXOC6nNOokP/b251bb4b30d5f9d63d8d8ce54c4432d7/argo-cd-plugin-config.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/6yC7BTsQPJxsXOC6nNOokP/b251bb4b30d5f9d63d8d8ce54c4432d7/argo-cd-plugin-config.png" alt="argo-cd-plugin-config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The APIs of your Argo CD instances are probably not exposed on the public internet, but it’s still easy for Roadie to access them securely. We provide an &lt;a href="https://roadie.io/docs/integrations/broker/" rel="noopener noreferrer"&gt;open-source broker&lt;/a&gt; that runs in your infrastructure and makes an outbound connection to Roadie.&lt;/p&gt;

&lt;p&gt;For other plugins, like the Kubernetes plugin and EKS, we support AWS Role Sharing as the preferred configuration method. Whatever your connectivity needs, we probably have a solution for it.&lt;/p&gt;

&lt;p&gt;Of course Roadie’s responsibilities don’t begin and end with plugin configuration. We’re also: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vetting plugins for quality issues as we integrate them,&lt;/li&gt;
&lt;li&gt;Scanning plugins for licensing issues (which your legal team will be happy about), &lt;/li&gt;
&lt;li&gt;Documenting plugins so people know how to use them, &lt;/li&gt;
&lt;li&gt;Updating plugins as their authors release new features.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Frontend plugins
&lt;/h3&gt;

&lt;p&gt;If there isn’t a community created plugin that suits your needs, or you need a plugin for a homegrown tool that only exists in your company, Roadie can support that too. &lt;/p&gt;

&lt;p&gt;Users can write native Backstage plugins that run on Roadie and securely connect back to your private internal APIs via the broker.&lt;/p&gt;

&lt;p&gt;The plugin development workflow supports the ability to locally host custom plugins and run them right on Roadie during development. This basically means that you can make a change to your plugin code in your IDE, and simply refresh Roadie to see your changes live. &lt;/p&gt;

&lt;p&gt;We also support running production and development versions of the same custom plugin in Roadie at the same time, so you can iterate on your plugins without disrupting your users.&lt;/p&gt;

&lt;p&gt;Productionizing a plugin is as simple as running the Roadie CLI against it to package it up and push it to Roadie.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;roadie plugin:build &lt;span class="nt"&gt;--location&lt;/span&gt; /my-custom-plugin-folder/ &lt;span class="nt"&gt;--host&lt;/span&gt; https://static-assets.roadie.so/&amp;lt;my-tenant&amp;gt;/myCustomPlugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full range of Backstage frontend APIs are available to your custom plugins. You can query the catalog, check Role Based Access Control permissions, and even push analytics to see how people are using your plugin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Proxies
&lt;/h3&gt;

&lt;p&gt;Plugins frequently make use of proxies to upgrade requests with token authentication before forwarding them on to a backend service to retrieve data. Roadie users can create their own proxies inside the application. These proxies can be used to connect to third-party SaaS APIs like PagerDuty, or private internal APIs.&lt;/p&gt;

&lt;p&gt;Here’s a user created proxy for SonarCloud.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/uNqwnrwzkXX4o1K7OoJLX/1b835014c9d6a63a6d20d6c16a649215/sonarcloud-proxy-config.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/uNqwnrwzkXX4o1K7OoJLX/1b835014c9d6a63a6d20d6c16a649215/sonarcloud-proxy-config.png" alt="sonarcloud-proxy-config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Entity Pages
&lt;/h2&gt;

&lt;p&gt;Entity pages are the pages in the catalog which pull together information on a particular piece of software, a team, or an infrastructure resource. &lt;/p&gt;

&lt;h3&gt;
  
  
  UI layouts
&lt;/h3&gt;

&lt;p&gt;Adding plugins to Roadie interfaces is a simple matter of picking them off a list. This process is the same for both community created plugins (including plugins created by Roadie, plugins created by Spotify, and official plugins from companies like PagerDuty and Snyk) and for custom plugins you create yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/5PVqyqFluRAkjxiEN4BEJz/b4c4f2d272318fb363f7184430e95647/add-card.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/5PVqyqFluRAkjxiEN4BEJz/b4c4f2d272318fb363f7184430e95647/add-card.png" alt="add-card"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you’ve chosen your plugin, simply drag-and-drop it on the page, and resize it to suit your needs.&lt;/p&gt;

&lt;p&gt;Different types of entities need different layouts. The &lt;a href="https://roadie.io/backstage/plugins/lighthouse/" rel="noopener noreferrer"&gt;Backstage Lighthouse plugin&lt;/a&gt; makes sense for a website, but not for a Kubernetes cluster. Roadie organizes the plugins in this way so that it’s easy to create custom views without too much setup. Our built in role based access control ensures that admins have the power to set up layouts, without overloading regular users with too many options. Team pages are customizable in the same way, they just typically have different cards and widgets. &lt;/p&gt;

&lt;h3&gt;
  
  
  Props on plugins
&lt;/h3&gt;

&lt;p&gt;Sometimes individual cards will have their own editable properties. Roadie supports that too. For example, this card displays a list of recent GitHub Actions CI runs and their status. But how many recent CI runs should be displayed, and what layout should be used? Well, you can set that with the editable props.&lt;/p&gt;

&lt;p&gt;This screenshot shows the edit mode of the Dynatrace Backstage plugin.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/7tkVE8VIsIytv7dTGiMRd1/9e55dc3736d6628645a7e3ef62665f3f/dynatrace-plugin-props.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/7tkVE8VIsIytv7dTGiMRd1/9e55dc3736d6628645a7e3ef62665f3f/dynatrace-plugin-props.png" alt="dynatrace-plugin-props"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Metadata cards
&lt;/h3&gt;

&lt;p&gt;We’re aware that many platform teams wish to display custom information in Roadie, but don’t necessarily have the TypeScript skills on hand to create custom plugins from scratch. To make this easier, Roadie includes no-code cards that can display information from custom metadata on the Entity.&lt;/p&gt;

&lt;p&gt;Imagine we have a Backstage entity with some custom properties in its metadata.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;backstage.io/v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Component&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sample-service&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service&lt;/span&gt;
  &lt;span class="na"&gt;owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;group:roadiehq/engineering&lt;/span&gt;
  &lt;span class="na"&gt;lifecycle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
  &lt;span class="na"&gt;custom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;engineeringManager&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;user:dtuite&lt;/span&gt;
    &lt;span class="na"&gt;productManager&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;user:samnixon87&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How would we display this in the catalog? On Roadie, it’s as simple as adding the &lt;code&gt;EntityMetadataCard&lt;/code&gt; and configuring it in a couple of clicks. The card even auto-links the Engineering Manager and Product Manager to their User pages in the catalog.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/7Cl1juhJ6gq3Andvtd43ZG/80d2c55d6afe3d9c76858ce06fc5b0b1/custom-metadata-card.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/7Cl1juhJ6gq3Andvtd43ZG/80d2c55d6afe3d9c76858ce06fc5b0b1/custom-metadata-card.png" alt="custom-metadata-card"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Home page
&lt;/h3&gt;

&lt;p&gt;Of course it’s not just pages in the software catalog that can be customized. Roadie users can also customize the &lt;a href="https://roadie.io/docs/integrations/home-page/" rel="noopener noreferrer"&gt;Home page plugin&lt;/a&gt; to display key information that’s relevant to them. This is the place to display your open pull requests, community news, your calendar, and other useful info that’s tailored to the logged in user’s experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/w3ZLsGikg07UecgfSjWxY/a5d7627225e1b54b7f0f30d5912689ac/Screenshot_2024-06-20_at_15.49.28.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/w3ZLsGikg07UecgfSjWxY/a5d7627225e1b54b7f0f30d5912689ac/Screenshot_2024-06-20_at_15.49.28.png" alt="Roadie-instance-homepage-example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scaffolder
&lt;/h2&gt;

&lt;p&gt;Roadie scaffolder supports the full range of customization that you would expect from the Backstage scaffolder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Actions
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://roadie.io/docs/scaffolder/self-hosted-scaffolder-actions/#writing-a-template-using-custom-actions" rel="noopener noreferrer"&gt;Custom scaffolder actions&lt;/a&gt; are a way to execute homegrown CLI’s or arbitrary code as part of scaffolder templates. These are executed within your own infrastructure, which provides an added benefit in that it makes it easy to send internal network requests.&lt;/p&gt;

&lt;p&gt;Users can use the &lt;a href="https://github.com/RoadieHQ/roadie-agent?tab=readme-ov-file#custom-scaffolder-action" rel="noopener noreferrer"&gt;Roadie Agent&lt;/a&gt; (the same library used in the Custom Entity Providers section above) to register custom scaffolder actions with Roadie.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;RoadieAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addScaffolderAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;createRoadieAgentScaffolderAction&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;custom-action&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// The name of the action as defined in Roadie&lt;/span&gt;
      &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;workspacePath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/test.txt`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;new file with new contents&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;);&lt;/span&gt; 
          &lt;span class="c1"&gt;// Writing a new file into the shared workspace&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Local logging on the Roadie Agent process&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="c1"&gt;// Additional other actions that is wanted to be taken. This time looping for 5 seconds&lt;/span&gt;
          &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
          &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`hello world`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Sending a log message to be displayed to the end user&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; 
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;// Add a second custom scaffolder action&lt;/span&gt;
  &lt;span class="c1"&gt;// .addScaffolderAction(...) &lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These can then be used in your templates like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="c1"&gt;# This step executes on Roadie&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fetchTemplate&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Fetch file&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fetch:template&lt;/span&gt;
    &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./skeleton&lt;/span&gt;

  &lt;span class="c1"&gt;# This sends the workspace context to a self-hosted scaffolder runner&lt;/span&gt;
  &lt;span class="c1"&gt;# and executes the custom action we defined above. The payload passes&lt;/span&gt;
  &lt;span class="c1"&gt;# values to the self-hosted scaffolder runner and logs are written&lt;/span&gt;
  &lt;span class="c1"&gt;# back to Roadie.&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;invokeCustomAction&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Invoke a custom self-hosted action&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;roadie:agent&lt;/span&gt;
    &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;custom-action&lt;/span&gt;
      &lt;span class="na"&gt;shareWorkspace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;someValue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Field extensions
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://roadie.io/docs/scaffolder/custom-fields/" rel="noopener noreferrer"&gt;Custom field extensions&lt;/a&gt; give you the ability to build your own inputs and UI components for the scaffolder. You write them using the &lt;a href="https://backstage.io/docs/features/software-templates/writing-custom-field-extensions/" rel="noopener noreferrer"&gt;normal Backstage API&lt;/a&gt;, and push them into Roadie using the custom plugins pipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/2lHAUNIJCp4mWEECgnt4js/89dff377a4f75504a0502405005d86ae/Screenshot_2024-06-18_at_12.05.42.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/2lHAUNIJCp4mWEECgnt4js/89dff377a4f75504a0502405005d86ae/Screenshot_2024-06-18_at_12.05.42.png" alt="Customize-the-Roadie-scaffolder"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once registered, they can be used in Scaffolder templates by matching the name of the &lt;code&gt;ui:field&lt;/code&gt; prop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Fill in some steps&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;name&lt;/span&gt;
    &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Name&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;My custom name for the component&lt;/span&gt;
        &lt;span class="na"&gt;ui:field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;MyCustomInput&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Authentication &amp;amp; Authorization
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single-Sign-On (SSO) setups
&lt;/h3&gt;

&lt;p&gt;Roadie provides native support for any SSO provider you can imagine. Okta, Microsoft Entra ID, Google, AWS, Ping Identity…. you name it, we’re probably already using it in production.&lt;/p&gt;

&lt;p&gt;Setting this up is a simple matter of sending our docs to your IT team, or whoever controls your SSO setup. We will then work directly with that team to get your authentication provider configured.&lt;/p&gt;

&lt;p&gt;Once set up, your IT team can grant and revoke access to Roadie without being blocked by us. They have full control over the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Roles
&lt;/h3&gt;

&lt;p&gt;Customers who have purchased our role-based access control add-on can define custom roles which can then be assigned to groups of users.&lt;/p&gt;

&lt;p&gt;In this example, you can create a role which can only read the catalog. It wouldn’t be able to execute scaffolder templates or register anything in the catalog.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/6WAxROTDuksZKP9Hjngzyp/6319b1104af0474c5a2fb93c453d813a/custom-roles.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/6WAxROTDuksZKP9Hjngzyp/6319b1104af0474c5a2fb93c453d813a/custom-roles.png" alt="custom-roles"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Roles can also be assigned via your Identity Provider like Okta or Microsoft Entra ID. This is especially useful when your IT team wishes to manage access and roles in a single place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissions/policies (coming soon)
&lt;/h3&gt;

&lt;p&gt;When role-based access control gets really powerful is with the ability to define custom permissions which can then be combined in roles. For example, perhaps you want to hide Component entities which are tagged with &lt;code&gt;sensitive&lt;/code&gt; from everyone except the security team.&lt;/p&gt;

&lt;p&gt;We’re working on this ability at Roadie and expect it to roll out in 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Insights (Scorecards)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Custom data sources
&lt;/h3&gt;

&lt;p&gt;Data Sources are recurring jobs which gather data that can then be used to write checks against.&lt;/p&gt;

&lt;p&gt;For example, Roadie comes with a built-in GitHub Settings Data Source which records facts about each repository in the catalog, like whether or not branch protection is turned on, or whether or not force pushes are allowed.&lt;/p&gt;

&lt;p&gt;Users can also create their own Data Sources from scratch. At the time of writing, 7 different types of Data Sources are supported. Here are some examples:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;HTTP Data Sources hit third-party APIs and pick values from the JSON response&lt;/li&gt;
&lt;li&gt;Component Repository File Data Sources inspect files in the repository associated with each Component and record values from them.&lt;/li&gt;
&lt;li&gt;Push Based Data Sources receive webhook events and store them for processing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Creating Data Sources is a simple matter of filling out a few fields. You don’t need to write any TypeScript or YAML. Data Sources support advanced features like metadata variables, JSONata processing, inline testing, and error handling.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/7k85THcrcjLAflDySczrQ4/5fceb794b799ee77bbca4169c7d53d0b/Screenshot_2024-06-18_at_12.43.37.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/7k85THcrcjLAflDySczrQ4/5fceb794b799ee77bbca4169c7d53d0b/Screenshot_2024-06-18_at_12.43.37.png" alt="Custom-data-sources"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom checks
&lt;/h3&gt;

&lt;p&gt;Checks inspect a value created by a Data Source and give it a pass or fail for each entity it applies to.&lt;/p&gt;

&lt;p&gt;This check ensures there is a README.md in the repository associated with each piece of software. &lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/5QIfu5EIA3phMK07hAn8pJ/4650b11efa61342810c045a201acb4b8/Screenshot_2024-06-18_at_12.45.10.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/5QIfu5EIA3phMK07hAn8pJ/4650b11efa61342810c045a201acb4b8/Screenshot_2024-06-18_at_12.45.10.png" alt="Custom-checks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Advanced features like boolean logic and live testing of the check are supported. Checks can link to documentation when they fail, or even link to a scaffolder template that can help the owner of a service to fix the failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom scorecards
&lt;/h3&gt;

&lt;p&gt;Users can create their own scorecards that apply to the software in the catalog in order to communicate best practices and expectations to teams.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/75CxdnNECkNEfBUzcTRjDM/c4885ac9b50147d9aacea06cc7e3db80/scorecard.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/75CxdnNECkNEfBUzcTRjDM/c4885ac9b50147d9aacea06cc7e3db80/scorecard.png" alt="scorecard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each scorecard is a user defined collection of checks that shows up in reporting, in the catalog, and on team pages. Scorecard data is rolled-up through the catalog so that you can dip in at any level of the org chart and see aggregated data from below that point.&lt;/p&gt;

&lt;h2&gt;
  
  
  And there’s more coming
&lt;/h2&gt;

&lt;p&gt;We’re constantly adding to the ways you can customize Roadie. If you want to stay up to date with the latest customizations, &lt;a href="https://roadie.io/backstage-weekly/" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt; to our newsletter to hear what’s coming.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Image by &lt;a href="https://pixabay.com/users/grumpybeere-22072131/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=8829735" rel="noopener noreferrer"&gt;GrumpyBeere&lt;/a&gt; from &lt;a href="https://pixabay.com//?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=8829735" rel="noopener noreferrer"&gt;Pixabay&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Ultimate Guide to Backstage Software Catalog Completeness</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Wed, 09 Oct 2024 10:10:00 +0000</pubDate>
      <link>https://forem.com/roadie/the-ultimate-guide-to-backstage-software-catalog-completeness-4kmh</link>
      <guid>https://forem.com/roadie/the-ultimate-guide-to-backstage-software-catalog-completeness-4kmh</guid>
      <description>&lt;p&gt;Internal developer portals (IDPs) like Backstage and Roadie are, at their core, software catalogs. The software catalog is the backbone upon which much of the other functionality hangs, and building a complete catalog is vital to the success of the IDP project.&lt;/p&gt;

&lt;p&gt;Without a complete catalog, an IDP cannot fulfill it’s primary purpose: improving developer productivity. It cannot drive improved discoverability if the software that teams are trying to discover is not in there. It cannot help to measure the standardization or security posture of software it does not know about.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/1I3jY1seLqybnUXxPtTPHn/7c863cdfb25add62d4c8dd5a684794f1/catalog.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/1I3jY1seLqybnUXxPtTPHn/7c863cdfb25add62d4c8dd5a684794f1/catalog.png" alt="Closeup of Roadie catalog data"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article is a comprehensive guide to catalog completeness in Backstage. Roadie is built on top of Backstage, and so all of the same lessons apply. We cover why it’s important, how to measure it, and how to achieve it. &lt;/p&gt;

&lt;p&gt;First, let’s learn why you want to build a complete catalog in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why building a complete catalog is important
&lt;/h2&gt;

&lt;p&gt;The primary reason companies deploy an IDP is because they want to make developers more efficient. A big part of this is helping teams answer basic questions about the software around them. They want to make it easy to answer questions like “do we have a geocoding service?”, “which team owns the checkout service?” and “where is the API spec for the users service?”. These questions can only be answered by the IDP if the geocoding service, checkout service, and users service are registered there in the first place.&lt;/p&gt;

&lt;p&gt;A complete catalog is essential when using an IDP to &lt;a href="https://dev.to/blog/tech-insights-for-roadie-backstage/"&gt;measure the maturity of the software that teams are producing&lt;/a&gt;. Applying scorecards to software in the catalog of the IDP can be a great way to determine the security posture of each production service. But scorecards can only apply to software which is actually in the catalog.&lt;/p&gt;

&lt;p&gt;The software catalog is also the fundamental unit of navigation in the IDP. The lack of a software catalog is the reason that wikis like Confluence or Notion cannot solve the discoverability problem that IDPs solve. In a wiki, content is organized into pages, which are intentionally unstructured and flexible. In an IDP, content is organized by Component (think “piece of software”) and is structured so that the same information is available for each Component.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to measure catalog completeness
&lt;/h2&gt;

&lt;p&gt;Having a complete catalog doesn’t necessarily mean that every piece of software is in the catalog. Most organizations have their share of abandoned code. It may have been created during hackathons or for brief experiments that never saw production usage. Having all of this stuff in the catalog can create clutter and noise.&lt;/p&gt;

&lt;p&gt;There may also be parts of the organization for whom it doesn’t make sense to be in the catalog. We work with companies which have large hardware divisions who write code for embedded devices. They don’t necessarily follow the DevOps lifecycle and thus are sometimes intentionally omitted.&lt;/p&gt;

&lt;p&gt;Production software is the most important stuff to have in the catalog. It’s the software that most engineers work with most of the time. Production software will have the most frequently referenced APIs and docs and it’s much more important to have an understanding of the maturity of the software that runs in production environments, since it has the most attack vectors.&lt;/p&gt;

&lt;p&gt;For this reason, we frequently see customers create a list of software which is deployed to production by referencing ArgoCD or some other deployment tool. They then compare this against software in the catalog, frequently by &lt;a href="https://dev.to/docs/api/catalog/"&gt;accessing the Roadie APIs&lt;/a&gt; or by using our CSV export functions.&lt;/p&gt;

&lt;p&gt;The next best bet is to compare number of pieces of software (aka. Components) in the catalog against the number of active, unarchived repositories in your source code solution. This will never give you a perfect answer, because “pieces of software” don’t necessarily map perfectly one-to-one to repositories (monorepos etc), but it’s a good start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Roadie Helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At Roadie we give every customer a chart which shows the percentage of their active (non-archived and received a commit in the past 12 months) repositories against the number of Components in the catalog.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/1ARgOlDcPMyAFeoRNya90q/0d38708de2c23c6b644b3f33d3a95146/Screenshot_2024-09-20_at_13.54.53.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/1ARgOlDcPMyAFeoRNya90q/0d38708de2c23c6b644b3f33d3a95146/Screenshot_2024-09-20_at_13.54.53.png" alt="Catalog completeness formula"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadie customers can achieve high catalog completeness
&lt;/h2&gt;

&lt;p&gt;Achieving a high level of catalog completeness is definitely possible. &lt;/p&gt;

&lt;p&gt;The majority of established Roadie customers are happy with their level of catalog completeness and we have many customers who have a catalog completeness level (measured as a percentage of active repositories which are registered in the catalog) which is above 80%.&lt;/p&gt;

&lt;p&gt;Here’s a chart showing catalog completeness for &lt;a href="https://uplight.com/" rel="noopener noreferrer"&gt;Uplight&lt;/a&gt; who onboarded in September 2023. Four months later they were at 88% catalog completeness, with more than 600 components in their catalog.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/N1n0O0iqaKNeWu1bjhTAc/39ecee5eac4d8dae1729ae981eb82d8d/uplight_catalog_completeness.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/N1n0O0iqaKNeWu1bjhTAc/39ecee5eac4d8dae1729ae981eb82d8d/uplight_catalog_completeness.png" alt="uplight catalog completeness"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s another Roadie customer who increased their catalog completeness from 40% to 90% over a period of four months. They now have more than 750 components registered.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/4ZGSECkA66xHAQgGV2FKgq/801c0f364b46e4c829c88b43547e7bcc/snyk_catalog_completeness.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/4ZGSECkA66xHAQgGV2FKgq/801c0f364b46e4c829c88b43547e7bcc/snyk_catalog_completeness.png" alt="customer catalog completeness"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are countless more examples like this amongst Roadie customers. The goal of this post is to help all companies achieve the same results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategies for building a complete catalog
&lt;/h2&gt;

&lt;p&gt;There are multiple strategies that can be used to build a complete catalog. The strategy that is right for your company can depend on factors like the size of the company and the enthusiasm of the developers to have an IDP. &lt;/p&gt;

&lt;p&gt;You may also want to run multiple strategies in parallel, or start with one in order to get the bulk of software into the catalog, and switch to another to get closer to full catalog completeness.&lt;/p&gt;

&lt;p&gt;Think about expanding catalog completeness like the layers of an onion. Start with the most enthusiastic early adopters and get them onboard. Then use them as an example as you expand out to the rest of the organization.&lt;/p&gt;

&lt;p&gt;We recommend you import users (aka. employees) and teams (called Groups in Backstage nomenclature) into the catalog before creating any software components. You will ideally want to assign ownership of each component to a team as you import it. This task is much easier if all of your teams already exist in the catalog.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you don’t know which strategy to choose…
&lt;/h3&gt;

&lt;p&gt;Experiment! You don’t need to roll out to the whole organization in one go. Pick some friendly teams, run one strategy on each team, and analyze the results. Did you end up with software in the catalog? What is the feedback from each team? Where did they get stuck? Take this feedback and use it to improve the process before expanding out to more teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy 1: Centralized automated
&lt;/h3&gt;

&lt;p&gt;This strategy involves connecting to a chokepoint in the organization in order to push software metadata into the catalog programatically. It does not require anyone to write &lt;code&gt;catalog-info.yaml&lt;/code&gt; files. &lt;/p&gt;

&lt;p&gt;Frequently, the initial chokepoint will not have all of the information required to build a useful catalog. When this happens, the software metadata must be enriched after the fact.&lt;/p&gt;

&lt;p&gt;Depending on your tech stack and permission settings, following options may be viable:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An ArgoCD instance which does deployments to the production environment. It has knowledge of the most critical software in the org (software that goes to production) and can thus can be a good starting point for the catalog.&lt;/li&gt;
&lt;li&gt;A Helm chart which is used by a large percentage of the deployable software in the organization.&lt;/li&gt;
&lt;li&gt;A centrally owned CI job or build tool which can be written by the centralized team and applied to software which is owned by other teams in the organization. For example, Lunar Bank have talked about how &lt;a href="https://www.youtube.com/live/a3UjbRse8yk?si=GXheV8QLzHTfPO4G&amp;amp;t=1307" rel="noopener noreferrer"&gt;they populate their catalog from their build tool called shuttle&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A legacy software catalog, developer portal or spreadsheet.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The software catalog can quite quickly be bootstrapped to a highly complete state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The ownership link between software and teams is not immediately established.&lt;/li&gt;
&lt;li&gt;Companies with no source of truth or a heavily fractured deployment ecosystem may not be able to implement this strategy.&lt;/li&gt;
&lt;li&gt;The product teams will be less well educated on the value of the IDP when the process is finished.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tactics to prioritize in order to succeed with this strategy&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use custom entity providers&lt;/li&gt;
&lt;li&gt;Make catalog presence a requirement for deployment&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Strategy 2: Centralized manual
&lt;/h3&gt;

&lt;p&gt;This strategy tries to avoid asking the individual product teams to do work. Instead, the centralized team takes it upon themselves to populate the catalog. They may do this in collaboration with the product teams, but they likely won’t ask them to write any YAML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;This strategy is likely to be faster than the distributed manual strategy, especially for companies which don’t have thousands of microservices.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The product teams will be less well educated on the value of the IDP when the process is finished.&lt;/li&gt;
&lt;li&gt;It may be difficult for the centralized team to gather enough data about each individual software component.&lt;/li&gt;
&lt;li&gt;It becomes the centralized teams job to manually keep the catalog up to date.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tactics to prioritize in order to succeed with this strategy&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Store software metadata in a single repository&lt;/li&gt;
&lt;li&gt;Open scripted pull requests&lt;/li&gt;
&lt;li&gt;Customize the catalog nomenclature&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Strategy 3: Distributed manual
&lt;/h3&gt;

&lt;p&gt;This strategy involves asking all of the individual product teams to register the software that they own in the catalog.&lt;/p&gt;

&lt;p&gt;Typically, the central team who own the IDP will meet with and educate the product teams on the value of the IDP, either on an individual basis, or in larger groups. The central team will provide tools and materials to the product teams in order to teach them what they need to do to get their software into the catalog (typically create a &lt;code&gt;catalog-info.yaml&lt;/code&gt; file), and give them clear steps to take in order to achieve catalog completeness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Product teams are more likely to feel a sense of ownership over their software in the catalog because they put it there in the first place.&lt;/li&gt;
&lt;li&gt;Product teams have an opportunity to learn about features of the IDP as they are registering their software. They may then choose to use features in the IDP such as technical documentation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;This strategy requires a lot of work from the central team in order to yield high catalog completeness. It will take time. They will need to educate and continually follow up with product teams throughout the company.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tactics to prioritize in order to succeed with this strategy&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give teams a scaffolder template to register software&lt;/li&gt;
&lt;li&gt;Share catalog completeness numbers publicly&lt;/li&gt;
&lt;li&gt;Tie catalog completeness to a wider initiative&lt;/li&gt;
&lt;li&gt;Write custom plugins to create value&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tactics for building a complete catalog
&lt;/h2&gt;

&lt;p&gt;The tactics you need to use will depend on the strategy you are implementing. This is a full list of all the tactics we know. Please refer to the strategies above in order to know which tactics to choose.&lt;/p&gt;

&lt;p&gt;Some tactics will apply regardless of the strategy that is chosen. They are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Customize the catalog taxonomy&lt;/li&gt;
&lt;li&gt;Move onboarding docs into Roadie&lt;/li&gt;
&lt;li&gt;Present on the value of Roadie to people managers&lt;/li&gt;
&lt;li&gt;Tie catalog completeness to a wider initiative&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each of the tactics mostly fall into one of the following categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reduce friction for developers who want to get their software into the catalog.&lt;/li&gt;
&lt;li&gt;Create incentive for developers to put their software into the catalog.&lt;/li&gt;
&lt;li&gt;Educate developers on how to use the catalog.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Give teams a scaffolder template to register their software
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reduce friction&lt;/p&gt;

&lt;p&gt;This involves writing a scaffolder template that teams can use inside Backstage in order to create a &lt;code&gt;catalog-info.yaml&lt;/code&gt; file in their repositories. &lt;/p&gt;

&lt;p&gt;The scaffolder template will ask the user to fill out some information about their software, typically by picking from pre-defined values, and will open a pull request against a repository when finished. Once the user reviews and merges the pull request, auto-discovery will pick up the &lt;code&gt;catalog-info.yaml&lt;/code&gt; file and populate the catalog.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/6JZlwjWtlviRJZ447aQSS/981d6528caffed236d0419e717fcf439/scaffolder_template_for_completing_catalog" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/6JZlwjWtlviRJZ447aQSS/981d6528caffed236d0419e717fcf439/scaffolder_template_for_completing_catalog" alt="scaffolder template for completing catalog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Individual developers don’t need to understand the (long) &lt;a href="https://backstage.io/docs/features/software-catalog/descriptor-format" rel="noopener noreferrer"&gt;Backstage YAML API spec&lt;/a&gt; in detail. &lt;/li&gt;
&lt;li&gt;The owners of the IDP can use the template to constrain the “type”, “lifecycle” and other properties that is assigned to each software component. This puts guardrails in place that will help create &lt;a href="/blog/improving-backstage-performance/https://roadie.io/blog/improving-backstage-performance/"&gt;more consistency in the catalog&lt;/a&gt;. Catalog consistency is important, and &lt;a href="https://dev.to/blog/kinds-and-types-in-backstage/"&gt;will help you avoid problems in future&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The form can integrate with external APIs to pull in sensible options. For example, in the screenshot above, the “Component Owner” is a selection of all the engineering teams in the company. The user doesn’t need to type an exact string.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How Roadie helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie provides a &lt;a href="https://github.com/roadie-demo/getting-started/tree/main/scaffolder/register-new-component" rel="noopener noreferrer"&gt;starting point for a software registration template&lt;/a&gt; in the getting-started repo. Customers can fork it into their own GitHub org, edit it to meet their needs and import it into their own Backstage instance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Archive unused repositories
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reduce friction&lt;/p&gt;

&lt;p&gt;If our measure of catalog completeness is:&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/1ARgOlDcPMyAFeoRNya90q/0d38708de2c23c6b644b3f33d3a95146/Screenshot_2024-09-20_at_13.54.53.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/1ARgOlDcPMyAFeoRNya90q/0d38708de2c23c6b644b3f33d3a95146/Screenshot_2024-09-20_at_13.54.53.png" alt="Catalog completeness formula"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;then we can increase catalog completeness by archiving old repositories that nobody is using. &lt;/p&gt;

&lt;p&gt;It may sound somewhat silly, but every organization has abandoned hackathon projects and old test repos that are unused and simply causing clutter. By archiving them, we clean up our source code management tool while improving catalog completeness.&lt;/p&gt;

&lt;p&gt;Believe it or not, Roadie has one customer who increased catalog completeness from 45% to 75% just by archiving repositories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Roadie helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our catalog implementation ensures that Components are removed from the catalog when the repo they reference is archived.&lt;/p&gt;

&lt;h3&gt;
  
  
  Customize the catalog nomenclature
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reduce friction&lt;/p&gt;

&lt;p&gt;By mapping the Kinds of entity that show up in the catalog to familiar concepts in your company, you can create instant recognition for developers who land in the catalog. &lt;/p&gt;

&lt;p&gt;For example, if your company has a concept of “Valuestream” then make this front and center in the catalog so that users instantly understand what they’re looking at.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Users can orient themselves quickly and get value rapidly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How Roadie helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie customers can use our admin interfaces to customize and rename the core catalog concepts, and create completely new ones.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/2c7gYTA1or5GRWYqmu2C2t/236d2036ba43321d81b0acd51a9ab14a/customize_the_catalog.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/2c7gYTA1or5GRWYqmu2C2t/236d2036ba43321d81b0acd51a9ab14a/customize_the_catalog.png" alt="customize the catalog terminology"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Write custom plugins to create value
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Create incentive&lt;/p&gt;

&lt;p&gt;Custom plugins provide value for product teams by giving them faster ways to perform bespoke workflows inside the catalog. By creating custom plugins, a central team can incentivize developers to add their software into the component.&lt;/p&gt;

&lt;p&gt;For example, &lt;a href="https://youtu.be/TZ6-SpoFVeY?si=l-rz2H6HsPzkln0W&amp;amp;t=369" rel="noopener noreferrer"&gt;Lunar Bank have custom plugins for dealing with dead letters in RabbitMQ&lt;/a&gt;. These plugins are regularly useful for developers. This causes them to visit the catalog to use the plugin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Custom plugins are quite simple to produce and can quickly create value for software engineers.&lt;/li&gt;
&lt;li&gt;Custom plugins unlock tailored value for engineers to help them do things more quickly or more easily than they otherwise could. They sometimes even allow them to perform a task that they cannot do at all outside of Roadie or Backstage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How Roadie Helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie provides an interface for registering and managing custom plugins. It also facilitates live reloading of custom plugins, the ability to run multiple versions of a plugin side by side, and a &lt;a href="https://github.com/RoadieHQ/software-templates/blob/main/scaffolder-templates/roadie-plugin/template.yaml" rel="noopener noreferrer"&gt;scaffolder template&lt;/a&gt; to bootstrap a custom plugin monorepo. Custom plugins on Roadie can securely connect back to a private network to load data from internal APIs. &lt;a href="https://dev.to/docs/custom-plugins/getting-started/"&gt;Check out our docs to learn more&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Move onboarding docs into Roadie
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Educate&lt;/p&gt;

&lt;p&gt;Engineer onboarding docs are typically used to help a new engineer to set up their environment and get to productivity quickly. Expedia Group, Spotify and other Backstage adopters have successfully used TechDocs and scaffolder templates to speed up engineer onboarding and help new engineers become familiar with the IDP on day one. The exact same tactic can be deployed on Roadie.&lt;/p&gt;

&lt;p&gt;Expedia Group put 850+ engineers through their Backstage based bootcamp in 2022. They discuss it in their &lt;a href="https://backstage.io/blog/2023/08/17/expedia-proof-of-value-metrics-2/" rel="noopener noreferrer"&gt;case study on the Backstage website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Newly onboarded engineers start using Roadie on day one. They get used to it and understand how to come back.&lt;/li&gt;
&lt;li&gt;Engineers learn how to use a scaffolder template to create a new service during onboarding. This service is added to the catalog, and they learn how the catalog works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How Roadie Helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie supports standalone TechDocs that are not tied to a particular software component in the catalog. These are perfect for onboarding docs. &lt;/p&gt;

&lt;h3&gt;
  
  
  Present on the value of Roadie to people managers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Educate&lt;/p&gt;

&lt;p&gt;Roadie provides specific value to managers, directors and VPs that is different than the value that developers might care about. By educating managers on the value they will receive, you can encourage them to work with their teams to get their software into the catalog.&lt;/p&gt;

&lt;p&gt;For example, did you know that &lt;a href="https://backstage.spotify.com/blog/how-spotify-measures-backstage-roi/" rel="noopener noreferrer"&gt;frequent Backstage users at Spotify are 5% more likely to be at the company&lt;/a&gt; one year later. Retention is important for managers, so they need to know about this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Roadie Helps&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://dev.to/product/tech-insights/"&gt;Roadie provides Scorecards&lt;/a&gt; which can help managers ensure that their teams are producing mature and high quality software. This feature is not available for open-source Backstage.&lt;/li&gt;
&lt;li&gt;Roadie gives customers value calculators to help them estimate the dollar value they can expect to receive.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Open scripted pull requests
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reduce friction&lt;/p&gt;

&lt;p&gt;Opening an automated pull request containing a &lt;code&gt;catalog-info.yaml&lt;/code&gt; file is a good way to ease the burden on developers who want to get their software into the catalog. All they need to do is edit the pull request a little bit, review it and merge it.&lt;/p&gt;

&lt;p&gt;Keep in mind that your script will need permissions to open a pull request against a majority of repositories in your source code management tool. Depending on your security model, this may not be possible.&lt;/p&gt;

&lt;p&gt;This method can work especially well in companies that operate out of large monorepos. A monorepo setup allows the generation of a single pull request that can add many &lt;code&gt;catalog-info.yaml&lt;/code&gt; files in one go. It can also be reviewed and merged by a single person with elevated permissions.&lt;/p&gt;

&lt;p&gt;While this is a tempting option to quickly build a catalog with YAML files, we have seen customers experience issues with catalog correctness when they use this method. Some teams may blindly merge the pull request without validating the information that it contains. This tactic should be executed alongside an education program to teach teams what to do. Go slowly and experiment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Roadie Helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/docs/api/catalog/"&gt;Roadie provides a token authenticated API&lt;/a&gt; which the centralized team can use to tell which repositories are already in the catalog. A simple script can consume this to open a PR against the repos which are not already accounted for.&lt;/p&gt;

&lt;p&gt;Our solutions engineering team can work with you to write a simple script that will open a pull request containing a YAML file into each repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make catalog presence a requirement for deployment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Create incentive&lt;/p&gt;

&lt;p&gt;By making catalog presence mandatory for deployment, platform teams can be confident that they have all of the important software in the catalog.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://dev.to/backstage-spotify/#the-origins-of-spotify-backstage"&gt;the early days of Backstage at Spotify&lt;/a&gt;, teams could not SSH into their machines unless their services were in the catalog. The catalog owner was referenced to determine who was and was not allowed to access the machine.&lt;/p&gt;

&lt;p&gt;This tactic works best when the IDP is orchestrating a new greenfield platform that other teams are migrating onto. Adding the &lt;code&gt;catalog-info.yaml&lt;/code&gt; file can be one simple step in what is likely a series of steps that teams have to do to migrate. Outside of this situation, it can be politically problematic to block deployments due to a missing YAML file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automate catalog collection with custom entity providers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reduce friction&lt;/p&gt;

&lt;p&gt;If developers find writing YAML files tedious, potentially the best thing to do is to make them optional. &lt;a href="https://backstage.io/docs/features/software-catalog/external-integrations/" rel="noopener noreferrer"&gt;Backstage’s custom entity providers&lt;/a&gt; allow adopters to programmatically shovel software entries into the catalog. Custom entity providers are a great way to connect Backstage to an existing source of truth for catalog data, such as a legacy IDP, an ArgoCD instance, a kubernetes cluster, or a CICD tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Roadie helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie gives customers the &lt;a href="https://github.com/RoadieHQ/roadie-agent?tab=readme-ov-file#entity-provider" rel="noopener noreferrer"&gt;roadie-agent&lt;/a&gt;. This wraps the custom entity provider concept with a secure connection to Roadie so that customers can easily dump software metadata into the agent and have it appear in the catalog.&lt;/p&gt;

&lt;p&gt;Roadie has an &lt;a href="https://dev.to/docs/api/catalog/"&gt;Entity Provider API&lt;/a&gt;. Simply push an array of software metadata to this endpoint and it will appear in the catalog. To update the metadata, simply push again.&lt;/p&gt;

&lt;p&gt;Frequently the programatic source of truth will have some but not all of the metadata that the catalog needs. For example, it may be missing the name of the team who owns the software. Roadie allows users to &lt;a href="https://dev.to/docs/integrations/github-discovery/#decorating-catalog-entities"&gt;decorate&lt;/a&gt; software in the catalog with extra metadata within the UI. This ensures that the catalog can become complete and rich over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Share catalog completeness numbers publicly
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Create incentive&lt;/p&gt;

&lt;p&gt;One great way to get people bought into the idea of building a complete catalog is to make it a group effort. By transparently reporting on the completeness and “health” of the catalog, a shared sense of ownership over the goal can be created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/P-JMwuuobgY?si=BNihgof1uNBUM2pw&amp;amp;t=1235" rel="noopener noreferrer"&gt;Twilio explained how they do this in their catalog&lt;/a&gt; at the Autodesk Developer Productivity Summit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Roadie Helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roadie gives all Tech Insights customers an out-of-the-box measurement of catalog completeness.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/hcqpbvoqhwhm/44W4D88ivKswQ5Idg1jZ8W/93f4e9fb1a516a926794a293973c006b/tech_insights_catalog_scorecard.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/hcqpbvoqhwhm/44W4D88ivKswQ5Idg1jZ8W/93f4e9fb1a516a926794a293973c006b/tech_insights_catalog_scorecard.png" alt="tech insights catalog scorecard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also report on important aspects of catalog richness, like the percentage of pieces of software in the catalog which have an owner assigned. Customers can use these building blocks to &lt;a href="https://dev.to/docs/tech-insights/tracking-catalog-correctness/mandatory-metadata/"&gt;measure other attributes of the health of their catalog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tie catalog completeness to a wider initiative
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Create incentive&lt;/p&gt;

&lt;p&gt;Companies usually want a complete catalog so that they can accomplish some wider engineering goal. By promoting catalog completeness in service of this wider goal, teams can better understand why it is important to be in the catalog, and why they should help.&lt;/p&gt;

&lt;p&gt;For example, we recently worked with a customer who needed a complete and correct list of all software that had access to their users personally identifiable information (PII). By attaching to this company wide goal and leveraging the influence of the company CTO, the company was able to rapidly label hundreds of software components in Roadie with their PII status.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Roadie Helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We run regular customer success meetings with customers to help them identify wider engineering initiatives where Roadie can help accomplish the goal more quickly or more easily. We will then work with teams in order to project manage the delivery of a solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do a whiteboarding session
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I did some eduction with a team at [company] where we brainstormed the services they wanted to cover and their relationships, this was a whiteboard exercise and I then created the PR's and had them review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When &lt;a href="https://dev.to/case-studies/from-self-hosted-backstage-to-roadie/"&gt;Paddle started with Backstage&lt;/a&gt;, they realized that they didn’t have an existing source of truth they could lean on to populate their catalog, and they would have to collate it manually.&lt;/p&gt;

&lt;p&gt;They started with a whiteboarding exercise so they could iterate quickly. Meeting with each team in small groups, Ioannis Georgoulas (Director of SRE), led the process. He first spent time brainstorming the services that the groups wanted to catalog, and defining their boundaries and the relationships between them. This information was all collected in a simple document to start.&lt;/p&gt;

&lt;p&gt;Once he had a solid understanding of the service map, Ioannis opened pull requests against each repository with the &lt;code&gt;catalog-info.yaml&lt;/code&gt; file that was needed. All the teams had to do was review and merge it. Because they had participated in the process to gather this information, they were already bought in and could understand the value of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Roadie Helps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We provide frequent customer success calls with every customer through the initial stages of implementation. We’ll partner with your implementors to run these whiteboarding sessions and gather the information you need to be successful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways/Conclusion
&lt;/h2&gt;

&lt;p&gt;Building a high level of catalog completeness in Backstage need not be intimidating. By carefully choosing the strategy that will work at your company, expanding outwards from the most eager adopters first, and communicating widely as you go, you can reach a high level of catalog completeness in a short amount of time.&lt;/p&gt;

&lt;p&gt;Two topics we have not discussed yet, are catalog richness and completeness. These areas go hand in hand with completeness, and work together to ensure that your IDP has the answers that developers need, when they need them.&lt;/p&gt;

&lt;p&gt;We’ll be covering richness and completeness in another article. If you want to be among the first to read it, make sure to subscribe to the newsletter below.&lt;/p&gt;

</description>
      <category>backstage</category>
      <category>developerportal</category>
      <category>platformengineering</category>
      <category>catalog</category>
    </item>
    <item>
      <title>Backstage Weekly 22 - Progress made on Backstage search</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Tue, 06 Apr 2021 12:57:12 +0000</pubDate>
      <link>https://forem.com/roadie/backstage-weekly-22-progress-made-on-backstage-search-1dk9</link>
      <guid>https://forem.com/roadie/backstage-weekly-22-progress-made-on-backstage-search-1dk9</guid>
      <description>&lt;p&gt;Backstage Weekly is a roundup of recent features and community news for the OSS project &lt;a href="https://backstage.io" rel="noopener noreferrer"&gt;Backstage&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merged in the last 2 weeks
&lt;/h2&gt;

&lt;p&gt;106 pull requests were merged in the last 2 weeks. Here are the highlights.&lt;/p&gt;

&lt;h3&gt;
  
  
  Search foundations 🔍
&lt;/h3&gt;

&lt;p&gt;The TechDocs team from Spotify added a new search API to the backend. Until now, all searching happened in the browser and thus was limited to small datasets. This move is one of the first steps towards offloading document indexing and querying to third-party tooling such as Elasticsearch.&lt;/p&gt;

&lt;p&gt;Two new concepts are introduced in this PR (&lt;a href="https://github.com/backstage/backstage/pull/4515" rel="noopener noreferrer"&gt;#4515&lt;/a&gt;). Collators are responsible for providing the &lt;code&gt;IndexableDocument&lt;/code&gt; for a given type of document and Decorators are responsible for providing additional attributes on existing documents.&lt;/p&gt;

&lt;p&gt;There are no user facing changes yet but it's great to see this progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delete items from catalog
&lt;/h3&gt;

&lt;p&gt;Backstage now has more a natural deletion flow for catalog items. Previously you could "unregister" items which had been hardcoded into the Backstage config. This was confusing because they would magically reappear a few minutes later. The UI now handles the various different cases a little more elegantly. &lt;/p&gt;

&lt;p&gt;For example, if you add an entity via the Backstage configuration file, you will be warned that you're trying to perform an action that doesn't make sense and given an advanced option to proceed regardless. &lt;a href="https://github.com/backstage/backstage/pull/5043" rel="noopener noreferrer"&gt;#5043&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhliabglahydyc2dw4jfu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhliabglahydyc2dw4jfu.png" alt="A Backstage dialog showing a warning about deleting the catalog item and it reappearing" width="616" height="397"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Read-only mode
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://lunar.app/en/" rel="noopener noreferrer"&gt;Lunar&lt;/a&gt; architect Bjørn Sørensen added readonly mode to the Backstage catalog in &lt;a href="https://github.com/backstage/backstage/pull/5034" rel="noopener noreferrer"&gt;#5034&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;This feature is useful for organizations who don't want to use the Backstage scaffolder, perhaps because they have existing tooling in place or use a strict GitOps flow to create new components.&lt;/p&gt;

&lt;p&gt;By setting &lt;code&gt;readonly: true&lt;/code&gt; in the Backstage config, all UI interactions which would mutate the catalog are disabled.&lt;/p&gt;

&lt;h3&gt;
  
  
  OwnerPicker and GitHub Deployments plugin
&lt;/h3&gt;

&lt;p&gt;Fintech company &lt;a href="https://twitter.com/GoCardlessEng" rel="noopener noreferrer"&gt;GoCardless&lt;/a&gt; have picked up the pace of their open-source development work with 2 notable merges recently.&lt;/p&gt;

&lt;p&gt;The catalog importer now has UI for assigning ownership of a component to a given team. Previously you would have to exactly type the name of the team who owned the component. Now you can pick it from a select menu. &lt;a href="https://github.com/backstage/backstage/pull/5086" rel="noopener noreferrer"&gt;#5086&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0co8cudaxif262celq6h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0co8cudaxif262celq6h.png" alt="A select box prefilled with the names of teams tracked by Backstage. Choose a team and Backstage will declare the component owned by that team." width="716" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GoCardless also added a GitHub deployments plugin which displays a table of the most recent deployments, showing the status and environment of each deployment, along with the commit which was deployed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadie news
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Plugin upgrades
&lt;/h3&gt;

&lt;p&gt;We have upgraded and released new versions of most of our plugins lately. If you previously hit any issues because of mis-matched Backstage versions, please upgrade and try again. &lt;/p&gt;

&lt;p&gt;We have a dedicated open-source engineer starting in mid-April so the pace of development in this area should increase shortly.&lt;/p&gt;

&lt;h3&gt;
  
  
  New Roadie feature
&lt;/h3&gt;

&lt;p&gt;We've rolled out a new Dynamic UI feature to all of our customers. This feature allows users to reorganize their component overview pages by dragging and dropping plugin widgets around and add new tabs to Backstage components without editing the code.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/pe3Bshnw1mQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>tooling</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Backstage Weekly 21 - Spotify story - Why OSS Backstage succeeded</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Thu, 25 Mar 2021 08:14:32 +0000</pubDate>
      <link>https://forem.com/roadie/backstage-weekly-21-spotify-story-why-oss-backstage-succeeded-265h</link>
      <guid>https://forem.com/roadie/backstage-weekly-21-spotify-story-why-oss-backstage-succeeded-265h</guid>
      <description>&lt;p&gt;Last week marked the 1 year anniversary of Backstage being &lt;a href="https://engineering.atspotify.com/2020/03/17/what-the-heck-is-backstage-anyway/" rel="noopener noreferrer"&gt;announced to the world&lt;/a&gt; on the Spotify Engineering blog.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Last year, a small team of Spotifiers had a hunch about our homegrown developer portal: if Backstage could help our 1,600+ engineers manage the 14,000+ software components we use at Spotify, then couldn’t it do the same for other growing tech companies, too?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Backstage was released with a very limited feature set that has improved rapidly over the past few months. The service catalog and scaffolder, which didn't exist in that first release, have reached beta status, the Kubernetes plugin has developed into a useful window into production deployments, and the plugin ecosystem has begun to flourish.&lt;/p&gt;

&lt;p&gt;Even more important than the technical achievements, the community is bonding, growing and collaborating and the number of non-Spotify contributors is increasing over time.&lt;/p&gt;

&lt;p&gt;Of course, the community must keep one eye on the past and one on the future in order to thrive. &lt;a href="https://www.linkedin.com/in/tysonsinger/" rel="noopener noreferrer"&gt;Tyson Singer&lt;/a&gt;, the VP of Technology and Platform at Spotify, took 10 minutes of the latest Backstage Community Session to talk through Spotify's vision for Backstage and their history and relationship with the open source community at large. Tyson's org builds Backstage so he is in an influential and important position when it comes to its development.&lt;/p&gt;

&lt;p&gt;Tyson talked through Spotify's strategic approach to open source over the past 2 or 3 years and &lt;strong&gt;shared incredible learnings for anyone trying to drive large scale change in an engineering organization.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spotify followed a 3 step strategy to improve the impact of their open source development.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clearly define the goal and the reasons for investing in open source.&lt;/li&gt;
&lt;li&gt;Build new organizational capability and nurture it internally.&lt;/li&gt;
&lt;li&gt;Unleash this capability on the world outside to achieve the goals.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Spotify identified 3 key reasons to improve their open source offering.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;They wanted to attract and challenge the best technical talent and become known as a top 10 technical employer.&lt;/li&gt;
&lt;li&gt;They wanted to gain influence over their cloud vendors.&lt;/li&gt;
&lt;li&gt;They wanted to end the cycle of Spotifiers building great internal technology, only to see it replaced by open source offerings because they hadn't released it to the world.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once they had the goal clearly defined, they built new 3 internal capabilities to help achieve it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;They aligned the organization around a customer-centric view which took focus away from infrastructure mechanics and placed it on the customer — other developers inside Spotify.&lt;/li&gt;
&lt;li&gt;They spent more time with their customers by embedding in their teams, and encouraged their customers to do the reverse.&lt;/li&gt;
&lt;li&gt;They built product marketing skills so they could communicate the value of their work effectively.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once they had exercised this new organizational muscle internally and decided that Bacsktage would be their first Tier 1 Open Source project they released it early, iterated quickly and built in the open. The rest, as they say, is history.&lt;/p&gt;

&lt;p&gt;You can see the rest of the meetup on YouTube.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rRphwXeq33Q"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Merged last week
&lt;/h2&gt;

&lt;p&gt;58 pull requests were merged last week. Here are the highlights.&lt;/p&gt;

&lt;h3&gt;
  
  
  Todo Plugin
&lt;/h3&gt;

&lt;p&gt;Part of me feels like I could dedicate a whole newsletter issue to this neat idea.&lt;/p&gt;

&lt;p&gt;The todos plugin finds &lt;code&gt;TODO&lt;/code&gt; comments in the source code of each component in the catalog and creates a table inside Backstage where they can be seen by other developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb6s9pwocmygfokw8tg1h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb6s9pwocmygfokw8tg1h.png" alt="Backstage plugin with a table which shows a list of todos and the file that each one comes from, with a link to GitHub" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To me, this simple idea represents everything that Backstage is about. TODO comments are typically buried in the code because they're only visible to the engineer who happens to have that code in front of them. This plugin makes TODOs visible to everyone in the company who may be curious, elevating them to a altogether different level of usefulness.&lt;/p&gt;

&lt;p&gt;The plugin was contributed by Backstage core team member Patrick Oldsberg in &lt;a href="https://github.com/backstage/backstage/pull/4911" rel="noopener noreferrer"&gt;#4911&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Powered by Backstage badges
&lt;/h3&gt;

&lt;p&gt;Rolling out Backstage isn't simply a matter of deploying the technology. Backstage is at it's best when it is regularly used by a wide range of personas in an organization. During the rollout, it can be helpful to nudge towards Backstage by making it present inside their existing routines.&lt;/p&gt;

&lt;p&gt;To facilitate one aspect of this, &lt;a href="https://github.com/kaos" rel="noopener noreferrer"&gt;Andreas Stenius&lt;/a&gt; from Svenska Spel contributed badge generation for Backstage components. When you use this feature you get a copy-pastable markdown snippet which you can add to the GitHub readme of any component. &lt;a href="https://github.com/backstage/backstage/pull/4581" rel="noopener noreferrer"&gt;#4581&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbo9n40uuwbhjjnm1f1lo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbo9n40uuwbhjjnm1f1lo.png" alt="markdown code which can be copied out of Backstage and added to a GitHub repo to get a colored link" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once added, people can more easily navigate to Backstage from GitHub repos and discovery should increase across your org.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadie news
&lt;/h2&gt;

&lt;p&gt;The first ever &lt;a href="https://backstage-openmic.com/" rel="noopener noreferrer"&gt;Backstage Open Mic&lt;/a&gt; will take place on the 31st of March. This is a community organized Backstage event where people share the experiences with Backstage and help each other out. There will be two talks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Roadie engineer Iain Billett will present on how we're deploying Backstage on Kuberentes using flux and Terraform.&lt;/li&gt;
&lt;li&gt;SDA SE regular Dominik Henneke will show how to use the Backstage API docs plugin to discover APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was advertised as the 25th of March in a previous newsletter. It was rescheduled after publishing.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Backstage Weekly 20 - Upcoming meetups and Kubernetes CRD support</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Mon, 15 Mar 2021 16:02:17 +0000</pubDate>
      <link>https://forem.com/roadie/backstage-weekly-20-upcoming-meetups-and-kubernetes-crd-support-5h23</link>
      <guid>https://forem.com/roadie/backstage-weekly-20-upcoming-meetups-and-kubernetes-crd-support-5h23</guid>
      <description>&lt;p&gt;Believe it or not there are &lt;strong&gt;two&lt;/strong&gt; Backstage meetups happening over the next 2 weeks! 📅&lt;/p&gt;

&lt;p&gt;The next official &lt;a href="https://github.com/backstage/community/issues/7" rel="noopener noreferrer"&gt;Backstage Community Session&lt;/a&gt; will take place on March 17th. As usual, you can suggest topics for the session and vote on your favorite topics using the linked GitHub issue. The current top suggestion is a presentation on how Expedia Group are using Backstage internally. Expedia is a huge organization with many engineers employed so this could be very interesting indeed.&lt;/p&gt;

&lt;p&gt;Roughly a week later, on March 25th, the first ever Backstage Open Mic will take place. This is a community event where anyone can talk about technical topics or their experiences with Backstage. We at Roadie will present on how we're deploying Backstage on Kubernetes using terraform and flux. RSVP &lt;a href="https://frontside-software.typeform.com/to/ICn2IRZM" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merged last week
&lt;/h2&gt;

&lt;p&gt;61 pull requests were merged last week. Here are the highlights.&lt;/p&gt;

&lt;h3&gt;
  
  
  CRD Support for the Kubernetes plugin
&lt;/h3&gt;

&lt;p&gt;Spotify engineer Matthew Clarke, who you may have recently come across on &lt;a href="https://kubelist.com/issue/117/" rel="noopener noreferrer"&gt;the Kubelist podcast&lt;/a&gt;, contributed CRD support for the Backstage Kubernetes plugin. So far it supports ArgoCD Canary rollouts, with more rollout types in the pipeline. &lt;a href="https://github.com/backstage/backstage/pull/4892" rel="noopener noreferrer"&gt;#4892&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use ArgoCD Canary rollouts you'll get a view like this inside Backstage and you'll be able to see your rollout progress over time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28r04sykxyk1jmsk44vf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28r04sykxyk1jmsk44vf.png" alt="A list of deployment steps with checkboxes to show which steps have completed" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bitrise plugin
&lt;/h3&gt;

&lt;p&gt;SDA SE contributed a plugin for mobile app CI/CD platform &lt;a href="https://www.bitrise.io/" rel="noopener noreferrer"&gt;Bitrise&lt;/a&gt; this week. It can quickly show you when your mobile builds are failing and even allow you to download the artefact generated by the builds. &lt;a href="https://github.com/backstage/backstage/pull/4746" rel="noopener noreferrer"&gt;#4746&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2tk9ipf968rahw2zlua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2tk9ipf968rahw2zlua.png" alt="a list of builds inside Bitrise showing the date it ran, the success status and a link to download the artefact. Some portions are blurred out." width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Backstage errors package
&lt;/h3&gt;

&lt;p&gt;The Backstage team have started an effort to standardize error reporting in Backstage in order to improve consistency when things go wrong. There is now a &lt;code&gt;@backstage/errors&lt;/code&gt; package and an error panel which shows the most pertinent information to the user immediately and can also expand to show more details. &lt;a href="https://github.com/backstage/backstage/pull/4903" rel="noopener noreferrer"&gt;#4903&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've seen a number of discussions about when and how to display errors to the user in Backstage so it's good to see standardization begin in this area.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfb0m5lq4kgkxw1fp7gb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfb0m5lq4kgkxw1fp7gb.png" alt="screenshot of an error in Backstage. Orange bar with a warning about a 403 NotAllowedError inside." width="800" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all for this week. Get upgrading folks!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>tooling</category>
      <category>backstage</category>
    </item>
    <item>
      <title>Backstage Weekly 19 - Custom actions for the scaffolder</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Mon, 08 Mar 2021 11:54:53 +0000</pubDate>
      <link>https://forem.com/roadie/backstage-weekly-19-custom-actions-for-the-scaffolder-5h9b</link>
      <guid>https://forem.com/roadie/backstage-weekly-19-custom-actions-for-the-scaffolder-5h9b</guid>
      <description>&lt;p&gt;The Backstage scaffolder is an easy way for engineering organisations to bake best practices into a set of software templates and encourage their use for creating new services and components. This helps improve production consistency and reduce lead time for new services.&lt;/p&gt;

&lt;p&gt;Each template is a YAML file which Backstage uses like a recipe for scaffolding a new application and performing actions on it.&lt;/p&gt;

&lt;p&gt;Once templates have been defined and imported into Backstage, they appear in the template directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih0nyy8z6zga5xdwmb0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih0nyy8z6zga5xdwmb0o.png" alt="a list of templates inside backstage: Create React App Template, Docs template, Golang template etc." width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Engineers who wish to start a new project can choose a template from the directory, enter some customization parameters, and submit the form to Backstage for scaffolding to begin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hvig9dvndljgv2hd3jl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hvig9dvndljgv2hd3jl.png" alt="A form where the user can enter the name of the new service they are creating. This parameter will be applied to the template." width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, Backstage runs the steps defined in the template in order to do some work. As it runs, Backstage reports progress and logs to the user so they can understand what is happening. Once finished, the user is presented with some links to the newly created component.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87r39ooeeg94o19wyte5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87r39ooeeg94o19wyte5.png" alt="A list of steps that the scaffolder ran with green checks for successful steps. There are also logs displayed." width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Out of the box, Backstage supports useful scaffolding steps such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetch a cookiecutter template from a remote URL and run it with the parameters provided by the user.&lt;/li&gt;
&lt;li&gt;Add the TechDocs framework to the templated application.&lt;/li&gt;
&lt;li&gt;Publish the templated application to GitHub as a new repository.&lt;/li&gt;
&lt;li&gt;Register the templated application in the Backstage catalog.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Last week, Spotify engineer Johan Haals added the ability for Backstage to support custom scaffolder actions (&lt;a href="https://github.com/backstage/backstage/pull/4718" rel="noopener noreferrer"&gt;#4718&lt;/a&gt;). This opens up a whole world of new potential for the scaffolder.&lt;/p&gt;

&lt;p&gt;For example, you could use the custom actions feature to hook your newly scaffolded application up to your CI system, configure it for monitoring, or even deploy it to a staging environment. Perhaps a whole marketplace like the GitHub actions marketplace will spring up around this feature.&lt;/p&gt;

&lt;p&gt;Whatever way this goes, it's great to see the Backstage core team iterating on core features and constantly improving them. The scaffolder docs are &lt;a href="https://backstage.io/docs/features/software-templates/software-templates-index" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merged last 2 weeks...
&lt;/h2&gt;

&lt;p&gt;There was no newsletter last week so we're covering 2 weeks and 142 merged pull requests here.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenStack swift support for TechDocs
&lt;/h3&gt;

&lt;p&gt;Swift is a distributed blob store for the popular open-source virtualization platform OpenStack. In pull request &lt;a href="https://github.com/backstage/backstage/pull/4714" rel="noopener noreferrer"&gt;#4714&lt;/a&gt;, Trendyol engineer Erdogan Oksuz added the ability to use it as a store for published TechDocs.&lt;/p&gt;

&lt;p&gt;This is the first time I've seen OpenStack referenced in a Backstage pull request and it's a nice sign of the portability and broad platform support that the core team are baking in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extended support button config
&lt;/h3&gt;

&lt;p&gt;Andrew Thauer from Wealthsimple added a top level config to Backstage to help define ways that you can get help inside Backstage. When rolling out Backstage inside your org, it's important that users have a clearly defined way to get help while they are learning to use Backstage. This work from Andrew makes that a little easier to do. &lt;a href="https://github.com/backstage/backstage/pull/4517" rel="noopener noreferrer"&gt;#4517&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq22vvodys7z9pgrtp24j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq22vvodys7z9pgrtp24j.png" alt="support button with a dropdown with links for GitHub issues and a discord chatroom" width="676" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Other news
&lt;/h2&gt;

&lt;p&gt;Backstage team manager Lee Mills and Kubernetes plugin developer Matthew Clarke appeared on the &lt;a href="https://kubelist.com/issue/117/" rel="noopener noreferrer"&gt;latest episode of the popular Kubelist Podcast&lt;/a&gt; where they talked about the inspiration for Backstage and direction of the project.&lt;/p&gt;

&lt;p&gt;The Backstage team also participated in a wildly popular Ask Me Anything on Reddit a few days ago. Beyond the plugin, they talked about their philosophy for exposing developers to Kubernetes, how they hire people to work on Backstage and how they implement multi-tenancy in Kubernetes. &lt;a href="https://www.reddit.com/r/kubernetes/comments/lwb31v/were_the_engineers_rethinking_kubernetes_at/" rel="noopener noreferrer"&gt;Check it out here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb21spucg28pkt5jdjxax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb21spucg28pkt5jdjxax.png" alt="6 Spotify employees waving on a zoom call" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all for this week, get upgrading folks! 🚀&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>devops</category>
      <category>backstage</category>
    </item>
    <item>
      <title>Backstage Weekly 18 - How Spotify drove Backstage adoption</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Mon, 22 Feb 2021 16:40:12 +0000</pubDate>
      <link>https://forem.com/dtuite/backstage-weekly-18-how-spotify-drove-backstage-adoption-5f14</link>
      <guid>https://forem.com/dtuite/backstage-weekly-18-how-spotify-drove-backstage-adoption-5f14</guid>
      <description>&lt;p&gt;The first Backstage community session took place last Wednesday and was a resounding success. 117 people joined the core team on Zoom to hear Spotify explain the drivers behind the huge success of Backstage there.&lt;/p&gt;

&lt;p&gt;We also got an update on recent progress against the roadmap and SDA SE spoke about how they are implementing Backstage to improve information sharing between insurance companies in Germany.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Spotify drove Backstage adoption
&lt;/h3&gt;

&lt;p&gt;Spotify's Backstage journey began about 4 and a half years ago, in 2016. At the time, the company was growing rapidly and experiencing productivity issues as a result. Many new teams were formed and and a large number of new services were created. All this growth meant that discoverability was at an all time low.&lt;/p&gt;

&lt;p&gt;Some engineers got together and asked themselves "how do we help and aid discoverability while empowering teams to move quickly". From this question, Backstage was born.&lt;/p&gt;

&lt;p&gt;Once released, a number of key features drove adoption inside Spotify.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The service catalog became a central place to track ownership and simply look up contact details of teams.&lt;/li&gt;
&lt;li&gt;The plugin model unlocked rapid growth in the number of ways that Backstage could be used and the features it had.&lt;/li&gt;
&lt;li&gt;Building engineer onboarding flows into Backstage meant that new engineers got used to using it quite quickly.&lt;/li&gt;
&lt;li&gt;Growing usage triggered a flywheel effect where more plugins brought more usage which caused more plugins to be added and even more usage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Eventually enough gravity built up to ensure that Backstage became the default place to build any internal UI.&lt;/p&gt;

&lt;p&gt;Today, an internal Bacskstage core team with only 4 engineers drives productivity improvements across the entire 2,000 person engineering organization. Only 15% of the code that makes up Backstage is contributed by this team. The other 85% comes in the form of plugins created by Spotify engineers who use it every day.&lt;/p&gt;

&lt;p&gt;You can hear this story, and more recent adoption stories from SDA SE and Zalando by checking out full recording on YouTube.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/4-VX9tDdJYY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The next community session will take place on March 17th. You can suggest topics &lt;a href="https://github.com/backstage/community/issues/7" rel="noopener noreferrer"&gt;via GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merged last week
&lt;/h2&gt;

&lt;p&gt;57 pull requests were merged last week. Here are the highlights...&lt;/p&gt;

&lt;h3&gt;
  
  
  Splunk On-Call plugin
&lt;/h3&gt;

&lt;p&gt;Splunk On-call is an incident management tool for DevOps teams. It helps with on-call scheduling, incident response and analysis. If you've used PagerDuty before you'll get the idea.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv87iuv4pamz2dgkpt3bk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv87iuv4pamz2dgkpt3bk.png" alt="Backstage widget showing a list of incidents and the current on-call person" width="800" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition to creating this plugin and opening a pull request packed with screenshots and details, Rémi Doreau also &lt;a href="https://myopensourcejourney.com/docs/contributions/backstage4416/" rel="noopener noreferrer"&gt;documented the entire process on his blog&lt;/a&gt;. &lt;a href="https://github.com/backstage/backstage/pull/4416" rel="noopener noreferrer"&gt;#4416&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Search and filter for templates
&lt;/h3&gt;

&lt;p&gt;Organizations who make heavy use of the Backstage scaffolder may find that they build up a large number of software templates. Pull request &lt;a href="https://github.com/backstage/backstage/pull/4479" rel="noopener noreferrer"&gt;#4479&lt;/a&gt; from &lt;a href="https://github.com/OscarDHdz" rel="noopener noreferrer"&gt;Oscar D. Hernandez&lt;/a&gt; adds the ability to search, filter and star templates so it's easier to find the exact one you need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11u79fajlscnuz7iegfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11u79fajlscnuz7iegfm.png" alt="A list of software templates with a search bar and filtering by categorization" width="800" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Customize entity links via annotations
&lt;/h3&gt;

&lt;p&gt;James Turley from &lt;a href="https://gocardless.com" rel="noopener noreferrer"&gt;GoCardless&lt;/a&gt; added the ability to customize the entity links on the about card by setting certain annotations in your catalog-info.yaml file. This seems trivial but makes configuration much easier for Backstage users who want to populate the catalog from an existing service registry or custom backend. &lt;a href="https://github.com/backstage/backstage/pull/4575" rel="noopener noreferrer"&gt;#4575&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5v9dc4rp2ff967hpfn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5v9dc4rp2ff967hpfn6.png" alt="a Backstage widget with the title About and links to the code, and api and techdocs" width="498" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadie news
&lt;/h2&gt;

&lt;p&gt;We have published a humongous in-depth guide to &lt;a href="https://roadie.io/blog/backstage-fargate-up-and-running/" rel="noopener noreferrer"&gt;deploying Backstage on Fargate&lt;/a&gt;. It covers everything... setting up an RDS PostgreSQL database, configuring Backstage with parameter store, load balancing, deployment... you name it. Check it out if you're looking for a straightforward guide to deploying Backstage. Thanks to Roadie engineer &lt;a href="https://github.com/Xantier" rel="noopener noreferrer"&gt;Jussi Hallila&lt;/a&gt; for writing this one.&lt;/p&gt;

&lt;p&gt;We've paused work on the Backstage Datadog plugin. It seems that Datadog charts are either private on Datadog or public to the entire internet. There is no mode which allows Backstage to have secure access without making the chart completely public. We've posted our findings in the &lt;a href="https://github.com/backstage/backstage/issues/849" rel="noopener noreferrer"&gt;GitHub issue&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>backstage</category>
    </item>
    <item>
      <title>Backstage Weekly 17 - Next steps for the scaffolder</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Tue, 16 Feb 2021 18:06:42 +0000</pubDate>
      <link>https://forem.com/roadie/backstage-weekly-17-next-steps-for-the-scaffolder-3ab2</link>
      <guid>https://forem.com/roadie/backstage-weekly-17-next-steps-for-the-scaffolder-3ab2</guid>
      <description>&lt;p&gt;Engineering organisations often face a dilemma. When there is a lot of freedom to choose technologies and tools, the developer ecosystem ends up with high variability and few opportunities to optimize developer flows. On the other hand, if too much constraint is applied then innovation is stifled and creativity suffers.&lt;/p&gt;

&lt;p&gt;Spotify addressed this problem by ensuring that the path to production consistency was also the path of least resistance for engineers who were just trying to get things done.&lt;/p&gt;

&lt;p&gt;As part of this work, they developed the Scaffolder in Backstage. The scaffolder is a UI which collects metadata describing a new service and runs automation to create it with your organizations best practices baked in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz44csb379qrn37mhq8cz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz44csb379qrn37mhq8cz.png" alt="scaffolder page in Backstage with two documentation templates" width="800" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The existing alpha version of the open source Scaffolder can collect metadata and template a new GitHub repo into your account. This is great as an MVP, but it's about to get a lot more powerful.&lt;/p&gt;

&lt;p&gt;Last week, Johan Haals from Spotify merged the &lt;a href="https://github.com/backstage/backstage/pull/4360" rel="noopener noreferrer"&gt;5th pull request&lt;/a&gt; on the path towards getting the &lt;a href="https://github.com/backstage/backstage/milestone/24" rel="noopener noreferrer"&gt;scaffolder out of alpha&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can read about the planned features and developer experience in &lt;a href="https://github.com/backstage/backstage/issues/2771" rel="noopener noreferrer"&gt;the RFC&lt;/a&gt;. The plans include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A declarative, GitHub-Actions-like language for defining templates.&lt;/li&gt;
&lt;li&gt;Template composability so users can use the TechDocs or monitoring setup steps in their Python backend API template and in their React website template.&lt;/li&gt;
&lt;li&gt;Hooks for setting up CI pipelines, configuring projects or automatically setting branch protection rules.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Getting the scaffolder out of alpha is a Q1 goal for Spotify so we're looking forward to trying out these features soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merged last week
&lt;/h2&gt;

&lt;p&gt;71 pull requests were merged last week. Here are the highlights...&lt;/p&gt;

&lt;h3&gt;
  
  
  Rework the catalog import plugin
&lt;/h3&gt;

&lt;p&gt;This pull request has 16 emoji's on it so you know it's a good one! ❤️&lt;/p&gt;

&lt;p&gt;Dominik Henneke from &lt;a href="https://sda.se" rel="noopener noreferrer"&gt;SDA SE&lt;/a&gt; took some early work that Roadie did to make it easier to add GitHub repos to Backstage and supercharged it so it's easier to use and covers more cases. The importer now has better monorepo support, a confirmation step to prevent mistakes and a refreshed UI which feels more natural. &lt;a href="https://github.com/backstage/backstage/pull/4271" rel="noopener noreferrer"&gt;#4271&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a demo showing how it looks when adding a monorepo:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/7UmdZeaNni8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Add entity links card component
&lt;/h3&gt;

&lt;p&gt;This one seems simple, but can actually be quite powerful. We've all been in scenarios where something is down in production and there is a pertinent Grafana chart which could unlock the problem but nobody knows how to find it. 🚨&lt;/p&gt;

&lt;p&gt;Entity links provide a simple solution to this problem by providing you with a way to tag your services with links to other locations. The next time the service goes down the relevant charts should be linked off it in Backstage. This could save vital minutes in an outage.&lt;/p&gt;

&lt;p&gt;To use it, simply add some links to your &lt;code&gt;catalog-info.yaml&lt;/code&gt; file and they will show up in Backstage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmq41y9v7n5kik8yfrqge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmq41y9v7n5kik8yfrqge.png" alt="entity links card on Backstage with links to Datadog, Grafana and Notion" width="518" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Props to Andrew Thauer from &lt;a href="https://wealthsimple.com" rel="noopener noreferrer"&gt;Wealthsimple&lt;/a&gt; for delivering this feature in chunks over the past few weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadie news
&lt;/h2&gt;

&lt;p&gt;We are currently migrating all of our Backstage plugins to the new plugin composability API.&lt;/p&gt;

&lt;p&gt;The AWS Lambda, ArgoCD, GitHub Insights, Security Insights, Buildkite and Firebase Functions plugins are done.&lt;/p&gt;

&lt;p&gt;The Pull Requests, JIRA and TravisCI plugins are in progress and should be finished any day now.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>backstage</category>
    </item>
    <item>
      <title>Backstage Weekly 16 - Upcoming Backstage community meetup 👯</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Mon, 08 Feb 2021 09:59:14 +0000</pubDate>
      <link>https://forem.com/roadie/backstage-weekly-16-upcoming-backstage-community-meetup-4046</link>
      <guid>https://forem.com/roadie/backstage-weekly-16-upcoming-backstage-community-meetup-4046</guid>
      <description>&lt;p&gt;The first Backstage community meetup of 2021 has been announced on the new &lt;a href="https://github.com/backstage/community" rel="noopener noreferrer"&gt;Backstage community GitHub repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The meetup will take place on February 17th (just over a week from now) at 15:00 GMT on Zoom.&lt;/p&gt;

&lt;p&gt;So far over 20 people have indicated their intention to come along. You can find Calendar links, the zoom meeting URL and other information on &lt;a href="https://github.com/backstage/community/issues/2" rel="noopener noreferrer"&gt;this GitHub issue&lt;/a&gt;. You can also suggest and vote on agenda items.&lt;/p&gt;

&lt;p&gt;Roadie will be there in force and we'd ❤️ to see you there too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merged last week
&lt;/h2&gt;

&lt;p&gt;111 pull requests were merged in the past two weeks (there was no newsletter last Monday). Here are the highlights.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ecosystem explorer
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://roadie.io/blog/backstage-weekly-14-inernal-features/" rel="noopener noreferrer"&gt;In mid-January we mentioned&lt;/a&gt; that Systems, Domains and Resources had been added to Backstage as kinds of entities which could be modeled.&lt;/p&gt;

&lt;p&gt;Last week, Oliver Sand from SDA-SE expanded on this feature to make Domains accessible through the Backstage UI. When you group your services into business domains, you should be able to step through them from this page to understand which services contribute to each business function. &lt;a href="https://github.com/backstage/backstage/pull/4165" rel="noopener noreferrer"&gt;#4165&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9px08k9twl7azj2bv4df.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9px08k9twl7azj2bv4df.png" alt="Two business domains listed as cards in Backstage. The artist domain and the playlist domain" width="800" height="712"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This PR also brings back the old Explore page in the form of Tools. Backstage users can use this to understand the various plugins that are available.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6zxtsfrxee3c50fvt5t8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6zxtsfrxee3c50fvt5t8.png" alt="A list of cards, each representing a single Backstage plugin like the Sentry plugin" width="800" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Azure Storage support for TechDocs
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/vitorgrenzel" rel="noopener noreferrer"&gt;Vitor Grenzel&lt;/a&gt; from SSYS Sistemas added &lt;a href="https://github.com/backstage/backstage/pull/4017" rel="noopener noreferrer"&gt;#4017&lt;/a&gt; to allow Backstage users to back their technical documentation off to Azure Storage. All the major cloud providers are now supported, Google, AWS and Azure.&lt;/p&gt;

&lt;p&gt;Using external storage for TechDocs, rather than the local filesystem, means you can move towards a compile on write (rather than read) architecture and unlocks faster load times for documentation in Backstage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Team page is integrated
&lt;/h3&gt;

&lt;p&gt;This may have happened at some point in the past and I just didn't notice it 😳 . Regardless, this is worth mentioning.&lt;/p&gt;

&lt;p&gt;Catalog item ownership is now linked to groups of Backstage users, so you can click the owner of an entity to get some information about the team that created it.&lt;/p&gt;

&lt;p&gt;In the screenshot below, you can see that team-a owns 4 services, 3 APIs and 1 website. There are 4 people on the team and their parent organisation is the Backstage org.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkwwc1fupfvpm7luigijz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkwwc1fupfvpm7luigijz.png" alt="A page representing a team with owned services and people" width="800" height="745"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadie news
&lt;/h2&gt;

&lt;p&gt;We published a new blog post which runs though a &lt;a href="https://roadie.io/blog/backstage-service-catalog-kubernetes/" rel="noopener noreferrer"&gt;simple deployment of Backstage on Kubernetes.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I demoed an upcoming Roadie feature in this tweet. We're building the ability to dynamically add and remove plugins to Backstage (this will include bespoke custom plugins in the future). Our goal is to make it possible to get set up with Backstage in less than 5 minutes. As the tweet says, feedback and suggestions are welcome.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1356644531832250369-860" src="https://platform.twitter.com/embed/Tweet.html?id=1356644531832250369"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1356644531832250369-860');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1356644531832250369&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>backstage</category>
    </item>
    <item>
      <title>Happy 1 year anniversary to Backstage 🎂</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Tue, 26 Jan 2021 16:36:26 +0000</pubDate>
      <link>https://forem.com/roadie/happy-1-year-anniversary-to-backstage-hd0</link>
      <guid>https://forem.com/roadie/happy-1-year-anniversary-to-backstage-hd0</guid>
      <description>&lt;p&gt;Today marks the one year anniversary of the &lt;a href="https://github.com/backstage/backstage/commit/1a19a01c4beee7d869765a43d1b57b1b450017a7" rel="noopener noreferrer"&gt;very first commit&lt;/a&gt; to open source Backstage 🍾 Since then it has been... &lt;em&gt;busy&lt;/em&gt;, with as many as 99 pull requests merged each week.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0vyp6vt7pcdrld42j891.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0vyp6vt7pcdrld42j891.png" alt="Chart showing the total number of pull requests merged each week" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With more adoption, a bigger community and a strong direction, 2021 looks set to be an even bigger year. We can't wait to see what this awesome community produces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merged last week...
&lt;/h2&gt;

&lt;p&gt;82 pull requests were merged last week. Here are the highlights.&lt;/p&gt;

&lt;h3&gt;
  
  
  New plugins: Snyk, Kafka and Opsgenie
&lt;/h3&gt;

&lt;p&gt;This was a big week for new plugins with three additions to the plugin directory. Interestingly, all three plugins were contributed by non-Spotify engineering teams. More evidence that this community has critical mass.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://snyk.io" rel="noopener noreferrer"&gt;Snyk&lt;/a&gt;, the developer-first security company, released &lt;a href="https://github.com/snyk-tech-services/backstage-plugin-snyk/tree/main" rel="noopener noreferrer"&gt;their own Backstage plugin&lt;/a&gt; this week. As far as I can tell, this is the first official corporate plugin to be built for Backstage.&lt;/p&gt;

&lt;p&gt;The Snyk plugin lets you quickly see the number of vulnerabilities present in your services so you can start to understand the security story across your fleet. &lt;a href="https://github.com/backstage/backstage/pull/4213" rel="noopener noreferrer"&gt;#4213&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdi2gyuinw5kdekg4f5b0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdi2gyuinw5kdekg4f5b0.png" alt="Screenshot of the Snyk plugin showing some sample data" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/nirga" rel="noopener noreferrer"&gt;Nir Gazit&lt;/a&gt; from &lt;a href="https://www.fiverr.com/" rel="noopener noreferrer"&gt;Fiverr&lt;/a&gt; merged the first parts of a &lt;a href="https://github.com/backstage/backstage/tree/master/plugins/kafka" rel="noopener noreferrer"&gt;Kafka plugin&lt;/a&gt;. The functionality is simple for now, the plugin lists the offset status of consumer groups for services that have a Kafka annotation. It's a welcome start and it provides a good foundation for others to build on. &lt;a href="https://github.com/backstage/backstage/pull/3985" rel="noopener noreferrer"&gt;#3985&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgo3q6xu3eezfuft0o2cw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgo3q6xu3eezfuft0o2cw.png" alt="Screenshot of the Kafka plugin showing some consumer groups and a number showing how far behind they are" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last, but not least, &lt;a href="https://github.com/K-Phoen" rel="noopener noreferrer"&gt;Kévin Gomez&lt;/a&gt; from electric scooter sharing company &lt;a href="https://www.voiscooters.com/" rel="noopener noreferrer"&gt;VOI Technology&lt;/a&gt; contributed an &lt;a href="https://github.com/K-Phoen/backstage-plugin-opsgenie/" rel="noopener noreferrer"&gt;Opsgenie plugin&lt;/a&gt;. It supports tabs for alerts and incidents and an overview widget to show the latest alerts for a particular service. &lt;a href="https://github.com/backstage/backstage/pull/4227" rel="noopener noreferrer"&gt;#4227&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  New starts: GitHub Apps, Scaffolder V2 and Search roadmap
&lt;/h3&gt;

&lt;p&gt;This week also brought some exciting new beginnings in the Backstage codebase.&lt;/p&gt;

&lt;p&gt;GitHub Apps will make most GitHub &amp;lt;&amp;gt; Backstage integrations simpler and support more granular permissions. Thankfully, &lt;a href="https://github.com/jhaals" rel="noopener noreferrer"&gt;Johan Haals&lt;/a&gt; from Spotify has begun the work in &lt;a href="https://github.com/backstage/backstage/pull/4058" rel="noopener noreferrer"&gt;#4058&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of the Backstage features I'm most frequently asked about is the Scaffolder and the functionality it supports for creating new services. In &lt;a href="https://github.com/backstage/backstage/pull/3900" rel="noopener noreferrer"&gt;#3900&lt;/a&gt;, some parts of the existing Backstage Scaffolder have been deprecated to lay groundwork for Scaffolder V2. It's a small step but definitely pointed in the right direction.&lt;/p&gt;

&lt;p&gt;A new &lt;a href="https://backstage.io/docs/features/search/search-overview" rel="noopener noreferrer"&gt;roadmap for Search in Backstage&lt;/a&gt; has been added to the docs along with a proposal for production ready search architecture. Search improvements feature on the core roadmap for Backstage so we're expecting big improvements in this area &lt;a href="https://github.com/backstage/backstage/pull/4030" rel="noopener noreferrer"&gt;#4030&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadie news
&lt;/h2&gt;

&lt;p&gt;We got a shoutout on a recent episode of the &lt;a href="https://kubernetespodcast.com/episode/134-cncf-and-linux-foundation/" rel="noopener noreferrer"&gt;Kubernetes Podcast&lt;/a&gt; thanks to friend of Roadie and CTO of the CNCF, Chris Aniszcyzk.&lt;/p&gt;

&lt;p&gt;In the episode, Chris shares his technology journey and Cloud Native predictions for 2021.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1351645570100822016-839" src="https://platform.twitter.com/embed/Tweet.html?id=1351645570100822016"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1351645570100822016-839');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1351645570100822016&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Roadie is hiring a remote JavaScript engineer who will work on our Backstage plugins and on Backstage directly. If you or someone you know would like to be paid to work on open source software then please, &lt;a href="https://roadie.io/careers/javascript-engineer/" rel="noopener noreferrer"&gt;apply here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>tooling</category>
      <category>backstage</category>
    </item>
    <item>
      <title>Backstage Weekly - CNCF Sandbox ✅</title>
      <dc:creator>David Tuite</dc:creator>
      <pubDate>Mon, 28 Sep 2020 14:04:12 +0000</pubDate>
      <link>https://forem.com/roadie/backstage-weekly-cncf-sandbox-28hp</link>
      <guid>https://forem.com/roadie/backstage-weekly-cncf-sandbox-28hp</guid>
      <description>&lt;p&gt;💡 &lt;em&gt;&lt;a href="https://backstage.io" rel="noopener noreferrer"&gt;Backstage&lt;/a&gt; is a CNCF sandbox service catalog project. It helps companies to catalog their microservices and productize their path to production. Each week, we round up the latest Backstage community news.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Backstage has been accepted into the CNCF Sandbox. 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0653qwiqgjuvlo98u6d3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0653qwiqgjuvlo98u6d3.png" alt="backstage-on-cncf-website" width="800" height="320"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Sandbox is an entry point into the CNCF ecosystem. The goals of the sandbox include encouraging public visibility of projects and helping them grow to the point where they can move on to the next CNCF level. In addition to Backstage, the Sandbox holds projects such as chaos engineering Kubernetes operator Chaos Mesh and GitOps operator Flux.&lt;/p&gt;

&lt;p&gt;This can only mean good things for those of us who are investing in Backstage and should help ease the minds of many organizations who were considering adopting it, either by deploying internally or by using a hosted Backstage provider such as &lt;a href="https://roadie.io" rel="noopener noreferrer"&gt;Roadie&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Backstage team wrote about the implications of this on their official blog post, and on the Spotify engineering blog.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Backstage community is healthy and growing quickly. Over 130 people have contributed to the project, and roughly &lt;strong&gt;40% of pull requests are now coming from external, non-Spotify, contributors&lt;/strong&gt;. With companies now deciding to adopt Backstage we are also seeing a shift in the kinds of contributions we are getting from the community.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Merged last week...
&lt;/h2&gt;

&lt;p&gt;70 pull requests we merged in the last week. Here are the highlights:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://github.com/mclarke47" rel="noopener noreferrer"&gt;Matthew Clarke&lt;/a&gt;, who works on infrastructure at Spotify, had more than 7,000 lines of code merged for his Backstage Kubernetes plugin. This is going to be such an important plugin for cloud-native companies who want to use Backstage and could really ease onboarding in future. It's great to see progress being made. You can now list Kubernetes clusters and pods in Backstage. &lt;a href="https://github.com/spotify/backstage/pull/2618" rel="noopener noreferrer"&gt;#2618&lt;/a&gt;, &lt;a href="https://github.com/spotify/backstage/pull/2571" rel="noopener noreferrer"&gt;#2571&lt;/a&gt; and others.&lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/freben" rel="noopener noreferrer"&gt;Fredrik Adelöw&lt;/a&gt; (Spotify) added a concept of Users to Backstage. &lt;a href="https://github.com/spotify/backstage/pull/2587" rel="noopener noreferrer"&gt;#2587&lt;/a&gt; and &lt;a href="https://github.com/althafh" rel="noopener noreferrer"&gt;Althaf Hameez&lt;/a&gt; (Grab) added a concept of Groups &lt;a href="https://github.com/spotify/backstage/pull/1838" rel="noopener noreferrer"&gt;#1838&lt;/a&gt;. Groups will associate users with teams, departments and organizations. The association between services and the teams that own them will be core to the value of Backstage and allow many powerful ownership oriented features in future.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>devops</category>
      <category>backstage</category>
    </item>
  </channel>
</rss>
