Menu

Employment history timeline rules

Employment history timeline conventions decide how roles are ordered, dated and read. Here are the rules that hold, the gaps that are normal, and what to validate.

Published

  • test data
  • career
  • employment

Employment history timeline rules are the conventions that decide how a series of roles is ordered, dated and read — and they are weaker than most validation code assumes. Almost every hiring system in the world renders a work history as a list of dated intervals, and almost none of them agree on how much precision those dates need, which order the list runs in, or what a missing month means.

This article separates the conventions from the constraints: what a reader expects, what is genuinely impossible, and what merely looks unusual in a record that is otherwise fine.

How should a work history be written down?

Each role is recorded as a small set of facts rather than a sentence. The title held, the employer, and the months the role spanned — a start month and either an end month or an open end for a role that is still going.

That is the whole convention, and everything else a reader infers is derived from it. The length of each role comes from the two dates. The total length of the career comes from the intervals once they are sorted. The distinction between a current role and a finished one is carried entirely by whether the end is open. Nothing else needs to be stored, and everything else that is stored tends to drift out of agreement with the dates it was calculated from.

The word Present, or whatever the local equivalent is, is doing more work than it looks like. It is not a date and it is not an empty field. It is an assertion that the role has not ended, and code which reads it as a string, or writes an empty value in its place, will eventually produce a record claiming somebody left a job they are still doing.

Does every gap need to be explained?

No. A gap between two roles is a fact about a timeline, not a defect in it, and the reasons are ordinary: full-time study, caring for a family member, recovery from illness, a deliberate break, or simply the months a search takes.

What matters is that the gap is represented faithfully rather than smoothed over. Two habits cause most of the trouble. The first is back-filling: extending an end month forward so the timeline looks continuous, which invents employment during months when there was none. The second is stretching a start month backwards to absorb a gap, which invents seniority. Both produce a record that reads better and asserts something false.

The reader’s question is not whether gaps exist. It is whether each interval is accurate. In a synthetic record the same standard applies in reverse: a generated gap should exist because the timeline placed it there, not because a random date generator happened to land on one.

Is reverse chronological order universal?

It is the dominant convention in most hiring contexts — newest role first — and it is a convention rather than a rule. Academic CVs frequently run the other way, ordered by publication or by career progression. Some public-sector and regulated application formats ask for chronological order deliberately. Some cultures read a promotion story more easily from the bottom up.

Two consequences follow for anyone building or testing hiring software. The first is that a parser which assumes the top entry is the current role will mislabel profiles that are ordered differently, and the mislabelling will be silent: the top entry will simply be recorded as the current one. The second is that the order in the stored data should not be the order the data was entered in. Store the intervals with their dates and sort for display, so that a change of presentation convention never becomes a change of underlying data.

Aspect Common convention Where it varies
Order Newest role first Academic and some regulated formats run oldest first
Date precision Month and year Some formats ask for years only, others for exact days
Open end A word such as Present Sometimes an empty end field, sometimes a far-future sentinel
Gaps Recorded as they happened Occasionally compressed to hide a break
Concurrent roles Listed separately Sometimes merged into one entry with two employers

Every column on the right is a place where a real dataset will disagree with the assumption on the left.

Which overlaps are legitimate?

More than a validator usually allows for. Two roles can run at the same time when one of them is part-time, when somebody consults alongside a salaried job, when a person holds two teaching contracts, or when a freelance project simply outlasts a contract that started earlier.

That is why treating an overlap as proof of an error is a mistake, and why treating it as proof of a lie is worse. The honest reading is that an overlap is a question about the shape of the working week, and a record which knows the hours or the employment type can answer it. A record which stores only dates cannot, and should therefore not be allowed to make a decision about it.

There is a difference between an overlap and an impossibility, and the difference is not about how long the overlap lasts. A gap in coverage in the data model — a role with no start date at all, an end date that precedes its own start, an interval that extends past the present — is a defect. Two intervals sharing a month is not.

Why are exact days a trap?

Because the precision implies an authority the record does not have. Most people know the month they started a job. Far fewer know the exact day, and of those, most are reconstructing it from a first payslip or a contract they no longer hold.

Day-level precision creates three problems at once. It invites a parser to compare two dates exactly and report a one-day overlap as a conflict, when the real intervals never overlapped. It tempts whoever maintains the data to invent days that look tidy — the first of the month, the last of the month — which quietly turns an honest approximation into a fabricated fact. And it makes the timeline brittle: any rule about minimum tenure or maximum gap that is expressed in days will fire on noise.

Month-level precision is the honest resolution for a career record. It is also the level at which almost all human recollection agrees, and the level at which two independent descriptions of the same job tend to match.

For developers: interval validation and the open end

Represent a role as a half-open interval and everything downstream gets simpler. The start is a month, the end is either a month or a marker meaning not ended, and the interval covers the start month through the end month inclusive.

Three rules are worth enforcing at the boundary where data enters, because they are the ones that cannot be repaired later. A start must not be in the future unless the record explicitly describes a signed offer that has not begun. An end must not precede its own start. A role marked as current must carry no end at all, and a role that is not current must carry one. Everything else about a timeline is a matter of reading rather than of validity, and should be surfaced as information for a human rather than as a rejection.

Two smaller habits save a great deal of noise. Keep the open end as its own distinct value rather than as a blank, so that a genuinely unknown end and an ongoing role are never conflated. And when a rule needs a threshold — how short a role may be, how long a gap may run before somebody looks at it — keep the threshold in configuration rather than in the schema, because the number that suits one market will be wrong in the next. The same intervals read back out of a document are a separate problem, covered under resume parsing fixtures, where a month written in prose is the usual point of failure.

The profiles used to illustrate these rules are fabricated. The dates and intervals in them are invented, they describe no real employment history, and they exist only so that hiring software can be tested and demonstrated.

Next steps

Open the work history table in your test environment and sort the intervals by start month. Anything that lands out of order, or carries an end before its start, will show up in the first few rows. Then check the current role specifically: if it has an end date anywhere in the record, you have found a defect that no amount of field-level validation will catch. A career profile generator is a quicker way to produce a full spread of interval shapes — gaps, overlaps, an open current role — than editing rows by hand, and the timeline consequences of the education side of the same record are worth reading next.

Keep reading

Fake Resume & Job Data Generator guides