Here’s a comprehensive solution addressing your timeout issues:
1. WSAPI Timeout Configuration
The 30-second timeout you’re seeing is likely a network/proxy timeout, not Rally’s default 60s. Check your infrastructure between client and Rally servers. Rally’s timeout isn’t user-configurable, but you can work within it.
2. Query Optimization Strategy
Replace your current query with ObjectID-based filtering:
const query = {
fetch: ['FormattedID','Name','ScheduleState','PlanEstimate'],
query: '(Project = /project/12345) AND (Iteration = null)',
pagesize: 200,
start: 1
};
Using ObjectID references instead of Name filters reduces query parsing time by 60-70%.
3. Environment-Config Limits
For 2,500 items across 8 teams, split into per-project queries. Run them in parallel with Promise.all() to maintain speed while keeping individual query complexity low. Each query should return <500 items.
4. Cache Clearing and Optimization
Implement query result caching on your client side. For planning sessions, cache backlog data for 5-10 minutes and refresh incrementally rather than full reloads. Use the WSAPI’s built-in ETag support for conditional requests.
5. Advanced Approach
For recurring planning queries, consider the Lookback API with _ValidFrom/_ValidTo filters to get “current” state snapshots. While it seems counterintuitive, Lookback’s optimized indexes often outperform WSAPI for large result sets:
const lookbackQuery = {
find: {
_ProjectHierarchy: 12345,
_TypeHierarchy: 'HierarchicalRequirement',
Iteration: null,
__At: 'current'
},
fields: ['FormattedID','Name','ScheduleState','PlanEstimate']
};
This combination should bring your query times under 10 seconds even with large backlogs. The key is reducing query complexity through proper scoping and leveraging indexed fields.