Launched in 2008, Jira Misc Custom Fields (JMCF) has become a much-loved app for calculated custom fields on Jira Data Center and Server, helping customers make more informed business decisions through Jira screens, reports, and dashboards. With over 4,000 installs on Atlassian Marketplace to date, bringing JMCF to Cloud was a clear next step.
We spoke to Appfire Cloud architects Ross Barbieri and Jeff Ryan to learn more about Appfire's successful journey building a Cloud version of JMCF on Forge. You'll learn why and how the Appfire team undertook this project, plus take away a few tips for building complex apps like JMCF on Forge.
Bringing JMCF to Cloud
JMCF was launched more than a decade ago to provide calculated custom fields, which didn't exist in Jira Server. JMCF works by calculating data in Jira automatically, reducing the need to context switch. As a result, Jira users save time and avoid making costly manual errors. The app also provides Jira reports and dashboards to help with decision-making.
Even though bringing JMCF to Jira Cloud was the logical next step, building a Cloud equivalent was not easy. The JMCF team considered a number of complexities: improving efficiency for processing large numbers of issues, executing long-running calculations concurrently and in order, and analyzing calculation dependencies and executing those in the correct order. There was also asynchronous data fetching and calculation, adjusting the processing rate to match ebbs and flow in Forge/Jira's throttle limits, and a better user interface and experience.
For these reasons, JMCF Cloud would become one of the largest and most complex apps to ever be built on Forge. Many new improvements made an app like JMCF possible on Forge, such as application-defined custom field types, the asynchronous job queue, and the event retry mechanism. Additionally, several new improvements were also added to JMCF, including a new step-by-step field creation wizard, an easy-access "my customer fields" overview page, and an error logs page to collate any errors and help with troubleshooting.
Choosing Forge as the development framework
Atlassian's developer platform, Forge, provides hosting and storage, authentication with product APIs, and built-in development environments. These features can save developers time and operational overhead. Appfire's decision to build on Forge was driven by the ability to programmatically create custom fields, available only through Forge, as well as these operational benefits. As Ross explained, "With Forge, developers can focus on coding rather than setting up infrastructure and scaling test environments, which can be a huge advantage."
I think one of the main benefits is that it takes the DevOps work out of the equation. This includes tasks in different stages of development, not just production. DevOps work can be time-consuming and challenging, especially for single-person shops.Ross Barbieri, Appfire
Assembling the features to make JMCF Cloud possible
According to Jeff, implementing JMCF on Forge at first seemed like an impossible task. However, "through persistence and a collaborative approach with Atlassian, we were able to create something that does some amazing things."
To build JMCF's core functionality for the Cloud, Appfire needed the ability to customize Jira's standard fields, such as number, date, user, etc. They also needed the ability to perform custom field computations in real-time, and a user interface for app configuration, overview, and error logs.
The Atlassian and Appfire teams put in many hours of combined work to support JMCF's needs in Forge. The capabilities resulting from that collaboration, listed below, are now available for all Forge users.
1. Async Events API
Executing long-running jobs was a critical need for JMCF. Forge invocations are limited to 25 seconds, but with the ability to run jobs asynchronously in the background, Appfire was able to process heavier workloads in smaller increments. This feature is available to all Forge developers via the Async Events API.
2. Programmatically accessing and updating custom fields
Creating new custom field types and setting their values is essential to the JMCF use case; the app wouldn't be possible without it. The Appfire team was instrumental in testing and providing feedback for these APIs. Custom field extensibility is only available through Forge, which was a strong reason to choose the platform.
3. Developing flow control
Finally, Appfire's partnership was key in developing flow control, a feature that regulates the flow of events to match Jira's processing rate, making event processing more reliable and ensuring the accuracy of calculation results.
Quick Tips from the Appfire Team
Through this process, Appfire became experts in working with Forge. Here are 6 tips that helped the Appfire team use Forge more effectively.
- For multi-deployment management, create a single company email and Atlassian account as the owner of the app and then add developers as contributors. Then, each developer can create their own environment and deploy to their own developer instance.
- Run an Early Access Program (EAP) with your target audience to receive early feedback and stress-test the environment.
- Use the Forge tunnel whenever possible, as it is a helpful, interactive developer experience.
- When building Custom UIs, use the Chrome developer tools, including source level debugging, console, and networking tools.
- Debugging server code is more difficult, but it is possible to connect the Chrome development tools to your Lambda code by adding breakpoint statements into your code and then using the `Forge tunnel –debug` command. This enables you to connect the debugger to the server and troubleshoot your code once you hit the breakpoint. Note you will likely experience Lambda timeouts so this technique is rather limited.
- Monitor invoke calls from your front end Custom UI code to the backend server code using the Chrome developer tools. Specifically, on the network tab look for the GraphQL traffic, and you can see the invoke calls including the request and response data.
Collaborating and improving the platform, together
Appfire has sold its software products on the Atlassian Marketplace since 2012, and today has 200,000+ installations across tens of thousands of customers worldwide. As Appfire breaks new ground on Forge, a close partnership is more important than ever.
It’s been a very positive experience. Our team collaborated over a shared Slack channel, including individuals from various parts of the company working on different aspects of Forge.Jeff Ryan, Appfire
Working with Appfire has generated many improvements to Forge, which have now become available to the entire developer community. Feedback and collaboration are essential for making Forge a success and ensuring the success of developers who rely on the platform.
Thank you to the Appfire team for sharing their story. If you're ready to get started building your next new app, learn more about Forge in the Atlassian developer portal.