Step 1: Defining Errors
Create and structure error codes for your application.
Error Code Naming Convention
All error codes follow a standardized format for consistency and searchability:
Error-{PRODUCT}-{NUMBER}
Examples:
Error-FlowStudio-100090
Error-AppStudio-200001
Error-ProcessEngine-150025
Components Explained
| Component | Format | Example | Description |
|---|---|---|---|
| Prefix | Error- |
Error- |
Fixed prefix for all error codes |
| Product | PascalCase (no spaces) | FlowStudio |
The application name (as provided by developers) |
| Number | 5-6 digit unique ID | 100090 |
Unique numeric identifier within that product |
Assigning Error Numbers
Each product has 100,000 error codes available. Error number ranges are organized by product and feature area:
Product Allocation (100,000 codes each)
FlowStudio: 100000-199999 (100,000 codes)
AppStudio: 200000-299999 (100,000 codes)
AtlasForms: 300000-399999 (100,000 codes)
Octopus: 400000-499999 (100,000 codes)
Passport: 500000-599999 (100,000 codes)
WorkDesk: 600000-699999 (100,000 codes)
BizFirstObserve: 700000-799999 (100,000 codes)
EdgeStream: 800000-899999 (100,000 codes)
Custom/Integration:900000-999999 (100,000 codes)
Feature Area Organization (within your product range)
Within your product's 100,000 codes, organize by feature area using the second digit:
FlowStudio Examples:
10x000-10x999 → Workflow execution (Feature: Execution)
11x000-11x999 → Node system (Feature: Nodes)
12x000-12x999 → Canvas/UI (Feature: Canvas)
13x000-13x999 → Data binding (Feature: DataBinding)
14x000-14x999 → Permissions (Feature: Security)
15x000-15x999 → Store/State (Feature: Store)
16x000-16x999 → Integration/API (Feature: Integration)
17x000-17x999 → Observability (Feature: Observability)
18x000-18x999 → Configuration (Feature: Config)
19x000-19x999 → Reserved (Feature: Reserved)
Pattern: {ProductStart}{FeatureDigit}{SubCategory}
Example: 1 (FlowStudio) 0 (Execution) 0090 = 100090
Sub-Category Organization (1000 codes per feature)
Each feature area has 1000 codes available:
Within each feature's 1000 codes:
XX0000-XX0099 → Validation/Input errors
XX0100-XX0199 → Execution/Runtime errors
XX0200-XX0299 → Data/Binding errors
XX0300-XX0399 → State/Store errors
XX0400-XX0499 → Permission/Security errors
XX0500-XX0599 → Configuration errors
XX0600-XX0699 → Integration/API errors
XX0700-XX0799 → UI/Presentation errors
XX0800-XX0899 → Resource/Performance errors
XX0900-XX0999 → Miscellaneous/Other errors
Developers are responsible for choosing unique numbers within their product's namespace. Plan your feature areas to support growth (e.g., reserve features 10-19 for execution if you expect many codes).
Creating Error in Code
When throwing errors in your application, include the error code in your exception:
C# Example
throw new ApplicationException(
"Error-FlowStudio-100090: Cannot execute node with invalid input"
);
JavaScript/TypeScript Example
throw new Error(
"Error-FlowStudio-100090: Cannot execute node with invalid input"
);
Best Practices
- Always include the error code at the start of the message
- Make the message descriptive and actionable
- Include context (parameter names, values, constraints)
- Never include sensitive data (passwords, API keys, tokens)
Error Categories
When defining errors, classify them by category:
| Category | Typical Range | Description |
|---|---|---|
| Validation | *-000-*001999 | Input validation, constraint violations, invalid configuration |
| Execution | *-000-*000999 | Runtime errors, missing data, failed operations |
| Permission | *-003-*003999 | Authorization failures, insufficient privileges |
| System | *-999-*999999 | Integration failures, external service errors |
Picking a New Error Code (Non-Existing)
When you need to create a new error code that doesn't exist yet, follow this process to pick from your product's 100,000 available codes:
Step 1: Determine Your Product (100,000 codes)
First, identify which product owns this error and its base range:
| Product | Base Range | Available Codes |
|---|---|---|
| FlowStudio | 100000-199999 | 100,000 |
| AppStudio | 200000-299999 | 100,000 |
| AtlasForms | 300000-399999 | 100,000 |
| Octopus | 400000-499999 | 100,000 |
| Passport | 500000-599999 | 100,000 |
| WorkDesk | 600000-699999 | 100,000 |
| BizFirstObserve | 700000-799999 | 100,000 |
| EdgeStream | 800000-899999 | 100,000 |
| Custom/Integration | 900000-999999 | 100,000 |
Step 2: Choose Feature Area (1000 codes per feature)
Pick a feature area within your product using the second digit:
FlowStudio (100000-199999) example:
10x000-10x999 → Execution (10 available: 100000-109999)
11x000-11x999 → Nodes (10 available: 110000-119999)
12x000-12x999 → Canvas (10 available: 120000-129999)
13x000-13x999 → DataBinding (10 available: 130000-139999)
14x000-14x999 → Security (10 available: 140000-149999)
15x000-15x999 → Store (10 available: 150000-159999)
16x000-16x999 → Integration (10 available: 160000-169999)
17x000-17x999 → Observability (10 available: 170000-179999)
18x000-18x999 → Config (10 available: 180000-189999)
19x000-19x999 → Reserved (10 available: 190000-199999)
Pattern: {Base} + {Feature Digit} x1000 + {SubCategory}
Step 3: Identify Sub-Category (within 1000-code feature block)
Each feature block has 1000 codes organized by error type:
| Range (within feature) | Error Type | Example |
|---|---|---|
| XX0000-XX0099 | Validation/Input | 100000-100099 (Execution validation) |
| XX0100-XX0199 | Execution/Runtime | 100100-100199 (Execution runtime) |
| XX0200-XX0299 | Data/Binding | 100200-100299 (Execution data) |
| XX0300-XX0399 | State/Store | 100300-100399 (Execution state) |
| XX0400-XX0499 | Permission/Security | 100400-100499 (Execution security) |
| XX0500-XX0599 | Configuration | 100500-100599 (Execution config) |
| XX0600-XX0699 | Integration/API | 100600-100699 (Execution integration) |
| XX0700-XX0799 | UI/Presentation | 100700-100799 (Execution UI) |
| XX0800-XX0899 | Resource/Performance | 100800-100899 (Execution perf) |
| XX0900-XX0999 | Miscellaneous | 100900-100999 (Execution misc) |
Step 4: Find Next Available Number
Method A: Check ErrorCodes Index
- Open
ErrorManagement/ErrorCodes/Index.html - Find your product section
- See "Next Available" number (updated automatically)
Method B: Search in Code
# Find highest number in your product
grep -r "Error-FlowStudio-" src/ packages/ | \
grep -o "[0-9]\{6\}" | sort -n | tail -1
# Example output: 100090
# Your next code: 100091
Method C: List Documentation Files
# List all existing error codes for your product
ls ErrorManagement/ErrorCodes/Error-FlowStudio-*.html | \
sort -V | tail -5
# Shows last 5 codes, pick the next sequential number
Step 5: Validate Uniqueness
# Check if this code already exists
grep -r "Error-FlowStudio-100091" .
# Should return: No matches
# Check documentation
ls ErrorManagement/ErrorCodes/Error-FlowStudio-100091.html
# Should return: No such file
Step 6: Reserve and Document
Once you've picked your number:
- Add it to your code error messages/logs
- Create documentation page:
Error-{PRODUCT}-{NUMBER}.html - Update
ErrorCodes/Index.htmlwith the new error card - Commit code + documentation together
Reserving Error Codes
To avoid conflicts:
- Check the
ErrorCodes/directory for existing codes in your range - Follow the "Picking a New Error Code" process above
- Document the range in your service's README or developer guide
- Commit your error code documentation at the same time as your code change
Common Mistakes
- Using the same error code for different errors
- Hardcoding error codes without documentation
- Inconsistent code formatting (Error_FlowStudio instead of Error-FlowStudio)
- Creating error codes that duplicate existing ones
- Choose unique, sequential numbers within your product
- Document the error immediately after creating the code
- Use consistent naming across all products
- Test that the error code appears in your application's output
Next Steps
Once you've defined your error code, proceed to Step 2: Documentation to create the error reference page.