Thesis: Custom fields are the automation write path. The Notes tab only shows Note records. If operators read Notes, upsert a titled Note that mirrors the fields — without abandoning the fields as source of truth.
What we shipped first
Fit summary and blocker landed on the person as structured fields. Pipeline review opened the Notes tab and saw nothing. The fields UI was a second click away. We had written for machines and forgotten the human mirror.
The working shape
Keep structured fields authoritative for automation. On save, upsert a Note titled for humans (for example “Prospect notes”) whose body restates the fields. Do not make free-text Notes the only write path.
// Structured prospect fields stay the write path; humans read a titled Note.
const prospectFields = {
fitSummary: "Series B · AWS · wants Guardrails before Q4 audit.",
blocker: "Security questionnaire stuck on evidence export.",
};
async function upsertHumanNote(personId, fields) {
// POST https://crm.example.com/notes
return {
id: "n_1",
personId,
title: "Prospect notes",
body: [
`Fit: ${fields.fitSummary}`,
`Blocker: ${fields.blocker}`,
].join("\n"),
};
}
await upsertHumanNote("p_1", prospectFields);
// Notes tab shows "Prospect notes"; fields remain authoritative for automation.
Checklist
- Decide which UI humans open during review — fields, Notes, or both.
- If Notes is the review surface, upsert a titled Note on write.
- Keep fields as the source of truth for any automation that reads them.
Related: the list omits the nested record. How we deliver: methodology · readiness.
Engineering commentary only — not audit, legal, or certification advice.