This document contains notes about the CNCF Backstage documentation. These are working notes, taken as I reviewed the existing Backstage documentation and website. They are not intended to be a polished report of any kind.
The ultimate goal of this work is to deliver an assessment of the Backstage documentation as described in the CNCF assessment guidelines. When complete, the assessment will be included in GitHub as a separate document with the other CNCF tech doc assessments (in that same GitHub directory).
The assessed Backstage documentation includes:
The assessment does not evaluate the Spotify Backstage website, which is a page for commercial Backstage plugins offered by Spotify.
This section discusses topics that concern the documentation as a whole. These include documentation quality metrics, information architecture, and analyses of documentation users and objectives.
One way of assessig the overall documentation is evaluating documentation quality metrics, including:
Backstage is a platform for organizing and managing software projects. This complicates the documentation, because it can be difficult to distinguish among several levels of involvement with Backstage:
This complexity necessitates clear definitions of roles so that use cases can be documented, indexed, found, and used. The five levels described above suggest that documentation should be organized under at least five roles:
Some of these roles might be combined; for example, the administrator responsible for maintaining the Backstage app (2) could very well be responsible for extending and configuring it for new projects (3). Nonetheless, the roles have distinct tasks that should be documented in separate guides.
User roles should be defined in conjunction with objectives. Ideally, techncal objectives (what does the software do?) should be derived from business objectives (what is the software for?). Technical objectives differ depending on role.
This is a survey of the existing documentation. It includes the product website, including the technical documentation proper (located under the Docs menu item on the website), and the associated GitHub repos.
(Not the docs landing page, but the project landing page)
Link is to a blog post. This is a core feature; it should be documented in the main documentation website. The blog post is from January 2021.
Link button says "Contribute". This confuses learning about plugins with jumping in as a code contributor.
The banner menu. Contents:
GitHub | Docs | Plugins | Blog | Releases | Demos | Community
This menu item links to:
https://github.com/backstage/backstage
Links to the Backstage platform GitHub page. Arguably should lead to an index of all the GitHub repos under https://github.com/backstage. This is a relatively minor issue with pros and cons to every alternative.
Alternatives:
Links to "What is Backstage?" in the technical documentation overview.
Links to the "Plugin Marketplace". These link to their corresponding docs in the technical documentation. The plugin "Explore" buttons link to the plugin's home or code repo pages.
Not sure the core features need to be on this page; it's not where I'd look for them.
The plugins are listed in tile format. This takes a lot of room; there are well over a hundred plugins.
Consider a list format instead of tiles, or at least make it an option. Tiling is more appropriate for a few featured items, not an entire catalog.
Links to an active
Comments are turned off for the blog posts.
Write a short intro to the blog, explaining why comments are disallowed and who the bloggers are. Provide a link to a community where open discussion takes place.
Release notes. Links directly to the most recent release notes.
Direct link provides no context: no explanation of release strategy or cadence, no description of release note format.
Insert a Release Notes landing page that address the above issues. Also suggest a link to an explanation of semantic versioning. Also consider prepending a link to this context material to every version's release notes.
Links to a number (8) of demo videos.
The first demo's intro blurb also contains an overall intro to the demos, with links to other demos.
Separate the demo introduction and meta-info from the first demo blurb. Put it before the demos.
Lists Backstage community resources by category:
Not sure I'd consider all of these "community". The "Community Initiatives" section is problematic:
Move the "Communities Initiatives" items under Roadie.io in "Commercial Partners".
The footer content needs to be reorganized. It's divided into unconventional categories (and redundant with the TOC menu) and seems to be based on guesswork about what site visitors might want to see. Look at (almost) any commercial or OSS software footer for better choices.
"Designing for Backstage" is ambiguous. Use the word "contributor" to avoid this.
3 of 4 are Spotify links. Just label it "Spotify" and put "Github" under "Community".
"Made with :heart: at Spotify". Acknowledgement that the product was developed at Spotify is fine, but this is confusing:
Intro on landing page: What is Backstage? and Benefits (good: benefits listed for user roles).
Backstage is represented in the documentation as consisting of a few core features (software catalog, tech docs, templates) and a library of plugins (Kubernetes, CI, etc.) Core components are implemented as plugins. The architecture overview says that the UI ties the plugins together.
It might be helpful to describe this architecture even more explicitly. Is there a procedure for promoting a plugin to core component status (as the Kubernetes plugin seems to be in process right now)? If so, document this procedure, both as an explanatory description in the user doc and a how-to in the contributor doc. Add to Release and Versioning Policy.
Might be better moved to the release notes.
Should be at or near the top of the Overview.
This belongs on the website somewhere, but not in the tech docs.
Probably belongs as part of a larger Best Practices section.
In general it seems like a lot of the material in the Overview mixes together information relevant to users and contributors (Strategies for Adopting, Release and Versioning Policy, Trust Model, Support and Chat Room). Another argument for making to doc user-centric.
The Trust Model could be the basis for a contributor user analysis (which should be in the contributor documentation, separate from the user documentation). A separate analysis is also needed for users and properly belongs here in the user documentation.
Add an intro that outlines users and use cases. For an organization, the docs recommend having a group to administer Backstage, so administrator is one distinct user. Setup and config instructions should be geared to that user.
Rename to "Installing"
Begins with a claim that most users will want a standalone installation. Explain first what user types exist and which ones would want a standalone installation.
Three consecutive headings with the same name are two too many. Rename to "Configuring".
Registering an Existing Component: Using the Backstage repo as an example is needlessly confusing. Backstage should develop a dedicated example repo that does nothing but provide a dummy component to add.
Again here, user analysis would help. Elsewhere "App" is defined as an instance or installation of Backstage. This should be reiterated here.
Should be part of the admin guide.
These are component technologies. Should be listed in the admin guide as dependencies.
This should be its own guide. Put all the contributor information in one place. (Any information needed by both contributors and users can be referenced from the Contributor documentation. In general, don't duplicate information, especially reference information.)
Should be part of Contributors Guide.
Should be part of contributors Guide. See notes on GitHub repos under Menu.
This implies remote or distributed development. There needs to be an explanation of the distinction, again with an explanation that explains users and use cases for each. This seems to be contributor documentation, but it's not entirely clear. Might be admin? Get clarification.
This is from the tech docs > Core Features > Software Catalog:
… the Software Catalog enables two main use-cases:
1. Helping teams manage and maintain the software they own. Teams get a uniform view of all their software; services, libraries, websites, ML models — you name it, Backstage knows all about it. 2. Makes all the software in your company, and who owns it, discoverable. No more orphan software hiding in the dark corners of your software ecosystem.
Logging levels. This should be in the Contributor info and in the Troubleshooting section for instances.
A lot of good information here. Most of it belongs in an architecture overview and in reference materials (YAML file format, e.g.).
Lists use cases. These should be in overview.
"The Backstage catalog entity data model is based on the Kubernetes objects format, and borrows a lot of its semantics as well."
You buried the lede! This should be at the front of the model information.
"The Software Catalog in Backstage is intended to capture human mental models using entities and their relationships rather than an exhaustive inventory of all possible things."
More good conceptual information!
Who is "we", the Backstage Design Team? Is this a Spotify unit? CNCF?
Need an explanation: who are the entities described in this section? Again, this is about defining the stakeholders so that the documentation can be targeted. Or in the case of contributors, define roles to allocate responsibilities.
"External" and "internal" refer to Spotify?
Includes "How to Contribute" – again, needs to be reorganized so that the user and contributor material isn't intermixed. A product used to manage software projects is confusing enough without throwing its own development on top without warning!
The main website landing page has sections for the core features. Not sure this is the best way to organize the first page potential users will see. Setting that aside for the moment, though, below are the features.
"Learn More About the Software Catalog > More" button
https://backstage.io/docs/features/software-catalog/
Assumes you've done Getting Started with Backstage and have the server installed already. (OK, to be fair, it says "If you've followed …". But still blindsided.)
It's not technically in the scope of the doc assessment, but the demo server has a serious documentation issue: The demo page does not properly demonstrate the TechDocs feature.
Rather than include integrated project documentation for one or more code projects, the only use of the TechDocs feature on the demo server is a link to the Backstage documentation site. There are numerous issues with this:
The glossary is in a separate document here.
These are the only glossaries I could find on the site. They are inadequate and in any case the project should have an omnibus glossary as part of the documentation.
https://backstage.io/docs/overview/glossary/
Contains only the definitions of the user profiles.
https://backstage.io/docs/auth/glossary/
Auth and identity Glossary. 9 definitions, most to do with OAuth.
https://backstage.io/docs/local-dev/cli-overview/#glossary
CLI glossary. 5 definitions having to do with packaging.
https://backstage.io/docs/overview/architecture-overview/#terminology
Architecture overview terminology
3 definitions: Core, App, Plugins
https://backstage.io/docs/getting-started/concepts
Not really "concepts", but component technologies: CHANGELOG, Docker, React, YAML, etc.
The website and documentation source is in the backstage/backstage
GitHub repository. The website and documentation are rendered using the Docusaurus static site generator.
The structure of the doc in the source repo is not obvious. Here's a selective listing of the directory hierarchy:
backstage/backstage # main repo
| docs # the documentation site: /docs
| | ... # contains subdirecories for doc sections
| microsite # website directory - contains various Docusaurus files
| | docusaurus.config.js # main Docusaurus config file
| | blog # blog entries: /blog
| | build # the compiled doc site (# cd microsite; yarn build)
| | data
| | | on-demand # tiles for past community session videos
| | | plugins # the plugin tiles on the plugins page: /plugins
| | src # source for the website pages
| | | components # code for website components
| | | pages # the website - most of the pages except for the documentation: /community, /demos, etc.