This blog post was contributed by a group of students at the University of Wollongong, based on a project they did for their computer science class under the supervision of Associate Professor Hoa Dam.
As Natural Language Processing matures, the value of a trusted AI interpreter to enhance a team's performance through business applications becomes more apparent. In this article, our team presents a Jira Cloud app that provides teams with an AI-powered "assistant" to assess Jira issues as they are submitted. Our team built this app as the capstone project for the Bachelor of Computer Science at the University of Wollongong, located in Australia on the south coast of New South Wales.
The app, Artificial Intelligence for Issue Analytics (AIIA), provides features that use machine learning (ML) and visualisation techniques that allow team members and managers to more effectively manage projects. The aim of the app is to help teams properly scope projects by providing accurate issue data and identifying conflicts and blocking tasks.
The initial concept for the project came from the research of Associate Professor Hoa Dam. One of his focus areas, artificial intelligence for project management and software engineering, gave us insights and a goal to work toward for our project. We based our research and development primarily on the projects found in this technical paper.
Additionally, Hoa encouraged the team to operate as if we were a company to give us some insight into what it will be like to work in a professional setting. Hoa acted as our manager, and we met with him weekly to receive feedback on what requirements we should prioritise. All of these factors combined provided a strong learning environment for project management, technical skills, and ideation.
This project is a proof of concept on how to implement a machine learning model within the Jira Cloud environment. Since we had no experience in machine learning prior to this project, nor in developing apps for Jira Cloud, we recognised the strong learning outcomes that could be achieved. Initially, we implemented some traditional machine learning techniques before moving to more modern deep learning techniques.
As we developed an understanding for deep learning we became familiar with the concept of transfer learning, however due time constraints we opted not to implement such a system, rather focusing on proving the end-to-end app implementation on Jira Cloud.
The model is based on a Long Short Term Memory (LSTM) structure. This network provides a model that can retain information and learn from time-series data. A common application of a LSTM is text analysis, which is needed to acquire context from the surrounding words to understand patterns in the dataset. Understanding LSTM Networks provides a more in depth look at how an LSTM network operates.
Data used to train the model was obtained from other open source projects available on Jira Cloud such as Clover (by Atlassian). This data was downloaded through the Jira Cloud REST API using the jira-python library. The data was cleaned and structured in a jupyter notebook with Pandas.
The experience of developing a model based on data obtained from a real-world source allowed us to develop stronger analytical skills and a practical understanding of how to approach machine learning topics. This is in contrast to building a model based on datasets from clinical learning environments that contain comprehensive, on topic data with minimal to no missing elements.
Implementation in Jira Cloud
One feature of our app is issue recommendations. Once a new issue has been created with a title and description, the recommendation feature appears in the glance sidebar. When "Generate Recommendations" is clicked, the app suggests values for different fields in the issue such as story points, labels, priority, issue type, and component.
The machine learning model works as a recommendation engine for these values, and it bases its suggestions on data from other issues in the project. The user can then accept or reject the suggestions. Additionally, accepted suggestions can be reverted in the glance menu. In future versions this validation mechanism can be harnessed to train the machine learning model.
The core components of our application were the Atlassian Connect Express (ACE) framework and a Flask webapp to provide the API to our model deployed using Keras. ACE provided the perfect development environment, allowing us to simply and easily add new pages and modules to our app.
When the recommendations glance menu is activated, an AJAX request is made through ACE to the Flask API with the task's title and description.
Flask passes the data from the request to the model for inference. The model resides on a remote server that is independent of the Jira Cloud app, allowing the model to be updated on restart of the server side program.
The task is updated with the selected suggestions using the Jira Software Cloud REST API. This API is crucial in updating tasks, retrieving task information to send to the machine learning model, and obtaining project information to ensure that suggested values are valid within a task's context.
Our team also implemented the ability for users to revert suggestions through the use of a history panel if they later decide to return to a task's original state. This was possible because the ACE framework allowed us to define routes used for storing and retrieving task information in a MongoDB database.
Initially our app's user interface lacked cohesive elements that matched the Jira Cloud interface. After we discovered the Atlassian Design Guidelines (ADG) and the Atlassian User Interface (AUI) library, we were able to refactor the user interface to create a seamless experience in the Jira Cloud environment. For example, the recommendations menu was initially displayed as a web dialog with a plain checkbox beside each suggestion, however we were later able to incorporate these components into the glance menu with improved styling and AUI toggle buttons to replace the checkboxes.
The other feature of our app is the visualiser. The visualiser aims to provide the team with a big picture understanding of how the project is progressing and identify potential blockers. In a separate panel, the app produces a network graph of all the issues in a project and their relations to other issues. These links show the types of dependencies issues have on each other such as blocking, derived, and others. Additionally, in the issue view we show a small version of the visualiser of related issues for immediate visual feedback.
The above mentioned Atlassian Design Guidelines and AUI library were also key to building the visualiser. They provide consistent styling and components, reinforcing a sense of familiarity within Jira while maintaining a high standard of usability.
We knew that the data users place on the Jira platform could contain sensitive topics and IP, so we developed our app with its security in mind. To mitigate the inherent risks of dealing with external user data, our app minimises interactions with user data in two ways:
- It discards data it no longer needs. For the issue recommendations feature to work the title and description are sent to our external server for inference. Prior issue data is also incorporated into the model to make the suggestions relevant for the team. This data is passed to the machine learning model and then immediately discarded.
- It stores non-sensitive data whenever possible. For the visualiser to work our app parses the entire backlog to look for issue links. Once these links are identified, a database of non-sensitive data is kept to aid in the visualiser’s responsiveness. Stored in the database is the issue ID, along with the links, the type of link, and the issue it links to. It does not store the title of the issue or other descriptive information.
For the foreseeable future, our platform can operate while only storing the issue IDs and request the data from Jira on an as needed basis. If a more performant implementation is required we will need to revisit this topic.
This project was developed as a proof of concept for developing machine learning applications based on Jira Cloud. During the development we identified some features of the app that could be improved, but we kept our focus on developing an end-to-end product to reach a proof of concept required for the project.
With our improved understanding of ML techniques, we now see many areas where the model could benefit from the application of modern networks such as Nvidia’s Megatron, GPT-2, and others via transfer learning. These are modern and computationally heavy models, but they and even their predecessors would provide many improvements to the performance of our model.
This project shows the possibilities of implementing machine learning models on cloud based systems. As mentioned, there's plenty of room for improvement with our model, but overall we're quite pleased that Atlassian's comprehensive libraries and frameworks allowed us to develop a novel, artificial intelligence-powered solution in Jira Cloud in 6 months from ideation to a viable product.
The frameworks available such as ACE and AUI provided extensive resources to produce high quality, consistent applications within the Atlassian environment. Without the user interface elements from AUI, the Atlassian Design Guidelines providing approachable design documentation, and the ACE framework, we would not have been able to produce an app with the detail and features that we did. Not to mention they were extremely easy to use!
Personally, the team benefited extensively from this development experience. The variety of topics, technologies, and methods brought together for this project provided a somewhat realistic experience in developing a product idea from start to MVP, which will be invaluable experience in our careers.