A spreadsheet arrives with four columns: date, status, amount, and id.
Nothing appears to be missing. Yet each header leaves a decision to the recipient. Is date the order date, invoice date, payment date, or month-end reporting date? Does status describe the customer, the order, or a review process? Is amount gross or net, and in which currency? What does id identify?
Three careful readers can make three reasonable interpretations and produce three different analyses. That is why a column header is more than decoration. It is part of the data contract.
The header is the visible edge of the schema
A header often travels farther than the documentation that explains it. It appears in CSV exports, spreadsheets, queries, dashboards, formulas, imports, and email attachments. For many recipients, it is the first—and sometimes only—description of a field they will see.
Even a basic CSV convention recognizes headers as field names. RFC 4180 describes an optional first row containing names corresponding to the fields in later records. More structured schema approaches go further. For example, the Frictionless Table Schema specification separates a required field name from optional elements such as a human-readable title, description, type, format, example, and validation constraints.
That distinction is practical. One short string should not have to carry every fact about a field.
A dependable field needs two related forms of identity:
- A stable, machine-facing name that formulas, queries, and imports can rely on.
- A clear human-facing label and definition that explain what the value means.
For example:
- Field name:
customer_created_at - Display label: Customer created date and time
- Definition: Timestamp when the customer record was first created in the source CRM, stored in UTC.
The name is consistent and usable in systems. The label reads naturally. The definition resolves details that neither could reliably express alone.
Specificity prevents reasonable mistakes
Short headers are tempting because they make a sheet look tidy. But generic names move interpretation work downstream, where it is easier to miss.
Consider this revision:
| Before | More specific |
|---|---|
date | invoice_date |
status | invoice_payment_status |
amount | invoice_amount_usd |
id | invoice_id |
The revised names tell the recipient which entity is involved, what event or attribute is being described, and, where needed, the unit of comparison.
This matters especially when a field can plausibly refer to several things. customer_status and order_status may both contain familiar values such as active or closed, but they represent different concepts. A report built with the wrong one may still look polished and internally consistent.
Qualifiers deserve the same care. employee_count_fte carries a different meaning from employee_count. inventory_snapshot_date is not necessarily the date an inventory record was entered. revenue_usd is clearer than revenue, but it still needs a definition if the measure could mean booked, invoiced, recognized, gross, net, annualized, or period-to-date revenue.
The goal is not to make every header lengthy. It is to preserve distinctions that change how someone calculates, compares, filters, or interprets the data.
Stable names, friendlier labels
A common source of unnecessary change is asking a single header to serve both machines and people perfectly.
A team may want to rename cust_id to customer_id because the latter is clearer. That can be a good improvement, but it may also disrupt formulas, imports, SQL queries, dashboard definitions, partner templates, and saved views that reference the older name. In some systems, a column rename changes only the table definition; dependent objects still need separate updates.
Separating stable names from presentation reduces that pressure. A consistent field name can remain in place while a report uses a more readable display label. Teams can improve wording for business readers without casually changing a shared interface.
Naming style itself is less important than consistency and support across the tools involved. Snake case, camel case, and labels with spaces can all work. The real question is whether recipients can identify the field reliably and understand its meaning.
A rename is a compatibility decision
Treat a header rename as a potential compatibility change, not as a formatting edit.
Before changing cust_id to customer_id, identify what refers to the old field: spreadsheet formulas, recurring imports, queries, reports, dashboards, data views, and external delivery templates. If active consumers exist, provide a transition path. That might mean a temporary alias, a versioned file, or advance notice with a defined effective date.
The stricter rule applies when the name stays the same but the meaning changes.
Suppose a monthly file contains revenue, and the finance definition changes from invoiced revenue to recognized revenue. Replacing the values while keeping the same header hides a material semantic change. A safer approach is to introduce a clearly named new field, document the change and effective date, and preserve or explicitly retire the old measure.
The header is a promise. Reusing it for a different promise creates confusion that is difficult to detect later.
A brief review before delivery
A lightweight header review catches many avoidable errors:
- Is every field name unique?
- Can a new reader identify the entity or event the field describes?
- Are material qualifiers clear, including unit, currency, time basis, population, or status subject?
- Does the field have a stable name, a readable label where useful, and a short definition when ambiguity remains?
- Is there a known owner for questions and changes?
Duplicate names are not merely untidy. They create ambiguity for people and can be rejected by data platforms. A schema is an agreement between data producers and consumers; field names and types are often elements that systems can enforce.
A header will never communicate the full contract. Calculation rules, refresh timing, provenance, exceptions, and access conditions usually belong elsewhere. But headers are the part most likely to travel everywhere with the data. They deserve the same care given to any other shared interface.
Morrow Creek Data Services handles paid research, cleanup, verification, and structured delivery projects.
Start a data project