Content Calendars That Survive Contact with Reality
Turn a colour-coded content calendar into a workflow of ideas, drafts, reviews and publishing, with owners and deadlines that adjust when plans slip.
In January, the content calendar is beautiful. Fifty-two weeks of planned posts, each cell colour-coded by theme, a tidy row of owners down the left. By March, half the cells say “TBC”, three posts have been pushed so many times that nobody remembers the original date, and the actual schedule lives in the head of whoever runs the newsletter.
The plan didn’t fail because people are disorganised. It failed because a grid of dates can’t describe work that moves.
A calendar is a view, not the system
The core mistake is treating the calendar as the place where content lives. A calendar is good at one thing: showing what’s scheduled when. It’s bad at showing what state a piece is in, who’s holding it up, and what happens to everything else when one item slips.
Flip it around. The system is a list of content pieces, each a record with a status, an owner, a target date and links to whatever it depends on. The calendar becomes one view of those records, filtered to show anything with a publish date. You can also have a board grouped by status, a list of everything waiting for review, and a view of each writer’s assignments. Same records, different questions.
This is the shift described in Replacing the “Status” Column: Designing Real Workflows with States and Transitions, applied to a team that moves faster and changes its mind more often than most.
Define the states honestly
Most content goes through roughly the same stages. Write them down as explicit states rather than a free-text “status” cell that says things like “nearly done??”.
| State | What it means | Who usually owns it |
|---|---|---|
| Idea | Someone suggested it; nobody has committed | Whoever proposed it |
| Planned | Accepted, has an owner and a target date | Editor |
| Drafting | Being written or produced | Writer |
| In review | Waiting for feedback or approval | Reviewer |
| Ready | Approved, assets done, waiting for its slot | Editor |
| Published | Live, with the link recorded | Editor |
| Parked | Deliberately paused or dropped, with a reason | Editor |
Two of these do a lot of quiet work. “Idea” keeps the backlog out of the calendar, so a suggestion doesn’t look like a commitment. “Parked” gives you a respectable place to put things that aren’t happening, instead of leaving them to rot in a cell marked “TBC”.
Resist adding more states unless a real handoff happens there. “Draft 2” and “Draft 3” are not states. They’re the same state, revisited.
Deadlines that move together
Here is where the spreadsheet really struggles. Say a post is due to publish on the 20th. Review takes three working days, so the draft is due on the 15th. Design needs two days after review, so assets are due on the 18th. In a sheet, those are three separately typed dates. When the publish date moves to the 27th, someone has to remember to update the other two. They won’t.
In a proper tool, store one anchor date (the publish date) and calculate the others backwards from it. Draft due equals publish date minus five working days; review due equals publish minus three. Change the anchor and the whole chain shifts.
You can also make slippage visible rather than silent:
- Keep the original target date in a separate field that doesn’t change. The gap between original and current target is your slippage, and it’s useful to see across a quarter.
- Flag items past their stage deadline. A draft still in “Drafting” two days after its draft-due date shows up on the editor’s list.
- Require a reason when a publish date moves by more than a week. One short line is enough. Patterns appear fast.
Dependencies and the domino problem
Content rarely stands alone. A launch post needs the product page to be live. A case study needs the client’s sign-off. A newsletter needs three other pieces to exist first.
Make those links explicit. A content record can link to the things it’s waiting on, and a simple rule can hold it in “Planned” until they’re done. When the client sign-off slips, you see immediately which pieces it affects, instead of discovering it the morning the post was meant to go out.
You don’t need sophisticated project-planning features for this. A “blocked by” link field and a view of blocked items covers most teams.
Reviews without the reply-all
Review is where most content stalls. The draft goes to four people by email, two reply, one replies to an older version, and the fourth is on holiday.
Treat review as a step with a named reviewer, not a group. One person is accountable for the decision; others can comment. Give the step a due date, and have the tool notify the reviewer when something lands in their queue. If you need formal sign-off (legal for a regulated topic, say), make that its own state with its own owner.
Approvals Without Email Chains: Building a Request-and-Approve Process covers the mechanics. The content-specific point is to keep comments attached to the content record, so the next writer can see why the last post on this topic was rewritten twice.
Record what happened after publishing
The calendar usually stops at “published”. Add a few fields beyond that: the live link, the channel, and a date to check results. Even without a dashboard, a list of what went out, when and where is worth having when someone asks “didn’t we write about this last year?”
Where to start this week
- List your real states. Look at your current calendar and write down every stage a piece actually passes through. Merge anything that isn’t a true handoff.
- Pick your anchor date. Decide which date drives the others (usually publish) and work out the offsets for each stage.
- Move the backlog out. Take everything marked “TBC” or “idea” and put it in a separate list. Your calendar should only show commitments.
- Add an original-date field to whatever you use now, even the spreadsheet. In a month, you’ll know how much your plans really slip.