Hey Team,
One question that keeps coming up during Data Center to Cloud migrations is:
Do we actually still need all of these apps?
The installed apps list only gets you so far.
An app can have been installed for years and barely leave any footprint in the instance. Another one might look fairly insignificant at first, but then you find custom fields populated across thousands of issues, references in workflows and screens, or macros spread across a large part of Confluence.
That distinction matters quite a bit when you get to the cleanup and app assessment part of a migration.
I ended up building some ScriptRunner-based tooling around this and eventually turned it into an open-source repo:
Atlassian Data Center App Footprint
It currently covers Jira Data Center and Confluence Data Center.
For Jira it looks at things like app-provided custom fields, whether those fields actually contain data, contexts, screens, workflows and the projects/issues reached through that configuration.
For Confluence it looks at app-provided macros and modules, actual macro occurrences in content, affected spaces and also keeps native User Macros separate from Marketplace apps.
Archived data is handled separately as well. This turned out to be important in practice. An app can look quite heavily used until you realise that most of its footprint is sitting in archived projects or spaces.
The report is available as HTML, JSON and CSV, but one feature we've found particularly useful during an actual migration is the Confluence page export.
Instead of treating the assessment as a one-off report, we can use the generated page as a working document.
There is a Decision column where the migration team can add things like KEEP, REMOVE, REPLACE or just write whatever notes are needed.
When the assessment is run again later, the technical data gets refreshed, but the existing Decision cells are carried over unchanged.
So in practice you can:
run the assessment → make decisions → clean things up → run it again → see what changed
without losing the decisions already made by the team.
If an app disappears between runs, its previous decision isn't silently thrown away either. It is kept separately so you still have the record.
I was also quite careful about incomplete measurements.
Some scans can get expensive on larger instances, so there are configurable time budgets. If something could not be measured, the result says NOT MEASURED rather than quietly turning that into a nice-looking 0.
The same idea applies to the Confluence export. If the existing page cannot be read reliably, the script doesn't overwrite it with an empty Decision column. It stops instead.
This isn't meant as a replacement for JCMA, CCMA or Atlassian's App Usage functionality. There is definitely some overlap.
I see it as another piece of evidence during migration assessment and cleanup.
And importantly, a low footprint does not automatically mean an app can be removed. The scripts measure detectable configuration and content footprint, not whether somebody is actively using an app UI, calling its REST API or relying on some scheduled functionality.
We're already using this on a real customer Data Center environment as part of an actual migration/cleanup assessment, so a fair bit of what is in there came directly out of things we needed in practice rather than from a lab scenario.
The project is Apache 2.0 licensed.
I'd be interested in how others working on larger DC → Cloud migrations approach this.
What evidence do you normally want to see before deciding whether an app should be migrated, replaced, rebuilt using native Cloud functionality, or removed?
Hope this is useful to others working on similar migrations.
PRs, issues, and contributions are very welcome :)
cheers
cF
C_Faysal _CFcon_
6 comments