Skip to content
cccskills
FreePublished on GitHub

Single Purpose Variables

Use each variable for exactly one purpose - no hybrid coupling or hidden meanings

The English summary is being prepared. Showing the original description.

Run score Not tested

See how to install

Files included (1)

  • SKILL.md4.4 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Single Purpose Variables

Overview

Each variable should represent exactly ONE thing. No reusing for different purposes. No hidden meanings.

Core principle: If variable represents count sometimes and error other times, use two variables.

Baseline Violation: Hybrid Coupling

From baseline, agents use special values to indicate errors:

❌ Hybrid coupling (baseline):

def process_file_pages(filename):
    try:
        pages_processed = 0  # Count (integer purpose)
        # ... processing ...
        return pages_processed
    except:
        return -1  # Error flag (boolean purpose as -1)

Problem: pages_processed represents TWO things:

  • Non-negative integer = page count
  • -1 = error occurred

This is hybrid coupling: Variable moonlights as different type.

✅ Separate concerns:

def process_file_pages(filename):
    try:
        pages_processed = 0
        # ... processing ...
        return (True, pages_processed)  # Success, count
    except Exception as e:
        return (False, str(e))  # Failure, error message

Or raise exception:

def process_file_pages(filename):
    # Let exceptions propagate - no hybrid variable needed
    pages_processed = 0
    # ... processing (raises on error) ...
    return pages_processed  # Always a count, never an error

Common Hidden Meanings

❌ What agents naturally do:

page_count = 15  # Number of pages
page_count = -1  # Wait, now it means error!

customer_id = 1234  # Customer number
customer_id = 500001  # Wait, > 500000 means delinquent (subtract 500000)!

bytes_written = 1024  # Bytes written
bytes_written = -5  # Wait, negative means disk drive number!

✅ Separate variables:

page_count = 15
processing_failed = True  # Separate boolean for error state

customer_id = 1234
is_delinquent = False  # Separate boolean for status

bytes_written = 1024
disk_drive = 5  # Separate variable for drive number

Legitimate Variable Reuse

Good reuse (same purpose, same meaning):

# ✅ GOOD: total_sales used for multiple related calculations
total_sales = sum(sales)
average = total_sales / len(sales)  # Same value, same meaning
percentage = (total_sales / target) * 100  # Same value, same meaning

Bad reuse (different purposes):

# ❌ BAD: temp reused for unrelated purposes
temp = sqrt(b*b - 4*a*c)  # Discriminant
root1 = (-b + temp) / (2*a)
# ...
temp = root1  # Now reused for swapping (different purpose!)
root1 = root2
root2 = temp

✅ Separate variables:

discriminant = sqrt(b*b - 4*a*c)  # Clear purpose
root1 = (-b + discriminant) / (2*a)
# ...
old_root = root1  # Clear purpose (swapping)
root1 = root2
root2 = old_root

Quick Reference

ViolationExampleFix
Hybrid couplingcount=-1 means errorSeparate: count + error_occurred boolean
Hidden meaningsid > 500000 means delinquentSeparate: id + is_delinquent
Temp reusetemp for discriminant, then swappingUse: discriminant, old_root
State changesVariable means X, then means YTwo variables with clear names

Red Flags

  • Variable represents different types (integer sometimes, boolean as -1)
  • Special values have hidden meanings (-1, 0, null mean different things)
  • Reusing temp, result, value for unrelated purposes
  • Code comments explain "if X then it means Y, else Z"
  • Must remember what value currently means

Fix: Create separate variable with clear name for each purpose.

Real-World Impact

From Code Complete:

  • Hybrid coupling creates confusion
  • Even if clear to you, won't be to others
  • Extra variable costs nothing, clarity is priceless

From baseline:

  • Agent used -1 to indicate error in count variable (hybrid coupling)

With this skill: Separate variables for separate purposes.

Integration with Other Skills

For naming clarity: See skills/naming-variables - each purpose needs its own well-named variable

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Interactive idea refinement using Socratic method to develop fully-formed designs

The English summary is being prepared. Showing the original description.

obra/clank42Updated Oct 10, 2025

Receive and act on code review feedback with technical rigor, not performative agreement or blind implementation

The English summary is being prepared. Showing the original description.

obra/clank42Updated Oct 10, 2025

Comment WHY code exists and non-obvious decisions, not WHAT code does (mechanics)

The English summary is being prepared. Showing the original description.

obra/clank42Updated Oct 10, 2025

Replace arbitrary timeouts with condition polling for reliable async tests

The English summary is being prepared. Showing the original description.

obra/clank42Updated Oct 10, 2025

TDD for process documentation - test with subagents before writing, iterate until bulletproof

The English summary is being prepared. Showing the original description.

obra/clank42Updated Oct 10, 2025

Validate at every layer data passes through to make bugs impossible

The English summary is being prepared. Showing the original description.

obra/clank42Updated Oct 10, 2025

See all skills by obra

Report a problem with this skill