- Overview
- Core Principles
- EARS Ruleset
- The Five EARS Patterns
- Writing Quality EARS Requirements
- Pattern Selection Guide
- Integration with INCOSE Guidelines
- Implementation Recommendations
- Advanced Considerations
- Quick Reference Card
- Summary
EARS is a lightweight, structured methodology for writing clear and precise requirements using constrained natural language. Developed by Alistair Mavin and colleagues at Rolls-Royce PLC in 2009, EARS provides patterns that enable authors to write high-quality textual requirements with minimal training overhead.
- Reduces ambiguity in natural language requirements
- Eliminates common problems found in unconstrained requirements
- Easy to learn with minimal training overhead
- No specialist tools required for basic implementation
- Intuitive syntax that matches common English usage
- Particularly effective for non-native English speakers
Problem Statement:
- System requirements are typically written in unconstrained natural language (NL), which is inherently imprecise
- Requirements authors often lack formal training in requirements writing
- Requirements problems propagate to lower development levels
- This creates unnecessary volatility and risk, impacting schedules and costs
EARS Solution:
- Provides structured guidance for writing requirements
- Maintains readability while increasing precision
- Reduces or eliminates common requirement defects
- Enables consistent quality across teams and projects
The basic EARS template follows temporal logic:
While <optional pre-condition(s)>, when <optional trigger>, the <system name> shall <system response>
Key Characteristics:
- Clauses always appear in the same order
- Follows temporal/chronological logic
- Keywords match common English usage
- Structure is intuitive and easy to understand
Each EARS requirement MUST contain:
| Element | Quantity | Description |
|---|---|---|
| Pre-conditions | Zero or many | Conditions that must be true for requirement to be active |
| Trigger | Zero or one | Discrete event detected by the system |
| System name | One (required) | Explicit identification of the system/component |
| System responses | One or many | What the system must do when requirement becomes active |
CRITICAL RULE: Clauses always appear in the same order:
- Pre-condition(s) (if any)
- Trigger (if any)
- System name (always)
- System response(s) (always)
This ordering follows temporal logic and makes requirements easier to read and understand.
- Use keywords consistently (
While,When,Where,If...Then) - Maintain explicit system name in every requirement
- Follow the "shall" construction for obligations
- Keep one requirement per statement
- Avoid combining patterns incorrectly
Definition: Requirements that are always active throughout system operation.
Characteristics:
- No EARS keyword used
- Fundamental, constant properties
- No conditions or triggers
- Always enforceable
Syntax:
The <system name> shall <system response>
Examples:
✅ Good Examples:
The mobile phone shall have a mass of less than 150 grams.
The software shall be written in Python.
The ATM shall support withdrawal amounts in multiples of $20.
The user interface shall display text in Arial font, 12pt minimum.
The database shall encrypt all stored passwords using SHA-256 algorithm.
❌ Bad Examples (not ubiquitous):
The system shall display error messages.
(Missing: when/under what conditions?)
The app shall be fast.
(Vague, not measurable)
When to Use:
- Fundamental system properties (size, weight, material)
- Constant constraints (standards compliance, encoding)
- Persistent characteristics (always-on features)
- Universal rules (formatting, protocols)
Definition: Requirements active while a specified state or condition remains true.
Keyword: While
Characteristics:
- Activated by continuous states
- Remain active as long as condition persists
- Deactivated when state changes
- Pre-conditions define system/transaction states only
Syntax:
While <pre-condition(s)>, the <system name> shall <system response>
Examples:
✅ Good Examples:
While there is no card in the ATM, the ATM shall display "insert card to begin".
While in Do Not Disturb mode, the software shall silence incoming calls.
While the engine temperature exceeds 90°C, the system shall activate the cooling fan.
While the vehicle is in reverse gear, the backup camera shall display the rear view.
While battery level is below 20%, the device shall activate power saving mode.
While the user is logged in, the application shall display the user's dashboard.
❌ Bad Examples:
While the user clicks login, the system shall authenticate.
(This is an event, not a state - use "When" instead)
While processing, the system shall work correctly.
(Vague response, not measurable)
When to Use:
- Continuous monitoring situations
- Mode-dependent behaviors
- Threshold-based activations
- State-dependent operations
Key Distinction:
- State: A condition that persists over time (logged in, temperature above X, mode active)
- Event: A discrete occurrence at a point in time (button clicked, message received)
Definition: Requirements triggered by a specific discrete event.
Keyword: When
Characteristics:
- Activated by discrete, detectable events
- One-time trigger causing specific response
- Response occurs after trigger is detected
- Used for normal system operations
Syntax:
When <trigger>, the <system name> shall <system response>
Examples:
✅ Good Examples:
When "mute" is selected, the laptop shall suppress all audio output.
When the payment is received, the app shall send a confirmation notification.
When the user presses the emergency stop button, the machine shall halt all operations within 2 seconds.
When the door is opened, the refrigerator shall activate the interior light.
When a new email arrives, the system shall display a notification badge.
When the user logs out, the system shall clear all session data.
❌ Bad Examples:
When the temperature is high, the fan shall run.
(This is a state, not an event - use "While" instead)
When the user wants to save, the system shall save.
("Wants to" is vague - be specific about the trigger)
When to Use:
- Button presses and user actions
- System events (startup, shutdown, messages)
- External triggers (signals, communications)
- Completion of operations
Key Distinction:
- Use
Whenfor normal operational events - Use
If...Thenfor error conditions and unwanted behaviors
Definition: Requirements that apply only when a specific optional feature is present in the system configuration.
Keyword: Where
Characteristics:
- Conditional on feature presence
- Applies to product variants
- Feature may or may not be included
- Enables modular requirement sets
Syntax:
Where <feature is included>, the <system name> shall <system response>
Examples:
✅ Good Examples:
Where the car has a sunroof, the car shall have a sunroof control panel on the driver door.
Where the DisplayPort is present, the software shall allow users to select the maximum supported refresh rate.
Where GPS functionality is enabled, the device shall update location data every 5 seconds.
Where the premium package is purchased, the application shall provide access to advanced analytics.
Where wireless charging is available, the device shall indicate charging status via LED.
Where the vehicle includes adaptive cruise control, the system shall maintain a minimum 2-second following distance.
❌ Bad Examples:
Where the user has admin rights, the system shall allow file deletion.
(This is about user state, not an optional feature - use "While" instead)
Where possible, the system shall optimize performance.
(Escape clause, not an optional feature specification)
When to Use:
- Product line variations
- Optional hardware components
- Feature tier differentiation
- Add-on modules and packages
- Regional variants
Important Notes:
- Feature must be binary (present/absent)
- Not for conditional user permissions or runtime states
- Not an escape clause ("where possible", "where appropriate")
Definition: Requirements specifying system response to undesired situations, errors, faults, or exceptional conditions.
Keywords: If ... Then
Characteristics:
- Handle error conditions
- Manage fault scenarios
- Address exceptional situations
- Specify recovery behaviors
- Different from normal
Whenevents
Syntax:
If <trigger>, then the <system name> shall <system response>
Examples:
✅ Good Examples:
If an invalid credit card number is entered, then the website shall display "please re-enter credit card details".
If the password is entered incorrectly three times, then the app shall lock the account for 15 minutes.
If network connection is lost, then the system shall save all unsaved data locally.
If the sensor detects smoke, then the alarm shall activate within 3 seconds.
If disk space falls below 10%, then the system shall display a warning message.
If the database connection fails, then the application shall retry the connection every 30 seconds for up to 5 minutes.
❌ Bad Examples:
If the user clicks save, then the system shall save the file.
(This is normal operation, not unwanted - use "When" instead)
If error occurs, then system shall handle it.
(Too vague - specify the error type and response)
When to Use:
- Error handling
- Fault detection and recovery
- Invalid input scenarios
- System failures
- Security violations
- Resource exhaustion
- Timeout conditions
Critical Distinction:
| Use Case | Pattern | Example |
|---|---|---|
| Normal operation | When |
When the user clicks submit, the form shall be processed. |
| Error/fault | If...Then |
If the form validation fails, then the system shall display error messages. |
Definition: Requirements combining multiple EARS patterns for richer, multi-conditional system behavior.
Characteristics:
- Multiple EARS keywords combined
- Layered conditions and triggers
- More sophisticated scenarios
- Maintains temporal ordering
Syntax (Normal Operations):
While <pre-condition(s)>, When <trigger>, the <system name> shall <system response>
Syntax (Unwanted Behaviors):
While <pre-condition(s)>, If <trigger>, then the <system name> shall <system response>
Examples:
✅ Good Examples - Normal Operations:
While the aircraft is on ground, when reverse thrust is commanded, the engine control system shall enable reverse thrust.
While the system is in maintenance mode, when the diagnostics button is pressed, the system shall display the full diagnostic report.
While the vehicle speed exceeds 60 mph, when the driver applies brakes, the ABS system shall activate within 100 milliseconds.
While connected to external power, when the battery reaches 100% charge, the charging system shall switch to trickle charge mode.
While in night mode, when motion is detected, the camera shall activate infrared illumination.
✅ Good Examples - Unwanted Behaviors:
While the engine is running, if oil pressure drops below 20 psi, then the system shall illuminate the warning light and sound an alarm.
While data is being transmitted, if the connection is interrupted, then the system shall buffer the data and retry transmission.
While the user is editing a document, if the application crashes, then the system shall auto-save the current state.
While operating in automatic mode, if an obstacle is detected within 2 meters, then the vehicle shall initiate emergency braking.
❌ Bad Examples:
While logged in, when the user clicks save, where auto-save is enabled, the system shall save.
(Too complex - split into separate requirements)
When the button is pressed and the mode is active, the system shall respond.
(Use EARS keywords, not "and" - restructure as: While the mode is active, when the button is pressed...)
When to Use:
- Multi-conditional scenarios
- Context-dependent events
- Sophisticated control logic
- Safety-critical systems requiring multiple safeguards
Complexity Guidelines:
- Limit to 2 EARS keywords when possible
- If more complexity needed, consider splitting into multiple requirements
- Maintain readability - if it's confusing, simplify
- Follow temporal ordering strictly
Always clearly identify what system/component is being specified.
✅ Good:
When the user clicks login, the authentication service shall verify credentials.
❌ Bad:
When the user clicks login, credentials shall be verified.
(Who verifies? System name missing)
The system performs the action.
✅ Good:
The system shall encrypt the data.
❌ Bad:
The data shall be encrypted by the system.
(Passive voice)
Use concrete values, thresholds, and timing.
✅ Good:
When the download completes, the application shall display a confirmation message within 1 second.
❌ Bad:
When the download completes, the application shall quickly confirm.
(Vague - what is "quickly"?)
Avoid combining multiple requirements with "and".
✅ Good:
Requirement 1: The system shall validate the email format.
Requirement 2: The system shall validate the password strength.
❌ Bad:
The system shall validate the email format and password strength.
(Two requirements - split them)
Maintain uniform language across all requirements.
✅ Good:
Req 1: When the user clicks "Submit", the form shall be validated.
Req 2: When the user clicks "Cancel", the form shall be cleared.
❌ Bad:
Req 1: When the user presses "Submit", the form shall be validated.
Req 2: When the user selects "Cancel", the form shall be cleared.
(Inconsistent: clicks vs presses vs selects)
Replace subjective terms with measurable criteria.
| ❌ Avoid | ✅ Use Instead |
|---|---|
| quickly | within 2 seconds |
| efficiently | using less than 50MB RAM |
| user-friendly | requiring no more than 3 clicks |
| reliable | with 99.9% uptime |
| secure | encrypted with AES-256 |
Pre-conditions → Triggers → System name → Response
✅ Good:
While in edit mode, when the save button is clicked, the application shall commit changes to the database.
(State → Event → System → Response)
❌ Bad:
The application shall commit changes when save is clicked while in edit mode.
(Confused ordering)
Eliminate words that allow multiple interpretations.
| ❌ Avoid | Why? | ✅ Use Instead |
|---|---|---|
| appropriate | Subjective | Specify exact criteria |
| reasonable | Undefined | Define specific threshold |
| adequate | Vague | State exact requirement |
| normally | Unclear frequency | Specify exact conditions |
| may/might | Optional? | Use "shall" for requirements |
-
Mix EARS keywords incorrectly
When the system is running and if error occurs... ❌ -
Use passive voice constructions
Data shall be processed by the system. ❌ -
Include unnecessary implementation details
The system shall use a Redis cache to store session data. ❌ (Unless technology choice is a requirement) -
Create requirements with multiple "shall" statements
The system shall validate input and shall display errors and shall log attempts. ❌ -
Use escape clauses
The system shall respond quickly, if possible. ❌ The system shall, where appropriate, validate data. ❌ -
Rely on implied context
The system shall display the result. ❌ (Which result? When? Under what conditions?) -
Use "and" to combine requirements
The system shall validate and save data. ❌ -
Omit units for numerical values
The response time shall be less than 5. ❌ (5 what? Seconds? Milliseconds?)
- Follow established EARS patterns consistently
- Make all conditions and triggers explicit
- Focus on what the system must do, not how
- Use one "shall" per requirement
- Define clear, testable criteria
- State all necessary context
- Include units for all measurements
- Verify each requirement is verifiable
Before (ambiguous):
The system shall break network connection.
After (EARS - Event-Driven):
When the disconnect button is pressed, the software shall terminate the network connection.
Enhanced (EARS - Complex with timing):
While connected to the network, when the disconnect button is pressed, the software shall terminate the network connection within 2 seconds.
Before (vague):
The system shall respond quickly to user input.
After (EARS - Event-Driven with measurement):
When the user submits a form, the system shall display confirmation within 500 milliseconds.
Before (multiple requirements):
The system shall validate email and password and display errors.
After (separate EARS requirements):
Requirement 1: When the user submits the login form, the system shall validate the email address format.
Requirement 2: When the user submits the login form, the system shall validate the password meets complexity requirements.
Requirement 3: If email validation fails, then the system shall display "Invalid email format" below the email field.
Requirement 4: If password validation fails, then the system shall display "Password does not meet requirements" below the password field.
Before (confused):
When the temperature is high, the fan runs.
After (EARS - State-Driven):
While the CPU temperature exceeds 80°C, the cooling system shall operate the fan at maximum speed.
Before (unclear):
The system handles errors appropriately.
After (EARS - Unwanted Behavior):
If the database query times out after 30 seconds, then the system shall log the error and display "Service temporarily unavailable" to the user.
Use this checklist to verify each requirement:
- Follows correct EARS pattern
- Has explicit system name
- Uses active voice
- Contains only one "shall"
- Is verifiable/testable
- Includes units for numerical values
- Contains no escape clauses
- Contains no vague terms
- Follows temporal ordering
- Is grammatically correct
- Is unambiguous
- Is necessary (not nice-to-have)
- Is achievable
- Uses consistent terminology with other requirements
Use this flowchart to select the appropriate EARS pattern:
START
│
├─ Is the requirement always active?
│ └─ YES → UBIQUITOUS PATTERN
│ The <system> shall <response>
│
├─ Does it depend on a continuous state or condition?
│ └─ YES → STATE-DRIVEN PATTERN
│ While <condition>, the <system> shall <response>
│
├─ Is it triggered by a discrete event?
│ │
│ ├─ Is it normal operation?
│ │ └─ YES → EVENT-DRIVEN PATTERN
│ │ When <trigger>, the <system> shall <response>
│ │
│ └─ Is it an error/fault/unwanted behavior?
│ └─ YES → UNWANTED BEHAVIOR PATTERN
│ If <trigger>, then <system> shall <response>
│
├─ Does it only apply to optional features?
│ └─ YES → OPTIONAL FEATURE PATTERN
│ Where <feature>, the <system> shall <response>
│
└─ Does it require multiple conditions/triggers?
└─ YES → COMPLEX PATTERN
Combine patterns as needed
Question: The phone must weigh less than 200g.
Analysis:
- Always active? YES
- No conditions or triggers
Pattern: Ubiquitous
The mobile phone shall have a mass of less than 200 grams.
Question: Show warning when battery is low.
Analysis:
- Always active? NO
- Continuous state? YES (battery level)
- Below threshold is a persistent state
Pattern: State-Driven
While the battery level is below 15%, the device shall display a low battery warning.
Question: Save the document when user clicks save.
Analysis:
- Always active? NO
- Continuous state? NO
- Discrete event? YES (button click)
- Normal operation? YES
Pattern: Event-Driven
When the user clicks the save button, the application shall save the document to persistent storage.
Question: Handle incorrect password entry.
Analysis:
- Always active? NO
- Continuous state? NO
- Discrete event? YES
- Normal operation? NO (error condition)
Pattern: Unwanted Behavior
If an incorrect password is entered three consecutive times, then the system shall lock the account for 30 minutes.
Question: Premium users get advanced analytics.
Analysis:
- Always active? NO
- Optional feature? YES (premium subscription)
Pattern: Optional Feature
Where the premium subscription is active, the application shall provide access to advanced analytics dashboards.
Question: Stop machine immediately if emergency button pressed while operating.
Analysis:
- Multiple conditions? YES
- State (operating) + Event (button press)
- Safety-critical
Pattern: Complex
While the machine is in operation, when the emergency stop button is pressed, the control system shall halt all moving parts within 500 milliseconds.
| If the requirement... | Use Pattern | Keyword(s) |
|---|---|---|
| Is always true/active | Ubiquitous | (none) |
| Depends on a lasting state or mode | State-Driven | While |
| Responds to a user action or system event | Event-Driven | When |
| Handles errors, faults, or problems | Unwanted Behavior | If...Then |
| Applies only to certain product variants | Optional Feature | Where |
| Needs multiple conditions combined | Complex | Multiple |
EARS works synergistically with INCOSE (International Council on Systems Engineering) Guidelines for Writing Requirements. Together, they provide comprehensive guidance for high-quality requirements.
Every requirement should exhibit these characteristics:
- Only one interpretation possible
- No subjective terms
- Clear pronouns and references
EARS contribution: Structured patterns eliminate structural ambiguity
- Can be tested or inspected
- Has measurable acceptance criteria
- Observable outcomes
EARS contribution: Clear trigger-response format enables test case derivation
- Fully describes the capability or constraint
- All necessary information present
- No missing context
EARS contribution: Explicit pre-conditions and triggers ensure completeness
- No conflicts with other requirements
- Uniform terminology
- Aligned with system architecture
EARS contribution: Consistent keyword usage and structure
- Can be traced to source (stakeholder needs, regulations)
- Can be traced forward to design and tests
- Unique identification
EARS contribution: Clear structure enables automated traceability
- Technically achievable
- Within budget constraints
- Within schedule constraints
EARS contribution: Clear specification helps assess feasibility
- Truly required for the system
- Not nice-to-have
- Adds value
EARS contribution: Explicit triggers help identify truly necessary requirements
❌ Bad:
Data shall be validated by the system.
✅ Good (EARS + INCOSE):
When the user submits the form, the system shall validate the input data.
❌ Bad:
The system shall be able to process transactions.
✅ Good (EARS + INCOSE):
When a transaction is initiated, the system shall process the transaction within 3 seconds.
| ❌ Immeasurable | ✅ Measurable (EARS) |
|---|---|
| quickly | within 2 seconds |
| efficiently | using less than 100MB memory |
| user-friendly | requiring no more than 3 clicks to complete task |
| robust | handling 10,000 concurrent users without degradation |
| secure | encrypted using AES-256 with key rotation every 90 days |
❌ Bad:
The system shall, if possible, save user preferences.
✅ Good (EARS + INCOSE):
When the user modifies preferences, the system shall save the changes to persistent storage.
Create and maintain a project glossary. Use the same term throughout all requirements.
Example:
- Choose "user" OR "operator" (not both)
- Choose "terminate" OR "end" OR "close" (pick one)
- Choose "display" OR "show" (be consistent)
❌ Bad:
The system shall validate input, log the validation result, and notify the user of any errors.
✅ Good (EARS + INCOSE):
Requirement 1: When the user submits input, the system shall validate the data format.
Requirement 2: When input validation completes, the system shall log the validation result with timestamp.
Requirement 3: If input validation fails, then the system shall display specific error messages to the user.
❌ Bad:
The response time shall be less than 5.
✅ Good (EARS + INCOSE):
When the user requests a page, the server shall deliver the response within 5 seconds.
Use this comprehensive checklist for maximum quality:
Structure (EARS):
- Uses correct EARS pattern
- Keywords used properly
- Temporal ordering followed
- System name explicit
Content (INCOSE):
- Unambiguous language
- Verifiable/testable
- Complete information
- Consistent terminology
- Traceable to source
- Technically feasible
- Truly necessary
Language Quality (INCOSE):
- Active voice
- No escape clauses
- No passive constructions
- Measurable criteria
- Units specified
- No superfluous infinitives
- Grammatically correct
Best Practices:
- One requirement per statement
- Unique identifier assigned
- Properly categorized
- Reviewed by stakeholders
- Version controlled
| EARS Provides | INCOSE Adds | Combined Benefit |
|---|---|---|
| Structural patterns | Content quality rules | Well-formed, high-quality requirements |
| Temporal logic | Verification guidance | Testable specifications |
| Keyword consistency | Terminology standards | Uniform documentation |
| Pattern templates | Quality characteristics | Complete, traceable requirements |
| Easy adoption | Comprehensive guidelines | Professional requirements engineering |
Activities:
-
Form a Requirements Working Group
- Include requirements authors, reviewers, and key stakeholders
- Assign an EARS champion
-
Conduct Initial Training
- 2-hour workshop on EARS fundamentals
- Review the five patterns with examples
- Practice exercises transforming bad requirements to EARS
-
Create Organization-Specific Templates
- Develop fill-in-the-blank templates for each pattern
- Include domain-specific examples
- Create quick reference cards
-
Set Up Supporting Infrastructure
- Choose requirement management tool (if needed)
- Create requirement ID scheme
- Establish review process
Deliverables:
- Trained team
- Template library
- Quick reference materials
- Implementation plan
Activities:
-
Select Pilot Project
- Choose a small, manageable project
- Ensure team commitment
- Define success criteria
-
Apply EARS to New Requirements
- Use templates for all new requirements
- Conduct peer reviews for EARS compliance
- Document lessons learned
-
Transform Existing Requirements
- Select 20-30 existing requirements
- Rewrite using EARS patterns
- Compare clarity and quality
-
Collect Feedback
- Survey team members
- Identify pain points
- Gather improvement suggestions
Deliverables:
- Pilot requirements set
- Comparison metrics (before/after)
- Lessons learned document
- Updated templates based on feedback
Activities:
-
Refine Approach
- Update templates based on pilot feedback
- Create domain-specific examples library
- Develop advanced training materials
-
Train All Requirements Authors
- Conduct workshops across organization
- Provide hands-on practice
- Offer one-on-one coaching
-
Establish Standards
- Make EARS mandatory for new requirements
- Set quality gates in review process
- Define compliance metrics
-
Provide Ongoing Support
- Office hours for questions
- Internal community of practice
- Regular refresher training
Deliverables:
- Organization-wide standards document
- Training materials
- Examples library
- Support structure
Each template should include:
- Pattern name and description
- Syntax template with placeholders
- Domain-specific examples (3-5)
- Common mistakes to avoid
- Verification checklist
## Event-Driven Requirement Template
**Use when:** A discrete event triggers a system response
**Syntax:**
When <trigger>, the <system name> shall <system response>
**Fill-in Guide:**
- <trigger>: Specific event that activates this requirement (button click, message received, timer expires)
- <system name>: Explicit name of system/component
- <system response>: What the system must do (include timing, values, units)
**Examples for [Your Domain]:**
1. When the user clicks "Submit Order", the e-commerce system shall process the payment within 5 seconds.
2. When a sensor detects motion, the security system shall activate the alarm within 500 milliseconds.
3. When the download completes, the application shall display a success notification.
**Common Mistakes:**
❌ When the system is running... (This is a state, use "While")
❌ When the user wants to... (Be specific about the actual trigger)
❌ When clicked... (Include explicit trigger: "When the Save button is clicked")
**Verification:**
- [ ] Trigger is a discrete event (not a continuous state)
- [ ] System name is explicit
- [ ] Response is measurable
- [ ] Timing/values specified where relevantPart 1: Introduction (20 minutes)
- Why requirements matter
- Common requirements problems
- Introduction to EARS
- Benefits and adoption
Part 2: The Five Patterns (60 minutes)
- Present each pattern (10 min each)
- Definition and syntax
- When to use
- Good and bad examples
- Practice exercise
- Interactive Q&A
Part 3: Hands-On Practice (30 minutes)
- Provide 10 poorly-written requirements
- Teams transform them using EARS
- Groups present and discuss
- Instructor feedback
Part 4: Implementation (10 minutes)
- Template usage
- Review process
- Where to get help
- Next steps
Exercise Set 1: Pattern Identification
Identify the correct EARS pattern for each requirement:
1. "The system shall authenticate users."
Answer: Ubiquitous or Event-Driven (need more context)
Better: "When the user clicks login, the system shall authenticate the credentials."
2. "When low on fuel, the car should warn the driver."
Answer: State-Driven (continuous condition)
Better: "While fuel level is below 10%, the vehicle shall display a low fuel warning."
3. "If the user enters wrong password, lock them out."
Answer: Unwanted Behavior
Better: "If incorrect password is entered three times, then the system shall lock the account for 15 minutes."
Exercise Set 2: Requirement Transformation
Transform these requirements using EARS:
1. "The system processes payments quickly."
Answer: "When the user confirms payment, the system shall process the transaction within 3 seconds."
2. "Error messages should be displayed."
Answer: "If input validation fails, then the system shall display specific error messages below the relevant input fields."
3. "Premium users get extra features."
Answer: "Where premium subscription is active, the application shall provide access to advanced reporting features."
QVscribe
- Automated EARS templating
- Fill-in-the-blank scenario selection
- INCOSE compliance checking
- Quality analysis
- Integration with requirements tools
Jama Connect Advisor
- EARS pattern verification
- Real-time quality checking
- Integrated with Jama Connect platform
- INCOSE guideline compliance
- Team collaboration features
Visure Requirements ALM
- Predefined EARS templates
- AI-powered assistance (Vivia)
- EARS and INCOSE rule enforcement
- Customizable workflows
- Compliance management
RAT-AUTHORING Tool
- EARS pattern implementation
- Integration with any RMS
- Template-based authoring
- Quality metrics
Consider these factors:
- Integration: Does it integrate with your existing tools?
- Automation: What level of automation do you need?
- Team Size: Does pricing scale with your team?
- Training: How much training is required?
- Support: What support options are available?
- Compliance: Does it support your industry standards?
You can implement EARS successfully without specialized tools:
-
Use Templates in Document Processors
- Create Word/Google Docs templates
- Use styles for consistency
- Create macros for common patterns
-
Spreadsheet-Based Approach
- Requirement ID | Pattern Type | Requirement Text | Status
- Use data validation for pattern types
- Conditional formatting for quality indicators
-
Plain Text with Version Control
- Markdown files in Git
- Use templates for each pattern
- Code review process for requirements review
-
Collaborative Platforms
- Confluence/SharePoint with templates
- Wiki-based requirements
- Comment-based reviews
Structural Review:
- Correct EARS pattern used
- Keywords used properly (While/When/Where/If-Then)
- Temporal ordering followed
- System name is explicit
- One requirement per statement
Content Review:
- Requirement is verifiable
- All conditions clearly stated
- Triggers are specific
- Responses are measurable
- Units specified for all values
- No vague terms (fast, efficient, user-friendly)
- No escape clauses (if possible, where appropriate)
Language Review:
- Active voice used
- Consistent terminology
- Grammatically correct
- No passive constructions
- Clear and concise
Traceability Review:
- Unique ID assigned
- Source documented
- Category assigned
- Priority set
- Self-Review: Author checks against EARS patterns
- Peer Review: Colleague reviews for compliance
- Technical Review: Domain expert reviews for correctness
- Stakeholder Review: End users/customers validate intent
- Final Approval: Requirements lead approves
Track these metrics to measure improvement:
| Metric | Target | Measurement |
|---|---|---|
| EARS Pattern Compliance | >95% | % requirements following correct pattern |
| First-Pass Acceptance | >80% | % requirements passing initial review |
| Defect Density | <5 per 100 req | Defects found per 100 requirements |
| Review Cycle Time | <3 days | Average time from submission to approval |
| Requirement Volatility | <10% | % requirements changed after baseline |
1. Secure Leadership Support
- Present business case (reduced rework, lower risk)
- Show ROI from pilot project
- Get executive sponsorship
2. Communicate Benefits
- Clearer requirements = fewer defects
- Faster reviews = quicker delivery
- Better traceability = easier compliance
- Reduced training time for new team members
3. Address Resistance Common objections and responses:
| Objection | Response |
|---|---|
| "It's too rigid" | EARS provides structure while allowing flexibility in content |
| "We don't have time" | Initial investment saves time through fewer rework cycles |
| "Our domain is different" | EARS is domain-agnostic; adapt examples to your context |
| "Our customers won't like it" | Customers prefer clear requirements; EARS improves clarity |
4. Celebrate Successes
- Share success stories
- Recognize early adopters
- Publish metrics showing improvement
- Award "best EARS requirement" monthly
For Small Teams (5-20 people):
- Single training session
- Informal peer reviews
- Shared template library
- Weekly office hours for questions
For Medium Organizations (20-100 people):
- Multiple training sessions
- Formal review process
- Tool-supported templates
- EARS champions in each team
- Monthly community of practice meetings
For Large Enterprises (100+ people):
- Training program with certification
- Centralized requirements team
- Enterprise tool deployment
- Standards and governance board
- Dedicated EARS support team
- Integration with corporate processes
After Each Project:
- Conduct retrospective focused on requirements quality
- Identify EARS patterns that worked well
- Identify areas for improvement
- Update templates and examples
- Share learnings organization-wide
Questions to Ask:
- Which requirements had the most defects?
- Which EARS patterns caused confusion?
- What domain-specific examples should we add?
- How can we improve our templates?
- What additional training is needed?
Regular Template Reviews (Quarterly):
- Analyze requirement defect patterns
- Gather user feedback on templates
- Add new domain-specific examples
- Remove or clarify confusing examples
- Update based on EARS best practices
- Version and publish updated templates
Build an organizational knowledge base containing:
-
Pattern Library
- Template for each EARS pattern
- 10+ examples per pattern from your domain
- Anti-patterns (what not to do)
-
FAQ Database
- Common questions and answers
- Tricky scenarios and solutions
- Edge cases and how to handle them
-
Training Materials
- Presentation slides
- Video tutorials
- Practice exercises with solutions
- Case studies from your organization
-
Quality Metrics Dashboard
- EARS compliance rates
- Review cycle times
- Defect trends
- Before/after comparisons
EARS translates effectively across languages because of its structured approach.
1. Keyword Consistency Establish standard translations for EARS keywords:
| English | Spanish | German | French | Mandarin |
|---|---|---|---|---|
| While | Mientras | Während | Tandis que | 当...时 |
| When | Cuando | Wenn | Lorsque | 当 |
| Where | Donde | Wo | Où | 在...情况下 |
| If...Then | Si...Entonces | Wenn...Dann | Si...Alors | 如果...那么 |
| shall | deberá | muss | doit | 应 |
2. Structure Preservation Maintain the same clause ordering regardless of language:
- Pre-conditions first
- Trigger second
- System name third
- Response last
3. Translation Best Practices
- Translate each clause independently
- Preserve measurable values and units
- Keep system names in original language (if technical terms)
- Maintain temporal logic
- Verify with native speaker
English:
When the user clicks the save button, the application shall save the document within 2 seconds.
Spanish:
Cuando el usuario hace clic en el botón guardar, la aplicación deberá guardar el documento dentro de 2 segundos.
German:
Wenn der Benutzer auf die Schaltfläche Speichern klickt, muss die Anwendung das Dokument innerhalb von 2 Sekunden speichern.
French:
Lorsque l'utilisateur clique sur le bouton d'enregistrement, l'application doit enregistrer le document dans les 2 secondes.
EARS particularly helps teams where English is not the primary language:
- Clear Structure: Pattern templates reduce grammar confusion
- Consistent Format: Same structure reduces ambiguity
- Keyword Simplicity: Limited vocabulary to learn
- Translation Ease: Structure translates directly
- Quality Consistency: Same quality regardless of language proficiency
EARS enhances traceability through its structured approach.
Upstream Traceability (to sources):
Business Need → Stakeholder Requirement → System Requirement (EARS)
Example:
Business Need: Reduce customer wait time
↓
Stakeholder Req: System shall provide fast transaction processing
↓
EARS System Req: When the user submits a payment request, the payment system shall process the transaction within 3 seconds.
Downstream Traceability (to implementation):
EARS Requirement → Design Element → Test Case → Code
Example:
EARS Requirement: When the user clicks logout, the system shall clear all session data.
↓
Design: SessionManager.clearSession() method
↓
Test Case: TC-101: Verify session cleared on logout
↓
Code: logout_handler.py::clear_session()
EARS patterns enable automated traceability:
1. Parse Requirement Structure
When <trigger> → Maps to → Use Case Trigger
the <system> → Maps to → Component/Module
shall <response> → Maps to → Test Assertion
2. Generate Test Cases Automatically
EARS: When the user enters invalid email, the system shall display "Invalid email format".
Auto-generated Test Case:
Test ID: TC-REQ-123
Preconditions: User registration form displayed
Test Steps:
1. Enter invalid email (e.g., "notanemail")
2. Click submit
Expected Result:
Display message: "Invalid email format"
3. Link to Code Components
System name "authentication service" → maps to → auth_service module
Response "validate credentials" → maps to → validate() method
| Req ID | EARS Pattern | Business Need | Design Element | Test Case | Code Module |
|---|---|---|---|---|---|
| REQ-001 | Event-Driven | Fast login | AuthController.login() | TC-001 | auth.py |
| REQ-002 | Unwanted | Secure access | AuthController.lockAccount() | TC-002 | auth.py |
| REQ-003 | State-Driven | Session mgmt | SessionManager.monitor() | TC-003 | session.py |
EARS requirements can be systematically transformed into use cases.
EARS Component → Use Case Element:
| EARS Element | Maps To | Example |
|---|---|---|
| System name | Actor or System | "authentication service" → System |
| When/If trigger | Use Case Trigger | "user clicks login" → Trigger |
| While condition | Precondition | "while logged in" → Precondition |
| Response | Main Success Scenario step | "shall validate credentials" → Step |
Example EARS Requirement:
When the user clicks the checkout button, the shopping cart system shall calculate the total price including taxes and shipping.
Generated Use Case:
Use Case: Calculate Cart Total
Actor: User
Trigger: User clicks checkout button
Preconditions: Shopping cart contains items
Main Success Scenario:
1. System retrieves cart items
2. System calculates subtotal
3. System calculates applicable taxes
4. System calculates shipping cost
5. System displays total price
Postconditions: Total price calculated and displayed
EARS Requirements Set:
REQ-1: When the user clicks checkout, the system shall validate the cart contains items.
REQ-2: If the cart is empty, then the system shall display "Your cart is empty".
REQ-3: While items are in cart, when checkout is clicked, the system shall calculate the total.
REQ-4: When total is calculated, the system shall display the payment form.
Generated Use Case:
Use Case: Checkout Process
Actor: User
Trigger: User clicks checkout button
Main Success Scenario:
1. System validates cart contains items [REQ-1]
2. System calculates total price [REQ-3]
3. System displays payment form [REQ-4]
Alternate Flow 1: Empty Cart [REQ-2]
1a. If cart is empty
1b. System displays "Your cart is empty"
1c. Use case ends
Tool Capabilities:
- Pattern Recognition: Identify which EARS pattern is used
- Compliance Checking: Verify correct pattern structure
- Keyword Detection: Ensure proper keyword usage
- Completeness Analysis: Check for required elements
- Consistency Verification: Compare terminology across requirements
Example Automated Checks:
def validate_ears_requirement(req_text):
checks = {
'has_system_name': False,
'has_shall': False,
'pattern_identified': None,
'issues': []
}
# Check for system name
if 'the <system>' in req_text.lower():
checks['issues'].append("System name not specified (still using placeholder)")
# Check for shall
if 'shall' not in req_text.lower():
checks['issues'].append("Missing 'shall' - requirement may not be obligatory")
else:
checks['has_shall'] = True
# Check for multiple shalls
if req_text.lower().count('shall') > 1:
checks['issues'].append("Multiple 'shall' statements - split into separate requirements")
# Identify pattern
if req_text.lower().startswith('when'):
checks['pattern_identified'] = 'Event-Driven'
elif req_text.lower().startswith('while'):
checks['pattern_identified'] = 'State-Driven'
elif req_text.lower().startswith('where'):
checks['pattern_identified'] = 'Optional Feature'
elif req_text.lower().startswith('if'):
if 'then' in req_text.lower():
checks['pattern_identified'] = 'Unwanted Behavior'
else:
checks['issues'].append("If statement missing 'then' - incomplete pattern")
elif 'when' not in req_text.lower() and 'while' not in req_text.lower():
checks['pattern_identified'] = 'Ubiquitous'
return checksFrom EARS requirements, automatically generate:
-
Test Case Templates
EARS: When X happens, system shall do Y within Z time Test Template: - Setup: Prepare conditions - Action: Trigger X - Assert: Verify Y occurs - Assert: Verify timing <= Z -
Acceptance Criteria
EARS: While A is true, when B occurs, system shall C Acceptance Criteria: ✓ Verify condition A is detectable ✓ Verify event B triggers response ✓ Verify response C is measurable ✓ Verify response only occurs when A is true -
Boundary Tests
EARS: While temperature exceeds 80°C, system shall activate cooling Boundary Tests: - Temperature = 79°C → cooling off - Temperature = 80°C → cooling on - Temperature = 81°C → cooling on
AI Applications with EARS:
-
Requirement Suggestions
- AI suggests EARS pattern based on informal description
- Provides fill-in templates
- Offers similar examples from repository
-
Quality Improvement
- Identifies vague terms and suggests specific values
- Detects passive voice and suggests active alternatives
- Recommends terminology from project glossary
-
Completeness Checking
- Identifies missing preconditions
- Suggests timing requirements
- Highlights missing error handling
-
Automated Review
- Checks EARS compliance
- Verifies INCOSE rule adherence
- Generates review comments
Typical Patterns:
- Heavy use of state-driven requirements (flight phases)
- Complex requirements with multiple safety conditions
- Precise timing requirements
Example:
While the aircraft is in flight, if an engine failure is detected, then the flight control system shall transfer control to remaining engines within 500 milliseconds and alert the pilot.
Typical Patterns:
- Unwanted behavior requirements for safety
- State-driven for operational modes
- Precise measurement requirements
Example:
While in patient monitoring mode, if heart rate drops below 40 bpm, then the device shall trigger an audible alarm within 1 second and alert the nursing station.
Typical Patterns:
- State-driven for vehicle modes
- Event-driven for user interactions
- Complex requirements for safety systems
Example:
While the vehicle speed exceeds 30 mph, when the driver applies the brake pedal, the Anti-lock Braking System shall modulate brake pressure to prevent wheel lockup.
Typical Patterns:
- Event-driven for transactions
- Unwanted behavior for error conditions
- Precise value requirements
Example:
When a withdrawal request exceeds the account balance, then the system shall reject the transaction and display "Insufficient funds" to the user.
Typical Patterns:
- State-driven for power modes
- Event-driven for sensor inputs
- Timing-critical requirements
Example:
While in sleep mode, when motion is detected, the sensor shall wake the system within 100 milliseconds and transmit the event data.
| Pattern | Keyword(s) | Template | Use For |
|---|---|---|---|
| Ubiquitous | (none) | The shall | Always-active properties, constants |
| State-Driven | While | While , the shall | Continuous state dependencies, modes |
| Event-Driven | When | When , the shall | Discrete events, user actions |
| Optional Feature | Where | Where , the shall | Product variants, optional modules |
| Unwanted Behavior | If...Then | If , then shall | Errors, faults, exceptions |
| Complex | Multiple | Combine patterns | Multi-condition scenarios |
| Keyword | Meaning | Position |
|---|---|---|
| While | During continuous state/condition | Beginning (pre-condition) |
| When | At discrete event occurrence | Beginning (trigger) |
| Where | If optional feature present | Beginning (feature) |
| If...Then | In unwanted/error situation | Beginning (error trigger) |
| shall | Mandatory obligation | Before response |
| the | Explicit system identification | Before shall |
Structure:
- Correct EARS pattern
- Proper keywords
- Temporal ordering
- Explicit system name
Content:
- Verifiable/testable
- Measurable criteria
- Complete information
- No vague terms
Language:
- Active voice
- One "shall"
- Units specified
- No escape clauses
Always active? → Ubiquitous (no keyword)
Continuous state? → State-Driven (While)
Normal event? → Event-Driven (When)
Error/fault? → Unwanted Behavior (If...Then)
Optional feature? → Optional Feature (Where)
Multiple conditions? → Complex (combine)
| ❌ Avoid | ✅ Use Instead |
|---|---|
| quickly, fast | within X seconds |
| user-friendly | requiring no more than X clicks |
| efficient | using less than X memory/CPU |
| appropriate, reasonable | specific measurable criteria |
| if possible | remove escape clause, make firm requirement |
| Data shall be validated | System shall validate data (active voice) |
| System shall X and Y | Split into two requirements |
| When temperature is high | While temperature exceeds 80°C (be specific) |
- Active voice only
- No escape clauses
- Measurable criteria
- Include units
- One requirement per statement
- Consistent terminology
- Explicit system name
- Verifiable/testable
Ubiquitous: The mobile phone shall have a mass of less than 200 grams.
State-Driven: While battery is below 15%, the device shall display low battery warning.
Event-Driven: When save is clicked, the app shall save the document within 2 seconds.
Optional Feature: Where GPS is enabled, the device shall update location every 5 seconds.
Unwanted Behavior: If password is incorrect 3 times, then system shall lock account for 15 minutes.
Complex: While aircraft is on ground, when reverse thrust is commanded, the engine shall enable reverse thrust.
-
EARS provides structure without complexity
- Five simple patterns cover most requirements
- Intuitive keywords match natural language
- Minimal training required
-
EARS improves requirement quality
- Reduces ambiguity through consistent structure
- Eliminates common defects
- Enhances verifiability and testability
-
EARS enables better collaboration
- Consistent format aids communication
- Clear for technical and non-technical stakeholders
- Effective across languages and cultures
-
EARS integrates with industry standards
- Complements INCOSE guidelines
- Supports regulatory compliance
- Enables automated quality checking
-
EARS scales across organizations
- Works for teams of any size
- Applicable to any domain
- Supports both simple and complex systems
- Leadership Support: Executive sponsorship ensures adoption
- Proper Training: Invest in comprehensive training programs
- Good Templates: Domain-specific examples accelerate learning
- Tool Support: Consider tools but start simple
- Continuous Improvement: Evolve practices based on feedback
-
Learn the Patterns
- Study the five EARS patterns
- Practice with examples
- Transform existing requirements
-
Start Small
- Pilot with one project
- Gather feedback
- Refine approach
-
Build Templates
- Create pattern templates
- Develop domain examples
- Distribute to team
-
Establish Process
- Define review procedures
- Set quality standards
- Track metrics
-
Scale Gradually
- Expand to more projects
- Train more people
- Build organizational capability
Quality Improvement:
- Fewer requirement defects
- Reduced rework
- Higher customer satisfaction
Cost Reduction:
- Less time in requirements reviews
- Fewer design changes
- Reduced testing effort
Risk Mitigation:
- Clearer specifications
- Better traceability
- Improved compliance
Team Efficiency:
- Faster onboarding
- Better communication
- Consistent quality
Official EARS Information:
- Alistair Mavin's website: https://alistairmavin.com/ears/
- Original paper: Mavin, A., et al. (2009). "Easy Approach to Requirements Syntax (EARS)"
INCOSE Resources:
- INCOSE Guide for Writing Requirements (Version 3, 2019)
- INCOSE Requirements Working Group
Tools:
- QVscribe: Automated EARS templating
- Jama Connect Advisor: EARS compliance checking
- Visure Requirements ALM: EARS templates with AI support
Training:
- EARS workshops available worldwide
- University courses in requirements engineering
- Online tutorials and webinars
Ubiquitous: The web application shall support concurrent access by 10,000 users.
State-Driven: While a file upload is in progress, the application shall display a progress bar showing percentage complete.
Event-Driven: When the user clicks "Forgot Password", the system shall send a password reset email within 30 seconds.
Optional Feature: Where two-factor authentication is enabled, the system shall require a verification code after password entry.
Unwanted Behavior: If the database connection fails, then the application shall display a maintenance page and log the error.
Complex: While the user is logged in, when the session exceeds 30 minutes of inactivity, the system shall automatically log out the user.
Ubiquitous: The microcontroller shall operate on a power supply between 3.0V and 3.6V.
State-Driven: While in low-power mode, the device shall consume less than 10 microamperes.
Event-Driven: When an interrupt signal is received on GPIO pin 4, the processor shall execute the interrupt service routine within 50 microseconds.
Optional Feature: Where the external temperature sensor is connected, the system shall read temperature every 100 milliseconds.
Unwanted Behavior: If the watchdog timer expires, then the system shall perform a hardware reset.
Complex: While battery voltage is below 3.2V, if a high-power operation is requested, then the system shall reject the request and alert the user.
Ubiquitous: The VoIP system shall support the G.711 audio codec.
State-Driven: While a call is active, the system shall maintain less than 150ms end-to-end latency.
Event-Driven: When an incoming call is received, the system shall ring all registered devices simultaneously.
Optional Feature: Where call recording is enabled, the system shall store recordings in WAV format with 16-bit depth at 48kHz sample rate.
Unwanted Behavior: If network packet loss exceeds 5%, then the system shall switch to a lower bitrate codec.
Complex: While the SIP account is registered, when a call invitation is received, the system shall respond with a 180 Ringing message within 500 milliseconds.
Ubiquitous: The blood pressure monitor shall have an accuracy of ±3 mmHg.
State-Driven: While measurement is in progress, the device shall prevent user interface interactions.
Event-Driven: When the measurement is complete, the device shall store the reading with timestamp in non-volatile memory.
Optional Feature: Where Bluetooth connectivity is available, the device shall transmit readings to the paired smartphone app.
Unwanted Behavior: If the cuff pressure exceeds 300 mmHg, then the device shall immediately release pressure and display an error message.
Complex: While the patient is being monitored, if heart rate drops below 40 bpm or exceeds 150 bpm, then the device shall trigger an audible alarm within 1 second and log the event.