Performance Considerations When Using Generators
When a dynamic structure struggles to load its content, there are several things that may be affecting the loading time:
- non-Structure related issues such as problems with the network/Jira/etc.
- contradictions in the setup itself (for example, cross-linking of issues which leads to a cycling relationship)
- the complexity of structures
Overly complex structures typically come in one of the following varieties, all of which can be managed by following some best practices - which we'll talk about below.
- Structures with extensive hierarchies, consisting of thousands of issues added by an Insert generator, Extend generator or a combination of multiple generators. In particular, structures with deep hierarchies and long branches of linked issues can take significantly longer to load.
- Structures with Extend generators configured for unlimited levels. With no limits, each extender will run checks on all issues, even those that do not have specific linked issues.
- Large structures with extensive changes happening on a daily basis. To keep the content up-to-date, Structure updates the hierarchy when anything in it is being changed. So the more changes being made, the more frequently this process will take place.
The following sections cover best practices for building complex structures while minimizing their impact on system performance.
Decreasing the size of the structure
If fewer issues are being loaded by Insert and Extend generators, the structure will be generated faster. Consider taking these steps:
- Adjust the queries for the Insert generators responsible for loading the initial scope of issues, so no unnecessary issues are added to the structure. For example, you could exclude issues that are no longer needed or considered unnecessary for this particular structure - e.g., closed issues.
- If a Filter generator is applied, see if you can accomplish the same thing by updating the original Insert query to exclude those items. Even though you don't see filtered items, they have to be added to the structure and then removed - double the work!
- Limit the scope of Extend generators (see below).
Splitting large structures into smaller ones
Some structures are simply too large or too complex to be loaded as fast as desired. This may be fine for infrequently used structures, but for structures that are used every day by multiple users, we recommend either decreasing the size of the structure (see above) or splitting the large structure into two or more smaller structures. For example, instead of having a global structure used by all teams, create several smaller structures specific to each team for day-to-day use, and reserve the larger global structure for cross-team planning sessions.
Limiting the scope of Extend generators
When added to a structure, an Extend generator checks every configured level in the structure to determine whether issues at that level need to be extended. For example, a Linked Items Extender will check every issue in every configured level to see whether or not a specific link type is present and add linked issues whenever necessary. Checking an individual issue for links doesn't take long but checking thousands of issues may.
When configuring extenders, we recommend limiting the scope to just those levels that need to be extended. This will prevent Structure from checking unnecessary issues and can provide a significant performance improvement for large structures. See Generator Scope for more information.
Resuming Paused Automation
When a structure takes a long time to load, eventually the generation times out and the Paused Automation banner appears. When a users clicks the 'Resume' button, the generation starts again until it loads successfully or reaches the time-out limit again.
As a general rule, if an automation times out, you should review the above steps to see if there is any way to reduce the size of the structure. However, it may be possible to get a paused Automation to run without making any changes:
- Even though an Automation times out, some data should still be loaded and cached.
- If you resume the Automation, Structure will start with the cached data and then load additional data until it times out again. Eventually, you may have enough data stored in cache that the entire structure loads successfully.
- Once the entire structure is saved to cache, it will load directly from cache in the future, as long as you open the structure at least once a day.