Refining
Refine code changes to make them easy to review.
Philosophy
Why Refine?
Refining exists because reviewers are humans with limited attention.
The core question isn't "what checks should I run?" but "would I want to review this?"
The Reviewer's Reality:
├── Context loading takes mental effort
├── Large changes exhaust attention
├── Mixed concerns require mental switching
└── Unclear changes create uncertainty
The Reviewer's Burden
Every code review requires:
- Context loading - Understanding what the change is about
- Verification - Checking if it's correct
- Risk assessment - What could this break?
Small, focused changes make this tractable. Large, mixed changes make it exhausting.
Cohesion Over Size
A 500-line focused change is often easier to review than a 200-line mixed change.
Why?
- Focused changes have one mental model
- Mixed changes require context switching for each concern
- Each concern should be independently verifiable
The "lines changed" heuristic is about cognitive load, not absolute limits. Ask: Could a reviewer hold this entire change in their head?
The Refining Mindset
Before committing or creating a PR, ask:
- Would I want to review this?
- Can I explain this in one sentence?
- If this breaks, is the blast radius obvious?
If yes to all → proceed. If no → refine further.
Core Concepts
Reviewability Factors
| Factor | What it measures | Why it matters |
|---|---|---|
| Cohesion | Single purpose? | Mental model simplicity |
| Size | Cognitive load | Reviewer attention span |
| Clarity | Is intent obvious? | Time to understand |
| Noise | Distractions present? | Focus degradation |
These aren't gates to pass. They're lenses to evaluate through.
When to Split
Not "must split" - but "consider splitting":
- Feature + refactor → Refactor can be reviewed independently
- Bug fix + new feature → Fix is urgent, feature can wait
- Multiple unrelated changes → Each deserves its own commit
The question: Would reviewing these separately produce better feedback?
Noise Detection
Noise makes reviewers work harder without adding value:
console.log,print,debugger→ Should these be here?TODO/FIXMEin new code → Is this intentional?- Commented-out code → Dead code or notes?
Note these to the user. Let them decide if intentional.
Three Modes
Commit
Validate staged changes, create commit.
1. Check staged: git diff --cached --stat
2. Assess: Cohesion? Size? Noise?
3. Generate message: Conventional Commits format
4. Commit: git commit -m "type(scope): description"
Never push unless explicitly requested.
Review
Assess a PR/MR or branch comparison.
1. Identify target: PR URL, branch, or current changes
2. Quick assessment: Cohesion, size, obvious issues
3. Detailed review: Focus on what linters miss
4. Report: Severity-based (🔴 Critical, 🟡 Important, 🔵 Suggestion)
Focus your attention where it matters most. Skip what automated tools catch.
See reference/review-strategies.md for project-specific approaches.
Create PR/MR
Generate reviewer-focused description.
1. Gather changes: git log --oneline main..HEAD
2. Assess: Is this PR-ready?
3. Generate: Title + description + context
4. Create: gh pr create / glab mr create
Description structure:
## Summary
[What and why in 1-2 sentences]
## Changes
[Key changes as bullet points]
## Testing
[How to verify this works]
## Reviewer Notes
[What to focus on, known risks, trade-offs]
See reference/description-guide.md for examples.
Understanding, Not Rules
Instead of memorizing thresholds, understand the underlying tensions:
| Tension | Resolution |
|---|---|
| Speed vs Quality | Quick changes need less refinement. Critical paths need more. |
| Completeness vs Focus | Better to have multiple focused PRs than one sprawling one. |
| Description Detail vs Reader Time | Enough to understand, not encyclopedic. |
| Stopping Early vs Proceeding | When in doubt, ask. User decides. |
On Line Counts
"400 lines" isn't a magic number. It's a heuristic for "about the limit of focused review."
- Simple rename across many files? 1000 lines might be fine.
- Complex algorithm change? 100 lines needs careful review.
Match review depth to change complexity, not line count.
Reference
Load these as needed, not upfront:
- reference/reviewability.md - Detailed criteria
- reference/description-guide.md - PR/MR examples
- reference/review-strategies.md - Approaches by context
- reference/review-checklist.md - Language-specific checks
- reference/impact-analysis.md - Blast radius techniques
The Goal
The goal isn't to follow a checklist. It's to create changes that reviewers can understand quickly and review confidently.
Reviewability is empathy. Put yourself in the reviewer's shoes.