CrewRadar: The Intelligent Presence Assignment for Jira Service Management

🏎️Inspiration🏎️

Managing a support team is like running a pit crew in a race: every second counts. A slow assignment is like a slow pit stop it causes bottlenecks, creates friction, and leaves critical tasks orphaned.

The modern IT Service Desk is a high-speed, high-stakes environment. Just as a pit chief wouldn't assign a critical tire change to a mechanic who is currently on a lunch break, an IT Lead shouldn't assign a critical server outage ticket to an agent who is marked "Online" in Jira but is actually stuck in a heated strategy meeting on Microsoft Teams or Away.

The initial visual spark for the design came from Dota 2's Invoker, a hero who manages chaos by balancing three elemental orbs based on the situation: Quas (Ice/Survival), Wex (Storm/Motion), and Exort (Fire/Damage).

Invoker&CrewRadar&Teams

I realized modern Service Desk Leads are the "Invokers" of the enterprise world bombarded with chaos (tickets), they need to manage their agents based on their real-time state, not just a static roster.

Just like Invoker juggles his orbs, CrewRadar juggles your agent's real-world status:

  • 🟢 Quas (Available): Ready to take on new tickets.
  • 🔴 Exort (Busy): Busy.
  • 🟡 Wex (Away): Away from keyboard.

CrewRadar acts as the living connection, syncing the human reality of Microsoft 365 TEAMS with the automated workflow engine of Atlassian Jira.


⚡ What it does

CrewRadar is a next-generation Presence & Assignment Engine for Jira Service Management (JSM). It is designed specifically to remove friction from daily operations and give business teams the clarity and speed they need to stay aligned.

1. Flexible Presence Sync (Hybrid Model)

I designed the Microsoft Teams integration to be completely optional and user-controlled, ensuring no forced adoption.

  • Manual Control: Users can simply use the CrewRadar dashboard to manually set their status (e.g., "Away") without linking any external account.
  • Auto-Sync: If the Admin enables the integration, users see a toggle switch. When active, CrewRadar mirrors their Teams status instantly. This ensures that privacy is respected and the team moves fast without context switching.

User Dashboard with Sync Toggle

2. Admin-Controlled Logic & Strategy

Currently, Assignment Rules and Teams Configuration are strictly Admin-level permissions. This ensures governance and stability during the initial rollout. Admins can define specific rules per Project and Request Type.

I implemented configurable Strategies to fit different organizational needs. Currently, I offer two distinct strategies:

  • Round Robin (Available Only): Strict assignment; never assigns to anyone away or busy.
  • Round Robin (Available + Away): More lenient; suitable for lower-priority queues where an "Away" agent might still check notifications.

Assignment Rules Strategy Selection

3. Logic-Gated Auto-Assignment

Instead of a blind Round-Robin, CrewRadar uses a logic-gated algorithm. It ensures the right call is made when it matters most by assigning tickets only to agents who meet three strict criteria:

  • Real Availability: They are marked "Available" in the system.
  • Active Heartbeat: They have been active in Jira within the last 10 minutes (Proof of Life).
  • Manageable Workload: They have not exceeded their defined maximum issue limit.

Note on Status Mapping: To ensure high-priority Service Desk SLAs are met, I implemented a specific mapping logic for this Hackathon. For example, "Do Not Disturb" in Teams is mapped to "Available" in Jira to ensure urgent tickets are not missed by senior agents who might just be shielding themselves from chats.

Teams Away Mapped Status Mapping Logic

4. Visual Command Center

I replaced traditional, static data tables with a Glassmorphism-styled Dashboard. This gives Admins immediate situational awareness of the entire crew's status at a glance, visualized as glowing indicators.

Live Agents Command Center

5. Priority Exception Handling

Not all tickets are equal. If a ticket description contains a specific trigger keyword (e.g., "VIP", "System Down"), the system bypasses the standard queue and routes it immediately to a specialized "Exception Squad," ensuring alignment on high-priority business goals.

Assignment Rules Configuration


🛠️ How I built it

I built CrewRadar using the Atlassian Forge platform, leveraging a React frontend for a modern UX and a Node.js backend (runtime: nodejs24.x) for secure, scalable logic.

🧠 The Architecture & Backend Logic

The core of the system is a sophisticated backend (index.js) that acts as the brain of the operation.

Backend Logic Diagram

1. The Heartbeat Engine

I implemented a sendHeartbeat resolver that runs every 30 seconds from the client side. This does two critical things:

  • Updates "Last Seen": It writes a timestamp to Forge Storage (USER_{accountId}). This allows the system to filter out "Ghost Agents" who are online in Teams but haven't touched Jira in 10 minutes.
  • Fetches Teams Data: It calls getTeamsPresenceForUserId via the Microsoft Graph API using a cached token logic to prevent rate limiting.

2. The Auto-Assignment Algorithm

The runAutoAssign function is the mathematical core of the app. It is not random; it calculates eligibility based on the intersection of three specific vectors:

$$C_{final} = P_{status} \cap T_{heartbeat} \cap W_{workload}$$

  • $P_{status}$: The user must match the Admin's selected Strategy (e.g., must be 'Available').
  • $T_{heartbeat}$: The user must have a heartbeat timestamp $< 10$ minutes.
  • $W_{workload}$: The user's current ticket count (calculated via approximate-count JQL) must be less than the maxIssues limit defined in the rule.

Admin users have full control to toggle these vectors on or off during rule creation:

3. Enterprise Identity Resolution

Since Jira accountIds rarely match Microsoft userIds, I coded a Hybrid Mapping Strategy:

  1. Primary: I query Azure AD with the Jira email address.
  2. Fallback (Heuristic): If the email fails (common in test environments), I execute a fuzzy search using the user's displayName.
  3. Smart Selection: If multiple users are found (e.g., two "John Does"), my code checks the presence of both and links to the one who is currently Online, assuming they are the active agent.

🏢 Enterprise Setup Guide (Azure AD / Entra ID)

To enable the Microsoft Teams integration for testing, an administrator needs to perform a secure setup in Azure. Here is the streamlined process:

Step 1: App Registration Register a new Application in Azure Entra ID.

Azure App Registration Azure (Entra Registration) Step 2: Input Credentials Input the Tenant ID and Client ID into the CrewRadar Admin Panel (found under Apps > CrewRadar Settings).

CrewRadar Teams Configuration Admin Configuration Panel Secret

Step 3: Grant Graph API Permissions In Azure API Permissions, add the following Application Permissions (allowing background service access without user interruption):

  • User.Read.All (Required to resolve Jira users to Azure IDs).
  • Presence.Read.All (Required to fetch real-time Teams status).

Azure API Permissions

Step 4: Admin Consent (Crucial) You must click the "Grant admin consent" button in Azure. Without this, the secure API calls will fail.

Final


🚧 Challenges I ran into

  • The "Identity Gap": Mapping users between Atlassian and Microsoft when emails didn't match was the biggest hurdle. I solved this by building a robust caching mechanism that learns and remembers associations, reducing API latency on subsequent checks.
  • Handling "Ghost" Agents: Agents who left their computers on but weren't working broke standard availability logic. I fixed this by implementing the Heartbeat check if an agent hasn't triggered an event in Jira for 10 minutes, CrewRadar marks them as "Offline" regardless of their Teams status.
  • Graph API Security: Implementing the OAuth2 Client Credentials flow strictly within the secure sandbox of the Forge runtime environment required significant iteration to ensure compliance.
  • State Management: Syncing the toggle state between the frontend (React) and the backend (Forge Storage) required careful handling to ensure the UI didn't flicker or show stale data.

🏆 Accomplishments that I'm proud of

  • Enterprise-Grade Configuration: I successfully built a robust Admin Panel that allows for granular control over rules, strategies, and API credentials, rather than hardcoding values.
  • Configurable Strategies: I moved beyond simple assignment by implementing selectable strategies (e.g., Round Robin Available vs. Available+Away), giving organizations control over how aggressive their assignment logic should be.
  • Resilient Fallback System: I engineered the system to be fail-safe. If the Microsoft Teams API goes down or isn't configured, the system gracefully degrades to a manual status setting without breaking the core assignment logic.
  • Real-Time Situational Awareness: I created a dashboard that provides immediate clarity. Admins can instantly see who is available

Configured Rules List

🧠 What I learned

  • Context is King in Automation: Automation is useless without context. Knowing who is currently online and active is far more valuable than knowing who is on the payroll.
  • Forge Storage Optimization: I learned how to optimize JSON storage structures to cache thousands of heartbeat events efficiently without hitting Atlassian's platform quotas.
  • UX Matters in Enterprise: By theming the app like a futuristic HUD (Heads-Up Display), I made the mundane task of "checking status" engaging for users.
  • The Importance of Admin Governance: I learned that features like global assignment rules must be restricted to Admins to prevent chaos in large organizations.

🚀 What's next for CrewRadar

Following this evaluation, I have a clear roadmap to evolve this MVP into a production-ready enterprise product:

  1. Delegated Administration: Currently, rule creation is restricted to Global Admins. I plan to build a permission screen that allows Admins to delegate rule management to specific Project Leads, preventing bottlenecks.
  2. Expansion to Software Projects: While JSM is the primary target (due to SLA pressure), I plan to adapt the logic for Jira Software projects. This would help Scrum Masters assign urgent bugs during active Sprints based on developer presence.
  3. Configurable Agent Groups: Currently, the app targets the default jira-servicemanagement-users- group for rapid deployment. The next version will include a UI allowing admins to select any custom Jira group.
  4. Advanced Assignment Strategies: I plan to add more strategies based on organizational needs, such as "Least Loaded" (assigning to the agent with the fewest open tickets) and "Skill-Based" routing.
  5. AI Workload Prediction: Integrating OpenAI to analyze ticket arrival density and predict when an agent is about to become overloaded before they change their status.
  6. Slack Integration: Expanding the "Radar" to support organizations using Slack alongside Teams.

Built With

  • azure
  • azureactivedirectory
  • entra
  • forge
  • forge:storage
  • forgestorage
  • graph.api
  • javascript
  • jira
  • jiracloud
  • jiraservicemanagement
  • jsm
  • microsoft
  • microsoftgraph
  • microsoftgraphapi
  • ms365
  • node.js
  • react
  • rest
  • restapi
  • serverless
  • servicemanagement
  • support
  • teams
Share this project:

Updates

posted an update

Technical Deep Dive: Backend Architecture & Integration Logic

This document outlines the architectural decisions behind the Microsoft Teams integration and the Automated Agent Discovery mechanism within CrewRadar.

1. Microsoft Teams & Entra ID (Azure AD) Integration

The core value of CrewRadar is its ability to bridge the gap between Atlassian Jira and Microsoft 365. Below is the logic used in the backend to achieve this synchronization.

Backend Logic Graph

The Matching Logic (User Correlation) To sync presence status, the system must correlate a Jira User with a Microsoft Teams User. I designed a two-tier matching strategy that reflects standard enterprise environments:

  1. Primary Match (Email-based):
    • The system first attempts to match the Jira account email with the Azure AD mail or userPrincipalName.
    • Why: In professional organizations, the identity provider (IdP) ensures that a user's email is identical across Jira and Microsoft Teams (e.g., employee@company.com). This provides an exact, enterprise-grade match.
  2. Fallback Match (Display Name):
    • If the email is hidden or does not match (common in some test environments), the system falls back to a search by Display Name.
    • Smart Logic: If multiple users are found with the same name, the code prioritizes the user who is currently "Online" or has active presence data.

Requirement for Testing: For the integration to work, the Jira user's email or display name must exist within the connected Azure AD (Microsoft Entra ID) Tenant. This mirrors a real-world production environment where users are centrally managed.


2. "Live Agents" Group Discovery Logic

The backend automatically fetches agents by scanning for a specific group pattern (jira-servicemanagement-users-*).

Developer Note on Group Selection: I intentionally chose to programmatically target groups starting with the prefix jira-servicemanagement-users- for the following reasons:

  • Standard Convention: This is the default group name created automatically by Atlassian for any new Jira Service Management instance.
  • "Out of the Box" Experience: By targeting this default convention, CrewRadar works immediately for the hackathon judges without requiring manual configuration or group mapping setup.
  • Speed & Stability: This hardcoded approach ensured a stable and fast development cycle for the competition.

Future Roadmap (Post-Evaluation): Post-evaluation, I plan to introduce a configuration UI in the Admin Panel. This will allow organizations to select custom groups (e.g., "L1 Support", "Tier 2 Agents") instead of relying on the default JSM group.

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

posted an update

Important: Status Mapping Logic (MS Teams to Jira CrewRadar)

Dear Jury Members,

Please evaluate the integration based on the status mapping logic defined in the table below. This logic was specifically developed to bridge Microsoft Teams presence with Jira workflows.

Status Mapping Table: CrewRadar Status Mapping


Developer Notes & Design Choices

The current mapping follows a specific logic chosen for the hackathon:

  • Workflow Optimization: These mappings are designed to fit a specific operational workflow (e.g., treating 'Do Not Disturb' as 'Available') to ensure that urgent ticket assignments are not missed.
  • Hackathon Prototype: A hardcoded approach was intentionally chosen to build a fast, stable, and working solution within the competition timeframe.
  • Organizational Flexibility: I am aware that different organizations may require different mapping logic.

Future Roadmap (Post-Evaluation)

This system is designed to be highly scalable and will be improved after the evaluation phase:

  • Configurable UI: I plan to add a user interface (UI) that allows organizations to customize their own mapping rules.
  • Enhanced Flexibility: This will make the application flexible for a wider range of professional audiences and different organizational needs.

Please take these design choices into consideration during your testing. Thank you!

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

posted an update

Important Update regarding Plugin Stability

For the plugin to work properly and without crashing, the field shown in the screenshot below must be cleared by selecting "Clear Work Location".

Microsoft Teams Work Location Field

As previously mentioned, this issue will be fixed after the evaluation phase is complete.

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

posted an update

Important Technical Note regarding Teams Integration

Dear Jury Members,

I am providing this note to ensure a smooth evaluation of the project. Due to competition rules, I am unable to modify the code at this stage; however, I have identified a specific edge case regarding the Microsoft Teams integration that requires attention.

Issue Description

A compatibility bug occurs when the "Set work location" field in the Microsoft Teams application is active.

  • The Problem: If this field is set to "Office" or "Remote", the CrewRadar status page will encounter a plugin crash.
  • The Requirement: For the plugin to function correctly during your evaluation, this field must be cleared and left empty.

Reason for Current State

Since the submission deadline has passed, I have strictly adhered to the rules and halted all development. This issue stems from the application not yet being configured to parse the specific work location data string provided by the Teams API.

Post-Evaluation Roadmap

Immediately following the evaluation phase, I plan to implement a permanent fix that will:

  1. Successfully retrieve the work location information from Teams.
  2. Display the status appropriately within the CrewRadar interface to enhance the user experience.

Thank you for your understanding.

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