pragmatic-programmer

Apply DRY, orthogonality, tracer bullets, and design-by-contract principles to software design reviews.

Updated Jul 8, 2026
One-click install
npx skills add https://github.com/HafidJoss/Lummy --skill pragmatic-programmer-hafidjoss
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: pragmatic-programmer
Source: https://github.com/HafidJoss/Lummy/tree/main/agent/skills/pragmatic-programmer
Command: npx skills add https://github.com/HafidJoss/Lummy --skill pragmatic-programmer-hafidjoss

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Software systems decay through duplicated knowledge, tight coupling, irreversible vendor decisions, and unreliable estimates. This Skill provides a structured framework of seven meta-principles from The Pragmatic Programmer to diagnose these issues and prescribe concrete fixes during architecture reviews, code design, and engineering culture discussions. ## Core Features & Use Cases - Seven Meta-Principles: DRY, orthogonality, tracer bullets vs. prototypes, design by contract, broken windows theory, reversibility, and estimation with knowledge portfolio management. - Scored Diagnostics: A seven-row quick diagnostic with a 10-point scoring rubric that names failing rows and maps each to a specific corrective action. - Deep Reference Guides: Five reference documents covering duplication types, contract patterns, tracer-vs-prototype decisions, reversibility patterns by layer, and PERT estimation with calibration. - Use Case: When reviewing whether a service can swap databases without touching business logic, use the orthogonality and reversibility diagnostics to identify coupling and prescribe the repository or adapter pattern. ## Quick Start Ask the assistant to evaluate your system architecture against the pragmatic programmer principles and score it using the quick diagnostic.

Frequently Asked Questions about pragmatic-programmer

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I apply DRY without over-abstracting similar code?

DRY applies to knowledge, not textual similarity. Two identical code blocks serving different business rules are not duplication; merge only when a change to one must change the other. The reference guide classifies four duplication types with mitigations for each.

What is the difference between a tracer bullet and a prototype?

A tracer bullet is thin but production-quality end-to-end code you keep and extend, while a prototype is a disposable exploration of one risky question. Use tracer bullets for integration risk and vague requirements; use prototypes for feasibility questions.

When should I use assertions versus error handling?

Use assertions for conditions that should never happen, such as violated invariants, and crash immediately. Use error handling for conditions that might happen, like network failures or invalid user input, and recover gracefully.

How do I make a database or vendor decision reversible?

Place the dependency behind your own interface using the repository or adapter pattern so business logic never calls vendor APIs directly. Apply the forking-road test: if you could not swap the dependency in a week, add an abstraction layer.

How do I give reliable software estimates?

Use PERT: compute (Optimistic + 4 x Most Likely + Pessimistic) / 6 and communicate ranges with confidence levels instead of single-point commitments. Decompose work into tasks of one day or less and keep an estimation log to calibrate your bias over time.

When should I not optimize for reversibility?

Skip abstraction for throwaway prototypes, trivially replaceable dependencies, or decisions with strong evidence of permanence. If the abstraction costs more than the future switch and change is unlikely, YAGNI applies.