Estimate, Then Build With the Agent
Week 8 · From an approved design to an estimate you can defend and code you can explain
Week 8 · From an approved design to an estimate you can defend and code you can explain
The reminder's design is approved. The instructor asks: when can I use it? What do you answer?
SubmissionStatusService, a scheduler change, a dialog, their tests.The agent writes all of it in one session. By that arithmetic, the answer is "this afternoon."
20 rows in the test list. Each one is a behavior a person has to see pass.
6 open risks. One (80 emails during one request) can only be settled by measuring on staging.
The agent made the typing free and left everything else.
Pull requests 154% larger, 98% more of them.
Review time up 91%.
/implement writes the reminder in a few minutes. None of the estimate is those minutes.
When anyone can generate the code, the engineer a client trusts is the one whose dates hold.
Client needs it sooner? Cut scope, not the estimate.
The first 90 percent of the code takes the first 90 percent of the time. The remaining 10 percent takes the other 90 percent. (Tom Cargill, Bell Labs)
The gap is the finding. Clarify at 0.5 hours and at 4 means two people read two different use cases.
UC-AI-critique, not yet designed. Your range for clarify?
| Part | Basis | Hours |
|---|---|---|
| Clarify and design, left | Questions test already run | 0.5 to 1 |
| Build and review | Every diff read against the diagrams | 1.5 to 2 |
| Verify | 20 rows, latency on staging | 1 to 2 |
| Total | By analogy: #76, 3.5 h | 3 to 5 |
On the issue:
Estimate: clarify and design 0.5–1 h, build and review 1.5–2 h, verify 1–2 h
In every weekly activity report line about it:
UC-NOT-remind-non-submitters: reviewed the agent's diff against the sequence diagramCalibration ratio = hours logged since the estimate ÷ its midpoint.
Hofstadter's Law: it always takes longer than you expect, even when you take into account Hofstadter's Law.
The ratio corrects your bias. The retrospective improves your judgment.
A ratio of 2.3 with a reason earns the same as a ratio of 1.0.
Logging fewer hours to look accurate is inflating a weekly activity report, and it is academic dishonesty.
4 of Project Pulse's 266 backend classes declare a logger.
Ask the agent for a feature there, and it writes code that does not log. Whatever your codebase does by habit, the agent does at speed.
Code your team accepted without understanding it.
| Commit | What goes in it |
|---|---|
| Trunk | What many paths depend on, or existing users rely on, or is hard to undo |
| Security rule or migration | Alone |
| Each leaf | New code reached only through the new feature |
The agent pauses once, after the trunk. You read it before the leaves are built.
Can you say what changed and why, without asking the agent?
The trunk commit message the agent wanted: "Add some stuff." The one you merge: "Add SubmissionStatusService: who owes what this week."
{
"permissions": {
"deny": [
"Bash(git push --force *)",
"Bash(gh pr merge *)",
"Bash(gh repo delete *)",
"Read(**/.env)",
"Read(**/.env.*)",
"Read(**/secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)"
]
}
}Read deny rules for your secrets in the team's .claude/settings.json, by pull request..env. Watch it refused.The code is evidence, never authority.
@ExceptionHandler(Exception.class)
Result handleOtherException(Exception ex) {
return new Result(false, INTERNAL_SERVER_ERROR,
"A server internal error occurs.", ex.getMessage());
}A NullPointerException in production: the user sees one sentence, the operator sees nothing, and the browser gets the raw exception message.
LOGGER.error("Could not send the weekly reminder to {} in section {}",
student.getEmail(), section.getSectionName(), e);Right level, parameters, the exception object. And every failed student's email address in the log. Acceptable?
Safe exactly where the decisions they would make are already written down.
No more agents than pull requests you will review well today.
| Part | In /implement |
|---|---|
| Front matter | argument-hint: <UC-ID> |
| The argument | $ARGUMENTS, the use case ID |
| Preconditions | No design? Stop. Old conversation? /clear |
| Standing rule | "When in doubt, or when you see a better way, shout." |
| Phases | Read first; then plan, build, test, trace, open the pull request |
| Stop | Once, after the trunk |
.claude/skills/<name>/SKILL.md, about 20 lines./design and /implement for your repository./close-use-case: the closing checklist and the three retrospective questions./estimate: count the rows and risks; leave the hours blank for a person.A good programmer is someone who looks both ways before crossing a one-way street. A good skill checks its preconditions anyway.
v0.1.0, with release notes..claude/settings.json denies reads of your secrets.Co-Authored-By trailer.