bdd-principles
Core BDD concepts, philosophy, and the Three Amigos practice
What this skill does
# BDD Principles Master the foundational principles and philosophy of Behavior-Driven Development. ## What is BDD? Behavior-Driven Development (BDD) is a collaborative software development approach that: - Bridges the gap between business and technical teams - Uses concrete examples to describe system behavior - Creates living documentation that serves as tests - Focuses on delivering business value - Promotes shared understanding through conversation ## Core Philosophy ### Discovery > Development > Delivery **Discovery**: Collaborate to understand requirements - Hold Three Amigos sessions - Explore with examples - Challenge assumptions - Build shared understanding **Development**: Implement guided by examples - Use examples as specifications - Automate examples as tests - Follow outside-in TDD **Delivery**: Validate against real behavior - Executable specifications provide confidence - Living documentation stays current - Regressions are caught early ## The Three Amigos A practice where three perspectives collaborate to explore and define features: ### 1. Business Perspective (Product Owner/BA) - What problem are we solving? - What value does it provide? - What are the business rules? ### 2. Development Perspective (Developer) - How might we build this? - What are the technical constraints? - What are the edge cases? ### 3. Testing Perspective (Tester/QA) - What could go wrong? - What are we missing? - How will we verify this works? ### Example Three Amigos Session **Feature**: Password Reset **Business**: "Users who forget their password need a way to reset it via email." **Developer**: "We'll need to generate secure tokens with expiration. How long should tokens be valid?" **Tester**: "What happens if they request multiple reset emails? Can old tokens still be used?" **Business**: "Tokens should be valid for 1 hour. Multiple requests should invalidate old tokens." **Developer**: "Should we rate-limit reset requests to prevent abuse?" **Tester**: "What if the email address doesn't exist in our system?" **Business**: "For security, show the same success message whether or not the email exists." **Outcome**: Concrete examples that become scenarios: ```gherkin Scenario: Request password reset with valid email Given a user account exists for "[email protected]" When I request a password reset for "[email protected]" Then I should receive a reset email And the reset link should be valid for 1 hour Scenario: Request password reset with non-existent email When I request a password reset for "[email protected]" Then I should see a success message But no email should be sent Scenario: Multiple password reset requests Given I have requested a password reset When I request another password reset Then the previous reset link should be invalidated And I should receive a new reset email ``` ## Living Documentation BDD scenarios serve as: 1. **Executable Specifications**: Automated tests that verify behavior 2. **Documentation**: Up-to-date description of how the system works 3. **Common Language**: Shared vocabulary between business and technical teams 4. **Regression Suite**: Safety net when making changes ### Example: Living Documentation ```gherkin Feature: Promotional Discount Application To attract customers and increase sales As a marketing manager I want to offer promotional discounts Rule: Percentage discounts apply to order subtotal Example: 20% off for orders over $100 Given I have a $150 order When I apply a "20% off" promotion Then my discount should be $30 And my order total should be $120 Rule: Minimum purchase amount must be met Example: Promotion requires $50 minimum Given I have a $40 order When I try to apply a "$50 minimum" promotion Then the promotion should not apply And I should see "Minimum purchase not met" Rule: Only one promotion per order Example: Cannot stack multiple promotions Given I have a $100 order And I have applied "10% off" When I try to apply "Free shipping" Then I should see "One promotion per order" And only "10% off" should be applied ``` ## Ubiquitous Language Develop and use a shared vocabulary: ❌ **Technical Jargon**: ``` "When the user submits the form, we validate the input, hash the password with bcrypt, insert a record into the users table, and return a 201 response." ``` ✅ **Ubiquitous Language**: ``` "When a customer registers, we verify their information, create their account, and send a welcome email." ``` ### Building Ubiquitous Language **Discover terms through conversation:** - What do you call this? - What's the difference between X and Y? - When does this state change? **Document terms in scenarios:** ```gherkin # Use "Member" not "User" (business term) Given I am a Gold Member # Use "Place order" not "Submit order" (domain term) When I place an order # Use "Pending" not "In progress" (system state) Then the order should be Pending ``` **Keep a glossary:** ``` Member: A customer with a subscription Guest: A customer without a subscription Order: A collection of items ready for purchase Cart: A temporary collection of items being considered ``` ## Example Mapping A workshop technique to explore features with examples: ### The Four Colors **Yellow Cards**: User Stories/Features **Blue Cards**: Rules (acceptance criteria) **Green Cards**: Examples (scenarios) **Red Cards**: Questions (uncertainties) ### Example Mapping Session **Story**: User registration **Rules** (Blue): - Email must be unique - Password must be strong - Age must be 18+ **Examples** (Green): - Register with valid details → Success - Register with existing email → Error - Register with weak password → Error - Register under 18 → Error **Questions** (Red): - Do we verify email addresses? - What defines a "strong" password? - Do we need parent consent for minors? ## Specification by Example Use concrete examples to drive development: ### Vague Requirement "Users should be able to search for products." ### Specification by Example ```gherkin Scenario: Search by product name Given products "Laptop", "Mouse", "Keyboard" exist When I search for "lap" Then I should see "Laptop" in results But I should not see "Mouse" or "Keyboard" Scenario: Search with no results Given products "Laptop", "Mouse" exist When I search for "phone" Then I should see "No results found" Scenario: Search is case-insensitive Given a product "Laptop" exists When I search for "LAPTOP" Then I should see "Laptop" in results ``` ## Outside-In Development Start from the outside (user-facing behavior) and work inward: 1. **Write a failing scenario** (acceptance test) 2. **Write a failing unit test** (for the layer you're working on) 3. **Write minimum code** to make unit test pass 4. **Refactor** 5. **Repeat** until scenario passes ``` Scenario (Acceptance) ─┐ ├─> Controller Test ─┐ │ ├─> Service Test ─┐ │ │ ├─> Code │ │ │ │ ├─ Service │ │ │ │ ├─ Controller │ │ │ │ │ Scenario Passes ───────┴────────────────────┴─────────────────┘ ``` ## BDD vs TDD **TDD** (Test-Driven Development): - Developer-focused - Tests implementation - Red-Green-Refactor cycle - Unit tests guide design **BDD** (Behavior-Driven Development): - Business-focused - Tests behavior - Conversation-Specification-Automation - Scenarios guide development **They complement each other:** - BDD: What should we build? (outside-in) - TDD: How should we build it? (inside-out) ## Key Principles 1. **Coll
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.