Decision Shape
Master the Decision diamond shape for conditional logic and branching in ISO 5807 flowcharts
Decision Shape
The Decision shape is a diamond used for conditional logic and branching in flowcharts. It represents a yes/no question that determines which path the flow takes next.
What is a Decision Shape?
The Decision shape (also called a Decision Diamond or Conditional) represents:
- A yes/no question or condition
- A true/false evaluation
- A binary choice point
- A branch in the workflow
According to ISO 5807, the Decision symbol must have exactly two or more paths leading out, representing different outcomes.
When to Use
Use the Decision shape for:
- Yes/No questions: "Is user logged in?", "Is balance sufficient?"
- Comparisons: "Is age >= 18?", "Is quantity > 0?"
- Validations: "Is format valid?", "Is password correct?"
- State checks: "Is file found?", "Is connection active?"
- Boolean conditions: Any expression that evaluates to true/false
ISO 5807 Standard
According to ISO 5807, the Decision symbol is defined as:
- A diamond shape (rhombus)
- Contains a question or condition
- Has two or more exit paths
- Each path must be clearly labeled (Yes/No, True/False, or specific conditions)
The diamond shape is specifically reserved for decision points and should not be used for other purposes.
Visual Appearance
In DiagramKit.AI, the Decision shape appears as:
- Dimensions: 120×120 pixels (perfect diamond)
- Color: Light yellow (#fefce8)
- Border: Gold (#ca8a04)
- Shape: Diamond rotated 45 degrees
Best Practices
✅ Good Usage
[Start]
   ↓
[Get user age]
   ↓
<Is age >= 18?>
  ↙        ↘
Yes        No
 ↓          ↓
[Grant]   [Deny]
[Access]  [Access]
  ↓          ↓
[End]     [End]
- Write as a clear question with a question mark
- Label all exit paths (Yes/No, True/False)
- Keep questions simple and binary
- Use consistent labeling throughout the flowchart
❌ Avoid
- ❌ Statements: "User is valid" (use "Is user valid?" instead)
- ❌ Actions: "Check validity" (use "Is valid?" instead)
- ❌ Multiple questions: "Is valid and active?" (split into two decisions)
- ❌ Unlabeled paths (always label Yes/No)
Common Examples
Example 1: User Authentication
[Enter credentials]
   ↓
<Is password correct?>
  ↙              ↘
Yes              No
 ↓                ↓
<Is 2FA enabled?>  [Show error]
  ↙        ↘           ↓
Yes        No        [End]
 ↓          ↓
[Send code] [Login success]
Example 2: Data Validation
[Receive input]
   ↓
<Is format valid?>
  ↙          ↘
Yes          No
 ↓            ↓
<Is within    [Return error]
 range?>         ↓
  ↙    ↘       [End]
Yes    No
 ↓      ↓
[Save] [Reject]
Example 3: Loop with Decision
[Initialize counter = 0]
   ↓
<Is counter < 10?>
  ↙            ↘
Yes            No
 ↓              ↓
[Process item]  [End]
 ↓
[Increment counter]
 ↓
(loop back to decision)
Writing Good Decision Questions
Strong Questions (Recommended)
- "Is balance > 0?"
- "Is user authenticated?"
- "Is file found?"
- "Is quantity available?"
- "Has timeout occurred?"
Weak Questions (Avoid)
- "Check balance" (not a question)
- "Balance" (too vague)
- "Valid?" (incomplete question)
- "Process user if authenticated" (too complex)
Multiple Conditions
Binary Decision (Most Common)
<Is valid?>
  ↙      ↘
Yes      No
Three-Way Split
<Check status>
  ↙    ↓    ↘
Low  OK  High
Complex Logic (Split into Multiple Decisions)
❌ Wrong: <Is A and B or C?>
✅ Correct:
<Is A?>
  ↙  ↘
Yes   No → [End]
 ↓
<Is B?>
  ↙  ↘
Yes   No
 ↓     ↓
<Is C?>
AI Prompt Tips
Use these prompts to add Decision shapes with AI:
add a decision to check if user is logged in
insert a validation decision after the input
create a decision point asking if balance is sufficient
add a yes/no decision for age verification
Programming Equivalents
Decision shapes represent conditional statements:
JavaScript/TypeScript:
// Decision: Is age >= 18?
if (age >= 18) {
  // Yes path
  grantAccess();
} else {
  // No path
  denyAccess();
}
// Decision: Is user authenticated?
const result = isAuthenticated() ? login() : showError();
Python:
# Decision: Is balance > 0?
if balance > 0:
    # Yes path
    process_payment()
else:
    # No path
    show_insufficient_funds()
Pseudocode:
Decision: Is quantity available?
  IF quantity > 0 THEN
    Process order
  ELSE
    Show out of stock
  END IF
Path Labeling Conventions
Standard Labels
- Yes/No - Most common, universal
- True/False - Programming contexts
- Pass/Fail - Testing scenarios
- Valid/Invalid - Validation checks
- Found/Not Found - Search operations
Specific Conditions
<Check file size>
  ↙        ↘
< 10MB    >= 10MB
<User type>
  ↙      ↘
Admin   Regular
Connections
Decision shapes typically connect:
Input from:
- Process shapes (that evaluate conditions)
- Data I/O shapes (after receiving input)
- Preparation shapes (after setup)
- Other Decision shapes (nested conditions)
Output to:
- Process shapes (for each branch)
- Other Decision shapes (nested logic)
- End symbols (for termination paths)
- Loop back to previous steps
Common Patterns
Validation Chain
[Input data]
   ↓
<Is format valid?> → No → [Error]
   ↓ Yes
<Is in range?> → No → [Error]
   ↓ Yes
<Is unique?> → No → [Error]
   ↓ Yes
[Save data]
Loop Pattern
[Initialize i = 0]
   ↓
   ┌←←←←←←←←←←←←←┐
   ↓             ↑
<Is i < 10?>     ↑
   ↓ Yes         ↑
[Process item]   ↑
   ↓             ↑
[i = i + 1]      ↑
   └→→→→→→→→→→→→→┘
   ↓ No
[End]
Error Handling
[Attempt operation]
   ↓
<Success?>
  ↙      ↘
Yes      No
 ↓        ↓
[Log]    <Retries left?>
 ↓         ↙        ↘
[Next]   Yes        No
          ↓          ↓
      (retry)    [Fail]
Common Mistakes
Mistake 1: Using for Actions
❌ Wrong: <Process payment> (action, not question)
✅ Correct: <Is payment valid?> (yes/no question)
Mistake 2: Unlabeled Paths
❌ Wrong:
<Is valid?>
   ↙    ↘
[Save] [Error]
✅ Correct:
<Is valid?>
  ↙       ↘
Yes       No
 ↓         ↓
[Save]  [Error]
Mistake 3: Complex Conditions
❌ Wrong: <Is logged in and has permission and not expired?>
✅ Correct: Split into three separate Decision shapes
Mistake 4: Missing Exit Paths
❌ Wrong: Decision with only one exit path ✅ Correct: Always have at least two exit paths
Decision Tables Alternative
For complex multi-condition logic, consider using a decision table instead of nested diamonds:
Condition 1 | Condition 2 | Action
------------|-------------|-------
Yes         | Yes         | Action A
Yes         | No          | Action B
No          | Yes         | Action C
No          | No          | Action D
Then implement as:
<Condition 1?>
  ↙        ↘
Yes        No
 ↓          ↓
<Cond 2?>  <Cond 2?>
 ↙  ↘      ↙  ↘
A    B    C    D
Related Shapes
- Process - For actions before and after decisions
- Data I/O - For input that feeds decisions
- Connector - For connecting complex decision paths
- Off-page Connector - For decisions spanning pages
Pro Tip: Keep decisions binary (Yes/No) whenever possible. If you need more than 3 branches, consider refactoring into multiple decisions or using a different diagram type!
Next Steps
- Learn about Process shapes for actions on each branch
- Explore Connector shapes for complex decision flows
- Understand Data I/O for decision inputs
- Review flowchart patterns for common decision structures
