Inspiration
There are a number of scenarios where users need to aggregate value from child issues so that they can make better decisions by looking at an Epic or a Story. For example, if customers have a Cost field, Story Point Estimates, Hours Spent, Number of days...
What it does
Allows users to define fields that can aggregate values from a field in child issues. It updates the values of the parent each time the configured field in the child issue changes.
How we built it
- Initially I implemented it as a custom field that would render the value each time the issue is viewed. But soon realized that rendering would take a long time if the project was very large. So I then pivoted to event-driven architecture leveraging issue updates to propagate changes to parents.
Challenges we ran into
- The issue deleted event in Forge does not have a parent field like in Connect. There is no other way to get the parent of a deleted issue. I worked around it by storing parent-child relationships in Forge storage as key-value pairs.
- Making the solution scale for very large projects is challenging in Forge. Even if we chain async events to process data, it is difficult to accumulate aggregate values and share between different events if the project is particularly large. say 100k issues or more. The payloads are limited in size 240kb.
- Each issue can end up having a different value, there is no bulk edit REST API that allows us to modify a number of issues with different values. Updating them individually takes up a long time and we start running into rate limits and time constraints.
Accomplishments that we're proud of
- A working solution that aggregates values from child issues into its parent
- It also works for when you change parents
- Sync values (when you use the app with an existing project). Able to calculate values behind the scenes.
What we learned
- Updating a large number of issues in the Cloud is very different from DC and takes a very long time
- Different ways to use forge storage, rate limits, and chaining async events.
What's Next for Roll Up
- Support more operations
- Support different field types. It only supports number fields at the minute
- Optimize the solution to work for large projects and compute values in less time than it does now
Built With
- async
- events
- forge
- javascript


Log in or sign up for Devpost to join the conversation.