Hello! I’m Dave, a software engineer from the Ecosystem Platform team.
In 5 years I’ve been at Atlassian I’ve previously worked in the Portfolio for Jira Server, Advanced Roadmaps and Design System teams and this article brings together my experiences from working in all those different spaces.
I’m going to describe how I’ve recently built an application on Forge to solve a particular use case in our organisation and have released it to the Atlassian Marketplace so that others can benefit from it.
The application is fairly simple but addresses a specific feature gap in Jira to help with the program management of cross team projects in Ecosystem Platform.
There are over 20 teams that work in Ecosystem Platform. Each team owns different parts of the platform but often have to come together to deliver a cross-cutting feature. Often relating to a broader company wide initiative.
We use Advanced Roadmaps to capture the work relating to each cross-team project in a single plan. We’ve added additional issue hierarchy levels of “Program”, “Workstream” and “Initiative” above the standard “Epic” level and all the work for a cross-team project will typically have a single Program level issue as root ancestor. This allows us to build a plan based of a JQL filter using the portfolioChildIssuesOf query.
Program Managers can use these plans to get a simple visualisation of progress, how much work remains, when the work is expected to complete and can identify blockers between teams.
However we find that individual engineers working at the story level issue often forget to update the epic level issues they belong to (and sometimes aren’t even aware of the initiative level and above issues they relate to).
The result is that plans often show inaccurate status at the high level.
Imagine this fictitious, but realistic example (Please Note - the following examples and screenshots are of fake projects and plans created to illustrate the problem. I used GDPR as an example of a previous project that would be understandable as a cross-cutting concern).
Atlassian needs to support GDPR across it’s portfolio of products. This is what the plan looks like:
At first glance it appears that the project has not yet started. There are no dates on the roadmap and all the issues are still in the "TO DO" status.
However, the progress bars for "PP-1" and "JIRA-1" are suggesting that some work within the hierarchy has already been completed.
Expanding the initiatives and epics indeed reveals that some story level issues are
"IN PROGRESS" and another has already been "DONE". The engineers have not remembered to update the parent issues and dates are not appearing (this might be because the start and end dates cannot be inferred - perhaps because the team is using Kanban rather than Scrum!)
The outcome of this behaviour was that there was a lack of trust in the roadmaps and although it was easy to spot these discrepancies and manually fix them it was a time consuming process.
I decided to try to automate the changes and after initially experimenting with Jira Automation I decided it was a good opportunity to build a Forge application to solve the problem.
My idea was to create an application that would detect when an issue was changed and then see how it’s own status compared with that of it’s siblings and parent.
So when the first story in an epic is started the epic should be started (and if that epic is the first epic in an initiative to be started, the initiative should be started, etc). When the last story in an epic is completed the epic should be marked as complete.
I also wanted to start setting start and end dates when the transitions occurred in order to help build an accurate roadmap of past events to help plan the remainder of the delivery.
Before jumping into how I built the application, let’s look at what the output looks like with it running.
At a glance you can now see that Jira has started work and when the work was started (if not yet when the work is planned to complete). The information is readily available without needing to expand all of the issues that descend from the initiative level issues.
Comments are also added to an issue when it is changed to help reporters, assignees and watchers understand what is happening.
The application is built using Forge and uses two modules:
The trigger module is invoked whenever a product event is fired and in this case the event the application is listening for is a transition change in any issue.
Jira workflows can be complicated though and it is not always possible to automatically determine which status to transition an issue to. Therefore I wanted to create a page for Jira admins to be able to to configure which projects should automatically update and which transitions and date fields to use.
The "jira:adminPage" module adds a link to the side-navigation of a the “Manage Apps” page that loads a Forge UI extension that can either be defined using UI Kit or Custom UI (I used Custom UI in this case but in the future it should be possible to create the interface using UI Kit 2)
The configuration page looks like this:
The interface for the application configuration is entirely built from Design System components and heavily leans on the new “primitives” (which at the time of writing are in Open Beta - but when you read this might be generally available!).
Using these primitives enabled me to quickly build a complex layout without needing to write any custom styles. Everything was created using a combination of the Box, Inline, Stack and Grid primitives and uses space token values to ensure consistency the Jira
Building the interface with Design System components meant that the application immediately supported dark mode with close to zero effort:
Fetching the project, issue type and status data from Jira was easily achievable using the REST APIs called using the "requestJira" function available in Forge Custom UI.
The user preferences for project enablement, status transitions and date fields were saved and retrieved using the Forge Storage API.
Building the application was a very quick process and I had it up-and-running on in less than a week and it’s already having a positive impact on our cross-team Advanced Roadmaps plans.
Hopefully this article will encourage you to reach for Forge when you need to address a particular gap in an Atlassian product that you need to fill in order to unleash the potential in your team!
Forge application development is a great gateway into the Atlassian developer platform and our powerful REST APIs and Design System will help you quickly meet your specific needs!
Please comment below if you have any additional questions or would like more detailed information on any specific aspect of building the app!
If you want to try the Issue Status Helper its available for free on the Atlassian Marketplace.
Dave
Senior Software Engineer
Atlassian
Sydney, Australia
90 accepted answers
14 comments