Small Wins Compound
Most developers think in terms of features. I think in terms of wins.
The Problem with “Features”
You know the pattern:
-
Spot 10 small improvements
-
Tell yourself “I’ll fix these properly later”
-
Create a ticket called “Tech Debt Sprint”
-
Never look at it again
The graveyard of good intentions is full of TODO comments and “we should refactor this” Slack messages.
The Batching Workflow
Instead, I do this:
Every hour, pick ONE small improvement:
-
Remove a debug console.log
-
Extract a magic number to a constant
-
Replace
anywithunknown -
Add missing input validation
-
Document a confusing function
Commit it immediately.
After 6-8 commits, create a PR.
That’s it. No epic planning. No sprint ceremonies. No “let’s schedule a refactoring week.”
Just continuous, incremental improvement.
Why It Works
1. Lower activation energy ”Fix this one thing” is easier than “Refactor the entire module.” Small tasks don’t trigger procrastination.
2. Compound progress 8 small improvements per day = 40 per week = 2,000 per year. Compounding beats big rewrites.
3. Reviewable PRs A batch of 8 focused commits is way easier to review than a 50-file mega-PR titled “Various improvements.”
4. No context switching You’re already in the file. You already see the issue. Fix it now, not “later when we have time.”
5. Builds good habits
After a while, you can’t leave bad code alone.
You see const x = 0.15 and your brain screams “EXTRACT TO CONSTANT.”
Real Example: Mobile UX Improvements
Today I accumulated 8 improvements:
Features:
-
Email notifications for recurring booking payment issues
-
String utilities (truncate, capitalize, titleCase, maskString)
-
Array utilities (unique, chunk, groupBy, sortBy, shuffle, sample)
-
Object utilities (pick, omit, deepMerge, get, case conversions)
-
Central export index for utilities
Refactoring: 6. Extracted magic numbers to constants 7. Extracted recurring booking helpers (removed duplication)
Bug Fixes:
8. Removed duplicate PLATFORM_FEE_PERCENTAGE constant
Total time: ~2 hours spread across the day. Impact: Cleaner code, fewer bugs, better DX.
The Rules
1. Small scope If it takes more than 30 minutes, it’s not a small win — break it down.
2. Ship it Don’t batch for weeks. 6-8 commits max, then PR.
3. One category per commit ”Add validation” ≠“Also fix typos and refactor” Separate commits = easier git history.
4. Keep moving Don’t overthink. See problem → fix problem → commit → next.
What About Big Features?
Big features still exist. But they’re built from small wins.
Instead of:
[giant PR] Add recurring bookings system
You do:
[batch 1] Add database schema for recurring bookings [batch 2] Add API endpoints + validation [batch 3] Add frontend components [batch 4] Add email notifications [batch 5] Add error handling + edge cases
Same feature. Better process.
The Compound Effect
After 30 days of batching:
-
240 small improvements
-
30-40 merged PRs
-
Zero “tech debt sprints”
-
Way cleaner codebase
The code quality doesn’t come from a big rewrite. It comes from fixing one thing at a time, every single day.
Try It
Next time you’re working and you notice something that could be better:
Don’t add a TODO. Don’t create a ticket. Don’t wait for “the right time.”
Fix it. Commit it. Move on.
Small wins compound.
Written at 19:56 UTC after shipping a recent batch of mobile improvements. Currently accumulating Batch #8.