Complete Incident Opening Workflow - Current Stateยค
Date: October 10, 2025 Status: Reference documentation BEFORE P4/P5 modification
๐ Overviewยค
The incident opening workflow in FireFighter follows a multi-step process that varies according to the incident priority (P1 to P5).
๐ Priority Determination Logicยค
Priority is automatically calculated from selected impacts:
- P1-P3 โ
response_type = "critical"
โ Critical incident with dedicated Slack channel - P4-P5 โ
response_type = "normal"
โ Normal incident with only a Jira ticket
Calculation: priority_value < 4 ? "critical" : "normal"
๐ Complete Workflow by Priorityยค
PART 1: CRITICAL Incidents Workflow (P1/P2/P3)ยค
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 0: Intro โ
โ - Welcome message โ
โ - Warning if recent incidents in the last hour โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 1: Set Impacts (SelectImpactForm) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Dynamic fields for each ImpactType: โ
โ โข Business Impact (HIGH/MEDIUM/LOW/LOWEST/NO) โ
โ โข Operational Impact (HIGH/MEDIUM/LOW/LOWEST/NO) โ
โ โข Technical Impact (HIGH/MEDIUM/LOW/LOWEST/NO) โ
โ โ
โ โ Auto-calculates priority_value and response_type โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 2: Priority/SLA Display (Response Type Block) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Displays (non-editable): โ
โ โข ๐ด Selected priority: P1/P2/P3 - Description โ
โ โข โฑ๏ธ SLA: 15 min / 30 min / 1 hour โ
โ โข :gear: Process: :slack: Slack :jira_new: Jira ticket โ
โ โข :pushpin: Selected impacts: [detailed list] โ
โ โข :warning: Critical incidents are for emergency only โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 3: Select Incident Type โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ ๐ "Then, select the type of issue / affected users" โ
โ โ
โ Dropdown with ONLY 1 option: โ
โ โข "Critical" โ OpeningCriticalModal โ
โ โ
โ โ ๏ธ This step is HIDDEN because len(INCIDENT_TYPES) == 1 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 4: Set Details (CreateIncidentFormSlack) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ OpeningCriticalModal form: โ
โ โข title (CharField, 10-128 chars) โ
โ โข description (TextField, 10-1200 chars) โ
โ โข incident_category (GroupedModelChoiceField) โ
โ โข environment (ModelChoiceField) โ
โ โข priority (HiddenInput - already determined) โ
โ โ
โ โ
NO "suggested_team_routing" field โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 5: Review & Submit โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Displays: โ
โ โข :slack: Dedicated Slack channel will be created โ
โ โข ~X responders will be invited โ
โ โข :jira_new: Associated Jira ticket will be created โ
โ โข :pagerduty: (if outside office hours) โ
โ โ
โ Button: "Create the incident" โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
[INCIDENT CREATED]
โ
[Slack Channel + Jira Ticket + PagerDuty]
PART 2: NORMAL Incidents Workflow (P4/P5) - RAID MODULEยค
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 0: Intro โ
โ - Welcome message โ
โ - Warning if recent incidents in the last hour โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 1: Set Impacts (SelectImpactForm) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Dynamic fields for each ImpactType: โ
โ โข Business Impact (HIGH/MEDIUM/LOW/LOWEST/NO) โ
โ โข Operational Impact (HIGH/MEDIUM/LOW/LOWEST/NO) โ
โ โข Technical Impact (HIGH/MEDIUM/LOW/LOWEST/NO) โ
โ โ
โ โ Auto-calculates priority_value=4 or 5 and response_type="normal" โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 2: Priority/SLA Display (Response Type Block) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Displays (non-editable): โ
โ โข ๐ก/๐ข Selected priority: P4/P5 - Description โ
โ โข โฑ๏ธ SLA: 2 days / 5 days โ
โ โข :gear: Process: :jira_new: Jira ticket โ
โ โข :pushpin: Selected impacts: [detailed list] โ
โ โข (NO "critical incidents" warning) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 3: Select Incident Type โ ๏ธ IMPORTANT STEP โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ ๐ "Then, select the type of issue / affected users" โ
โ โ
โ Dropdown with 5 OPTIONS (defined in raid/apps.py): โ
โ โข "Customer" โ OpeningRaidCustomerModal โ
โ โข "Seller" โ OpeningRaidSellerModal โ
โ โข "Internal" โ OpeningRaidInternalModal โ
โ โข "Documentation request" โ OpeningRaidDocumentationModal โ
โ โข "Feature request" โ OpeningRaidFeatureRequestModal โ
โ โ
โ โ
This step is VISIBLE because len(INCIDENT_TYPES) > 1 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโ
โ โ
[CUSTOMER/SELLER/INTERNAL] [DOCUMENTATION/FEATURE REQUEST]
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 4a: Set Details โ โ STEP 4b: Set Details โ
โ (CreateNormal...FormSlack) โ โ (CreateRaid...FormSlack) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ COMMON Fields: โ โ COMMON Fields: โ
โ โข incident_category โ โ โข incident_category โ
โ โข platform (FR/DE/IT/ES/UK) โ โ โข platform (FR/DE/IT/ES/UK) โ
โ โข title (10-128 chars) โ โ โข title (10-128 chars) โ
โ โข description (10-1200) โ โ โข description (10-1200) โ
โ โข suggested_team_routing โ
โ โ โข suggested_team_routing โ
โ
โ โข priority (HiddenInput) โ โ โข priority (HiddenInput) โ
โ โ โ โ
โ SPECIFIC Fields: โ โ (No specific fields) โ
โ [If CUSTOMER] โ โ โ
โ โข zendesk_ticket_id โ โ โ
โ โ โ โ
โ [If SELLER] โ โ โ
โ โข seller_contract_id โ โ โ
โ โข is_key_account (bool) โ โ โ
โ โข is_seller_in_golden_list โ โ โ
โ โข zoho_desk_ticket_id โ โ โ
โ โ โ โ
โ [If INTERNAL] โ โ โ
โ (no additional fields) โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ STEP 5: Review & Submit โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Displays: โ
โ โข :jira_new: A Jira ticket will be created โ
โ โข (NO mention of Slack channel) โ
โ โข (NO mention of PagerDuty) โ
โ โ
โ Button: "Create the incident" โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
[JIRA TICKET CREATED]
โ
[Ticket in the feature team board]
๐ฏ Summary of Key Differencesยค
Aspect | P1/P2/P3 (Critical) | P4/P5 (Normal/RAID) |
---|---|---|
Process | Slack + Jira + PagerDuty | Jira only |
STEP 3: Select Type | HIDDEN (only 1 option) | VISIBLE (5 options) |
Feature Team | โ NOT present | โ PRESENT in all forms |
Details Form | CreateIncidentFormSlack | CreateNormal...FormSlack (5 variants) |
Specific Fields | None | zendesk_ticket_id, seller_contract_id, etc. |
Jira Destination | Critical incident ticket | Feature team board ticket |
๐ suggested_team_routing
Fieldยค
Definitionยค
# File: src/firefighter/raid/forms.py, line 82-86
suggested_team_routing = forms.ModelChoiceField(
queryset=FeatureTeam.objects.only("name").order_by("name"),
label="Feature Team or Train",
required=True,
)
Field Presenceยค
Incident Type | Present in form? |
---|---|
P1/P2/P3 (Critical) | โ NO |
P4/P5 - Customer | โ YES |
P4/P5 - Seller | โ YES |
P4/P5 - Internal | โ YES |
P4/P5 - Documentation | โ YES |
P4/P5 - Feature Request | โ YES |
Usageยค
The suggested_team_routing
field is used to: 1. Route the Jira ticket to the correct team board 2. Automatically assign the ticket to the responsible team 3. Notify the concerned team members
๐ง Source Code Referencesยค
1. Response Type Determinationยค
File: src/firefighter/slack/views/modals/open.py:437-439
# Default fallback: P1/P2/P3 = critical, P4/P5 = normal
response_type = cast("ResponseType", "critical" if priority_value < 4 else "normal")
open_incident_context["response_type"] = response_type
2. Incident Types Configurationยค
File: src/firefighter/slack/views/modals/open.py:52-65
INCIDENT_TYPES: dict[ResponseType, dict[str, dict[str, Any]]] = {
"critical": {
"critical": {
"label": "Critical",
"slack_form": OpeningCriticalModal,
},
},
"normal": {
"normal": {
"label": "Normal",
"slack_form": OpeningCriticalModal, # Overridden by RAID
},
},
}
File: src/firefighter/raid/apps.py:32-53
(OVERRIDE at startup)
INCIDENT_TYPES["normal"] = {
"CUSTOMER": {
"label": "Customer",
"slack_form": OpeningRaidCustomerModal,
},
"SELLER": {
"label": "Seller",
"slack_form": OpeningRaidSellerModal,
},
"INTERNAL": {
"label": "Internal",
"slack_form": OpeningRaidInternalModal,
},
"DOCUMENTATION_REQUEST": {
"label": "Documentation request",
"slack_form": OpeningRaidDocumentationRequestModal,
},
"FEATURE_REQUEST": {
"label": "Feature request",
"slack_form": OpeningRaidFeatureRequestModal,
},
}
3. STEP 3 Display Logicยค
File: src/firefighter/slack/views/modals/open.py:258-290
@staticmethod
def get_select_incident_type_blocks(
open_incident_context: OpeningData,
incident_type_value: str | None,
) -> list[Block]:
response_type = open_incident_context.get("response_type")
if (
response_type is None
or response_type not in INCIDENT_TYPES
or len(INCIDENT_TYPES[response_type]) == 1 # โ HIDE if only 1 option
):
return []
# ... displays dropdown with options
๐ฏ Conclusionยค
The current workflow works as follows:
-
For P1/P2/P3: Simplified workflow with 4 steps (intro, impacts, priority display, details)
- No type selection (automatically hidden)
- No feature team field
- Creates Slack channel + Jira ticket
-
For P4/P5: Complete workflow with 5 steps (intro, impacts, priority display, type selection, details)
- Mandatory incident type selection (Customer/Seller/Internal/Doc/Feature)
- Feature team field present in ALL forms
- Creates only a Jira ticket in the team board
Current blocker: STEP 3 "Select type" is NECESSARY for P4/P5 because it determines which form to display (Customer vs Seller vs Internal, etc.), each having different specific fields.