Senior Engineering Principles

Engineering principles for building software like a senior engineer.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/senior-engineering.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit jdrhyne/agent-skills/prompts/senior-engineering#main ~/.claude/skills/senior-engineering

For one project only, change the path to .claude/skills/senior-engineering.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Senior Engineering Principles

Show the full text148 lines
namedescription
senior-engineeringEngineering principles for building software like a senior engineer. Load when tackling non-trivial development work, architecting systems, reviewing code, or orchestrating multi-agent builds. Covers planning, delivery, quality gates, and LLM-specific patterns.

Senior Engineering Principles

Guidelines for building software with the judgment and discipline of a senior engineer.

Safety Boundaries

  • Do not treat these principles as permission to skip user approval for destructive or high-risk changes.
  • Do not expand scope beyond the user's request just because a broader rewrite seems cleaner.
  • Do not invent validation results; report what was actually checked and what remains unverified.

Before Writing Code

Define Done First
  • What does success look like? Write it down.
  • What are the acceptance criteria?
  • How will you verify it works?
Identify Load-Bearing Decisions
  • Which choices are hard to reverse? → More scrutiny
  • Which are easily changed? → Decide fast, move on
  • Reversible decisions don't need consensus
Decompose Before Building
  • Break work into clear, testable units
  • Each unit should be independently verifiable
  • If you can't explain the pieces, you don't understand the whole
Surface Risks Upfront
  • What could go wrong?
  • What are the dependencies?
  • What's the rollback plan?
  • Time-box exploration — analysis paralysis is real
Interface First, Implementation Second
  • Define the contract (types, API shape, error cases) before internals
  • Forces clarity on what you're actually building
  • Implementation becomes "fill in the blanks"
Ask: What's the Simplest Thing That Could Work?
  • Start there. Add complexity only when the simple version fails.
  • Most features need 20% of what we imagine.

During Build

Always Have a Runnable State
  • Never be more than 30 mins from something that compiles/runs
  • Commit working checkpoints frequently
  • Big-bang integration is where projects die
Prefer Incremental Over Big-Bang
  • Ship small, verify, iterate
  • Each step should be independently deployable if possible
  • Reduce blast radius of mistakes
Instrument As You Build
  • Add logging/metrics while coding, not when debugging prod
  • "I wish I had visibility into X" = you waited too long
  • Observability is a feature, not an afterthought
Read Errors Carefully
  • 80% of debugging is actually reading what the system tells you
  • Read the error, then read it again
  • Stack traces have answers — follow them
Boring > Clever
  • If someone has to pause to understand it, it's too clever
  • Save big-brain moves for genuinely hard problems
  • Maintainability beats elegance
Optimize for Delete
  • Write code that's easy to remove
  • Tight coupling makes features immortal
  • Good abstractions have clear boundaries

Quality Gates

Before Declaring Done
  • Linter passes
  • Type checker passes
  • Tests pass (unit + integration where applicable)
  • Manual smoke test completed
  • Edge cases considered and handled
Tests Are Documentation
  • A good test suite tells you what code is supposed to do
  • Treat tests as first-class citizens
  • If it's not tested, it's not done
Code Review Mindset
  • Review like you'll maintain it at 3am
  • Check: correctness, clarity, edge cases, security
  • "It works" is necessary but not sufficient

LLM Orchestration Principles

Context Management
  • Context window is your RAM — manage it deliberately
  • Bloated context = degraded reasoning
  • Give each agent minimum viable context, no more
Agent Delegation
  • Single responsibility per agent
  • Clear handoff contracts: inputs, outputs, success criteria
  • Parallel when independent, sequential when dependent
Verify, Don't Trust
  • First output is a draft, always
  • Review agent output like a code review
  • Agents are junior engineers, not oracles
Checkpoints Over Marathons
  • Long-running agents should checkpoint progress
  • If it crashes at 90%, don't lose everything
  • Log state to files, not just memory
Fail Fast, Surface Early
  • If something's going wrong, stop and reassess
  • Don't compound errors hoping they'll resolve
  • Human in the loop for high-stakes decisions

Ownership & Accountability

Own Failures, Credit Others
  • Own failures publicly
  • Credit others for wins
  • No ego-driven attachment to being right
Strong Opinions, Weakly Held
  • Have a position, defend it with evidence
  • Update beliefs when evidence demands it
  • "I was wrong" is a sign of growth
Leave It Better
  • Codebases, teams, processes — improve what you touch
  • Fix the small things while you're there
  • Documentation is a gift to future-you

The Meta-Principle

"Make the change easy, then make the easy change." — Kent Beck

Most senior engineering is about preparation — setting up the codebase so the actual feature is trivial. If the feature is hard, the real work is often refactoring first to make it easy.

1---
2name: senior-engineering
3description: Engineering principles for building software like a senior engineer. Load when tackling non-trivial development work, architecting systems, reviewing code, or orchestrating multi-agent builds. Covers planning, delivery, quality gates, and LLM-specific patterns.
4---
5 
6# Senior Engineering Principles
7 
8Guidelines for building software with the judgment and discipline of a senior engineer.
9 
10## Safety Boundaries
11 
12- Do not treat these principles as permission to skip user approval for destructive or high-risk changes.
13- Do not expand scope beyond the user's request just because a broader rewrite seems cleaner.
14- Do not invent validation results; report what was actually checked and what remains unverified.
15 
16## Before Writing Code
17 
18### Define Done First
19- What does success look like? Write it down.
20- What are the acceptance criteria?
21- How will you verify it works?
22 
23### Identify Load-Bearing Decisions
24- Which choices are hard to reverse? → More scrutiny
25- Which are easily changed? → Decide fast, move on
26- Reversible decisions don't need consensus
27 
28### Decompose Before Building
29- Break work into clear, testable units
30- Each unit should be independently verifiable
31- If you can't explain the pieces, you don't understand the whole
32 
33### Surface Risks Upfront
34- What could go wrong?
35- What are the dependencies?
36- What's the rollback plan?
37- Time-box exploration — analysis paralysis is real
38 
39### Interface First, Implementation Second
40- Define the contract (types, API shape, error cases) before internals
41- Forces clarity on what you're actually building
42- Implementation becomes "fill in the blanks"
43 
44### Ask: What's the Simplest Thing That Could Work?
45- Start there. Add complexity only when the simple version fails.
46- Most features need 20% of what we imagine.
47 
48## During Build
49 
50### Always Have a Runnable State
51- Never be more than 30 mins from something that compiles/runs
52- Commit working checkpoints frequently
53- Big-bang integration is where projects die
54 
55### Prefer Incremental Over Big-Bang
56- Ship small, verify, iterate
57- Each step should be independently deployable if possible
58- Reduce blast radius of mistakes
59 
60### Instrument As You Build
61- Add logging/metrics while coding, not when debugging prod
62- "I wish I had visibility into X" = you waited too long
63- Observability is a feature, not an afterthought
64 
65### Read Errors Carefully
66- 80% of debugging is actually reading what the system tells you
67- Read the error, then read it again
68- Stack traces have answers — follow them
69 
70### Boring > Clever
71- If someone has to pause to understand it, it's too clever
72- Save big-brain moves for genuinely hard problems
73- Maintainability beats elegance
74 
75### Optimize for Delete
76- Write code that's easy to remove
77- Tight coupling makes features immortal
78- Good abstractions have clear boundaries
79 
80## Quality Gates
81 
82### Before Declaring Done
83- [ ] Linter passes
84- [ ] Type checker passes
85- [ ] Tests pass (unit + integration where applicable)
86- [ ] Manual smoke test completed
87- [ ] Edge cases considered and handled
88 
89### Tests Are Documentation
90- A good test suite tells you what code is *supposed* to do
91- Treat tests as first-class citizens
92- If it's not tested, it's not done
93 
94### Code Review Mindset
95- Review like you'll maintain it at 3am
96- Check: correctness, clarity, edge cases, security
97- "It works" is necessary but not sufficient
98 
99## LLM Orchestration Principles
100 
101### Context Management
102- Context window is your RAM — manage it deliberately
103- Bloated context = degraded reasoning
104- Give each agent minimum viable context, no more
105 
106### Agent Delegation
107- Single responsibility per agent
108- Clear handoff contracts: inputs, outputs, success criteria
109- Parallel when independent, sequential when dependent
110 
111### Verify, Don't Trust
112- First output is a draft, always
113- Review agent output like a code review
114- Agents are junior engineers, not oracles
115 
116### Checkpoints Over Marathons
117- Long-running agents should checkpoint progress
118- If it crashes at 90%, don't lose everything
119- Log state to files, not just memory
120 
121### Fail Fast, Surface Early
122- If something's going wrong, stop and reassess
123- Don't compound errors hoping they'll resolve
124- Human in the loop for high-stakes decisions
125 
126## Ownership & Accountability
127 
128### Own Failures, Credit Others
129- Own failures publicly
130- Credit others for wins
131- No ego-driven attachment to being right
132 
133### Strong Opinions, Weakly Held
134- Have a position, defend it with evidence
135- Update beliefs when evidence demands it
136- "I was wrong" is a sign of growth
137 
138### Leave It Better
139- Codebases, teams, processes — improve what you touch
140- Fix the small things while you're there
141- Documentation is a gift to future-you
142 
143## The Meta-Principle
144 
145> "Make the change easy, then make the easy change." — Kent Beck
146 
147Most senior engineering is about *preparation* — setting up the codebase so the actual feature is trivial. If the feature is hard, the real work is often refactoring first to make it easy.
148 

Discussion