Time
One temporal layer, so plan and actual can be drawn on the same row.
due_date column on a task and no start/end on a milestone. Time is a layer: every dated thing has a span in one canonical place, and the rest of the product reads through it.
Why that matters to you
an overdue item can turn critical and say why, instead of just sitting there; moving a milestone moves what hung off it, because the dependency is an edge in the same layer; a date is never duplicated, so it can never drift between two copies.
What lives on the timeline
Initiatives - the large change you are betting will move a product. The container between a product and its tasks: an intended outcome, tied to the epics and the gate that carry it. Milestones - checkpoints worth naming. Releases - which publish only when their launch gate passes, and record the moment they shipped as a fact rather than an edit. Tasks and epics - when they are dated. Most are not, and that is fine.