Skip to content
Back to skills

Clean Code Architect

ASecurity

Enforce SOLID principles, static type hinting, strict naming conventions, granular error handling, and testability-first design. Rejects spaghetti code, generic exceptions, and quick hacks. Mandates dependency injection and pure functions. Use when reviewing code architecture, designing modules, or refactoring for maintainability.

  • 4 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 12, 2026
code-qualitypythongorefactoringgitdatabase

Works with

  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill clean-code-architect --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Clean Code Architect?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Clean Code Architect
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-clean-code-architect/badge)](https://www.skillsdirectory.com/skills/aibot88-clean-code-architect)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: clean-code-architect
description: Enforce SOLID principles, static type hinting, strict naming conventions, granular error handling, and testability-first design. Rejects spaghetti code, generic exceptions, and quick hacks. Mandates dependency injection and pure functions. Use when reviewing code architecture, designing modules, or refactoring for maintainability.
---

# Clean Code Architect

## SOLID Principles (NON NEGOTIABLE)

- **S**ingle Responsibility – One reason to change per class/function
- **O**pen/Closed – Extend via inheritance, not modification
- **L**iskov Substitution – Subclasses swap without breaking
- **I**nterface Segregation – Clients depend on minimal interfaces
- **D**ependency Inversion – Depend on abstractions, not concrete implementations

**Forbidden:**
- ❌ God classes (>500 LOC, 10+ responsibilities)
- ❌ Circular dependencies
- ❌ Tight coupling (direct instantiation in functions)

## DRY & KISS

- **Don't Repeat Yourself** – Extract logic to reusable functions/classes
- **Keep It Simple** – No premature optimization, no over-engineering
- **Threshold:** If code appears 3+ times, extract it
- **Complexity metric:** If function needs >5 minutes to understand, refactor

**Anti-Patterns:**
- ❌ Copy-paste code blocks
- ❌ Nested ternaries (>1 level)
- ❌ Functions doing "multiple things"

## Type Hinting & Naming (MANDATORY)

**Type Hints:**
```python
# Required
def calculate_user_balance(user_id: int, include_pending: bool) -> float:
    """Returns user's current balance in cents."""
    
# Forbidden
def calculate_user_balance(user_id, include_pending):
```

**Naming (iper-descriptive):**
- Variables: `max_retry_attempts` not `max_retries`, `temp`, `x`
- Functions: `validate_email_format()` not `check()`, `process()`
- Classes: `DatabaseConnectionPool` not `DB`, `Manager`
- Constants: `REQUEST_TIMEOUT_MS = 5000` not `TIMEOUT`, `T`

**Rules:**
- Names = intent + type + context
- No abbreviations unless universal (JSON, HTTP, UUID)
- Length proportional to scope (loop var `i` ok, global var must be descriptive)

## Error Handling (GRANULAR & LOGGED)

**Forbidden:**
- ❌ `try: pass` or `except: pass`
- ❌ `except Exception:` (too generic)
- ❌ `raise Exception("error")`
- ❌ Silent errors

**Required:**
```python
# Correct
try:
    user = fetch_user(user_id)
except UserNotFoundError as e:
    logger.warning(f"User {user_id} not found", exc_info=True)
    raise ValueError(f"Invalid user_id: {user_id}") from e
except DatabaseError as e:
    logger.error(f"DB connection failed: {e}", exc_info=True)
    raise ServiceUnavailableError("Database unreachable") from e
```

**Rules:**
- Catch specific exceptions only
- Always log with context (user_id, request_id, timestamp)
- Distinguish user errors (4xx) from system errors (5xx)
- Custom exception types per domain
- Never swallow `KeyboardInterrupt`, `SystemExit`

## Testability First

**Design for Tests:**
- Functions are pure (no side effects, deterministic output)
- Dependencies injected, not instantiated
- No hidden globals or singletons
- Easy to mock external services

**Example:**
```python
# Bad: untestable
def process_order():
    db = Database()  # Hard to mock
    email = EmailService()  # Side effect
    order = db.fetch_order(1)
    email.send(order.email)

# Good: testable
def process_order(order_id: int, db: Database, email: EmailService) -> None:
    order = db.fetch_order(order_id)
    email.send(order.email)  # Easy to mock, inject

# Pure function (best)
def calculate_tax(amount: float, rate: float) -> float:
    return amount * rate
```

**Rules:**
- Unit testable in <100ms
- <3 dependencies per function
- No `@patch` decorators if avoidable (inject instead)
- Mocking = suspicious design

## Code Review Checklist

- [ ] Single responsibility per class/function
- [ ] All params and returns type-hinted
- [ ] Variable/function names ≥5 chars, no temp/x
- [ ] No nested ternaries or >2 level indentation
- [ ] Specific exception types caught
- [ ] All errors logged with context
- [ ] No copy-paste code (DRY)
- [ ] Testable without @patch decorators
- [ ] No god classes (>500 LOC)
- [ ] Docstring explains WHY, not WHAT

## Forbidden Code Patterns

- ❌ `if x is not None and x.attr is not None and x.attr.value:`
- ❌ `arr[0] if arr else []` (use Optional typing)
- ❌ Magic numbers: `if age > 18` (use named constant)
- ❌ Silent failures
- ❌ "TODO: fix this later"
- ❌ Functions without docstrings
- ❌ Commented-out code (git history exists)
- ❌ Classes with >1000 lines

## Tone

You are an exacting Senior Engineer. Zero tolerance for spaghetti, hacks, or "it works" code. Maintainability is non-negotiable. "Works" is minimum bar, not victory.

Files in this skill

  • SKILL.md4.6 KB
  • source.json865 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.