Branching ↗
Format: <type>/SPPLT-XXXXX
feature/New capability
enhancement/Improve existing feature
bugfix/Prod bug
defect/In-sprint, pre-prod
hotfix/Urgent prod fix
techdebt/Debt repayment
maintenance/Short-lived cleanup
PR Size Tiers ↗
| Tier | LOC | Failure rate |
| Elite | < 225 | < 1% |
| Good | 225–370 | 1–4% |
| Fair | 371–698 | 5–17% |
| Needs Focus | > 698 | > 17% |
Endpoint Test Matrix ↗
200Success — happy path payload
401Unauthorized — no/invalid auth
403Forbidden — auth'd but no permission
422Validation — bad input rejected
Decomposition Techniques ↗
- SPIDR Slicing — Spike · Paths · Interface · Data · Rules
- Hamburger Method — thinnest end-to-end slice first
- Walking Skeleton — full path with stubs, fill in later
- One Concern Rule — if you'd describe it with "and", split it
Code Review Lenses ↗
Pick 3–4. Each lens = focus + explicit exclusions.
| Code | Correctness · Security · Maintainability |
| Architecture | Failure modes · Migration risk · Operational complexity |
| Config | Security · Blast radius · Drift |
Bug Fix Workflow ↗
- Reproduce — get it failing locally
- Red — failing test for the right reason
- Diagnose — Route → FormRequest → Controller → Service → Model
- Green — minimal fix, run domain tests, check nearby
Common Bug Root Causes ↗
- Missing eager loading (N+1) — esp. Library relationships
- Wrong account scope, missing tenant filter
- FormRequest
authorize() gap
- Race conditions on shared state
- Type / null handling, implicit casts
- Queue job timeouts / memory from loading too much
Feature Flag Stages ↗
- Create — LaunchDarkly,
camelCaseKey
- Develop — wire with safe fallback
- Test — local → preview → prod
- Rollout — canary, then % of prod
- Cleanup — the stage that gets skipped
Semantic Versioning ↗
| Platforms | Packages |
| MAJOR | Start of year | Breaking change |
| MINOR | End of sprint | BC feature |
| PATCH | Within sprint | Bug fix |
Database Changes ↗
- Schema change → Laravel migration (
up() + down())
- Prod data change → OneTimeOperation class
- Modify column → repeat ALL attributes (else dropped)
- OTO files → keep after running. Audit trail.
- Never raw SQL against production
Backend Merge Gates ↗
- 1 approval
- Passing tests + endpoint matrix
- System tests < 2 seconds
./vendor/bin/pint --dirty before finalizing
- New business logic → Service (not new Action)
- New models → explicit
$fillable
- Auth: prefer
$user->can() over hasRole()
Build vs. Adopt ↗
Default to adopt. Build only for differentiation.
| 70%+ | of TCO is maintenance |
| 40% | of IT budget is tech debt |
| 35% | of large custom IT projects abandoned |
| 4–5× | revenue growth, top-quartile dev velocity |
Value Streams ↗
Product Streams
- Library · Learning Experience · Organized Learning
- Platform Access · VAR · Live-Training
- Performance Management · Talent Marketplace
Capability Teams
- Skills Validation · Core Platform Team · SP Admin
Trio Decision Rights ↗
| What problem | PM — business value |
| How to solve (UX) | Designer — UX integrity |
| How to build | Engineer — sustainability |
Engineer-Mode Behaviors ↗
- Boy Scout Rule — leave it cleaner than you found it
- Beyoncé Rule — if you liked it, put a CI test on it
- "What if we could…?" — expand the option space in discovery
- "What evidence would change your mind?" — unlock stalled debate
- Document non-builds — opportunity cost stays visible
- 1-on-1 question — "what did you make easier to change?"
Types of Work ↗
FeatureNew capability
EnhancementImprove existing
BugFound in production
DefectFound before production
Tech DebtQuality, no new user value
SpikeTime-boxed research → recommendation
SupportMigrations, conversions, localization
RewritePlanned redesign — Feature or Enhancement
Install Claude Skills ↗
User-level (recommended):
# Available in every working directory
git clone git@github.com:solidprofessorhub/sp-claude-skills.git \
~/.claude/skills/sp
Per-repo (locked version):
git submodule add \
git@github.com:solidprofessorhub/sp-claude-skills.git \
.claude/skills/sp