MediumModern OKRs in Coda. Beyond Legacy Templates and… | by Christiaan Huizer | Nov, 2026 | Medium
Sitemap
Christiaan Huizer

Christiaan Huizer

I write every week about how to Coda . You find blogs for beginners and experienced makers. Until 7 days after publication you read my blog for free. Welcome!

Modern OKRs in Coda — beyond Legacy Templates and Surface Level Tricks

Beyond Legacy Templates and Surface-Level Tricks

8 min read4 days ago

--

TL;DR: Legacy OKR templates often rely on fragile formulas, oversimplified schemas, and cosmetics posing as advanced functionality. Building an OKR system that actually scales requires a normalized relational backbone (DB Quarters, DB Teams, DB Objectives, DB Key Results), intentional semantic scaffolding for AI agents, and a user interface tailored to human comfort rather than pure technical minimalism.

Since spring this year (2026), I’ve been working on Objectives and Key Results (OKRs) with several clients. The core concept is straightforward: you define an objective and tie it to measurable, trackable key results. Ideally, an objective comes with a clear deadline, and you push to hit all the key results on time.

While every team sets up their OKR system a bit differently, the underlying logic is always roughly the same. In this post, I want to share a few practical insights to help you build yours.

To prepare for this article, I took a look at what Coda currently offers. There are already a few solid templates in the gallery, such as this one you can find here:

Press enter or click to view image in full size

I’ll focus on the template created for and used by Pinterest. Before diving into the actual setup, a quick note on what you typically find on these older Coda pages:

  • Broken links
  • Oversimplified setups
  • Outdated data architecture

Even formulas that look impressive at first glance often fall short:

thisRow.ModifyRows(
[All OKRs].[People Upvoted],
Splice(thisRow.[People Upvoted], 0, 0, User())
)

This snippet only appends users. It doesn’t remove a user when clicked again (as an upvote toggle normally should), nor does it disable the button once a vote is cast.

Below is an approach pitched as “advanced,” though in practice it is anything but. Almost everything labeled advanced in this template lives strictly in the presentation layer: a slider, a grouped view, and a few conditional colors on select lists.

Press enter or click to view image in full size
What ‘advanced’ looked like in 2022

Rather than dwelling on the past, let’s look ahead. Here are practical insights on how to set up a robust, modern OKR tracker that actually scales.

Data architecture is the Alpha & the Omega

Any OKR system benefits immensely from a normalized data model. Consider a foundation of dedicated base tables: DB Quarters (with explicit start and end dates), DB Teams, DB Objectives, DB Key Results, and DB Check-ins—all connected via bi-directional relations. In this architecture, objective progress is simply a rollup calculation (optionally weighted per KR), and company-to-team alignment is handled cleanly through parent-child relations.

Getting the data model right from day one is essential; everything else builds on top of it. Views, progress bars, and automated alerts are merely presentation and operational layers.

To be clear about alternatives: I recently tested tools like Zite, which is genuinely impressive. I prompted it for an OKR setup, received a series of sharp questions, and my answers guided the output. The proposed structure was remarkably good. That said, the moment you need to refine edge cases or adapt to the idiosyncratic workflows real organizations require, you find yourself locked in back-and-forth conversations with an LLM. While I haven’t stress-tested that limit yet, building directly with explicit relational tables in Coda still gives me far more speed, deterministic control, and flexibility.

Press enter or click to view image in full size
this is how Zite looks, very promising

Relate Pillars and Objectives

In the Pinterest demo doc, pillars link directly to quarterly objectives. While this is the simplest setup, it makes multi-horizon and company-wide objectives awkward to track.

A cleaner alternative is to introduce a dedicated table for global or company-level objectives, linked directly to your strategic pillars. This establishes a clean hierarchy: pillars define strategic themes, global objectives define long-term outcomes, and departmental or quarterly objectives roll up into them. If your planning cycle demands it, you can even insert an intermediate tier for annual goals.

It all comes down to what you need to track and how conversations flow across your leadership team. In practice, most teams I've worked with focus almost exclusively on quarterly cycles and skip the pillar abstraction altogether.

Bring in AI as a Coach

Most team members struggle to write crisp, measurable objectives and key results on their first pass. To help them articulate their contribution effectively, I integrate an AI feedback loop directly into the table.

Architecturally, the logic is driven by a centralized DB Prompts table. In the AI column of the objectives and the Key Results table, I reference the appropriate prompt template and pass the draft text dynamically.

Get Christiaan Huizer’s stories in your inbox

Join Medium for free to get updates from this writer.

Because some directors prefer working inside their own LLM harness—whether Gemini, Claude, or ChatGPT—I also include a "Copy Prompt" button. With a single click, it merges the rubric, system instructions, and draft objective onto their clipboard, letting them critique and refine the copy in whatever model they prefer.

Press enter or click to view image in full size
a prompt table is essential

Designing for AI-Readiness

AI-readiness is not just about feeding prompt instructions into an AI column to evaluate an Objective or Key Result. Nor is it just about giving users a “Copy Prompt” button so they can run instructions inside Claude, Google Antigravity, or whatever harness they use.

Real AI-readiness is about embedding explicit semantic context directly into the doc so any visiting agent immediately grasps how the workspace functions.

We do this at several structural levels:

  • Clear hierarchy: Every page starts with an intentional title and descriptive subtitle.
  • Page callouts: A dedicated callout box at the top of each page outlines its specific purpose and active components.
  • Numbered index and level pages: For top-level parent pages, we number them and explicitly map out what the nested subpages contain.

Providing this structural scaffolding upfront pays compound dividends. When an AI agent parses the document, it doesn’t have to burn context or make guesses about what each section represents. The doc architecture provides the mental model directly, which speeds up comprehension, reduces hallucination, and leads to much cleaner task execution.

Keeping this documentation fresh is essential — not only for the visiting LLM, but equally for human colleagues navigating a multi-layered doc. They immediately see why a table exists and how it fits into the broader operational flow. (In fact, Coda itself would greatly benefit from a native, dockable page-info panel for exactly this kind of metadata).

Below is how this looks in practice for one client workspace: three core frontend pages — each built around a single, dedicated workflow — followed by the backend index containing five numbered level pages and their underlying subpages holding all base tables supporting the OKR logic.

Press enter or click to view image in full size
adding context

Design for Humans, Not Just Architecture

A clean data architecture is indispensable for maintaining an orderly, scalable relational foundation. But when designing the interface, architecture must yield to human behavior.

Technically, Coda allows you to handle an entire multi-year OKR lifecycle on a single, hyper-efficient page. You could drop in an interactive control, let users select a quarter, and trigger a button that dynamically updates the view filter. From a pure engineering perspective, that is the most elegant, DRY (Don’t Repeat Yourself) approach.

In practice, for many end users, interactive dropdowns and view-filtering buttons add unnecessary friction. They don’t want to configure an interface at all.

That is why meeting your users where they are often means intentionally introducing multiple pages that are simply preset views of the same underlying table. Instead of one dynamic dashboard, you build dedicated quarterly pages: Q3 2026 Objectives, Q4 2026 Objectives, and Q1 2027 Objectives.

While there is no technical necessity for duplicating these front-end pages, there is a profound human one. Seeing a clearly labeled page in the doc navigation provides immediate cognitive orientation. Sometimes the best architectural decision you can make in Coda is knowing when to let go of technical perfection and optimize entirely for the everyday comfort of the people using it.

Cross-Team Delegation

In many organizations, objectives don’t live in isolated team silos; they cascade. You often have strategic, tactical, and operational tiers — or at least teams functioning at those three distinct horizons.

Ideally, an overarching strategic objective delegates outcomes to tactical teams, which in turn spawn concrete operational objectives and their corresponding key results. Progress then needs to flow back up: the completion rate of operational key results rolls up to update tactical milestones, which ultimately rolls up to move the strategic needle.

Managing this multi-tier rollup across separate team environments has historically introduced significant friction in Coda. Today, architecting this cross-team flow requires either Cross-doc syncs or custom webhook automations to pass updates back and forth — both of which carry latency, sync overhead, and maintenance complexity.

The real game-changer is just around the corner: workspace-level databases.

Once Coda rolls out native workspace-level tables, the underlying architecture becomes clean and unified. Instead of syncing copies between docs, a single master DB Objectives table can reside at the workspace root. Individual team docs simply pull in filtered, synchronized slices tailored to their specific tier—strategic, tactical, or operational.

Because the data ultimately lives in a single relational backbone, rollups across tiers become effortless, immediate, and native. We won’t need clunky synchronization pipelines or webhook listeners just to aggregate progress. It will eliminate doc bloat, drastically reduce maintenance, and allow every team to work in their own dedicated space while staying deterministically aligned with the broader organization.

Wrapping Up

If you are mapping out an OKR tracker or rethinking your operational meeting rhythms and want a solid sounding board, feel free to reach out. As an independent Coda consultant and data architect, I help teams translate messy goal-setting processes into clean, resilient systems that people actually enjoy using. Drop me a line, and let’s turn your ideas into a workspace that works.

About the Author

I hope this article was informative and helpful. Did it help you to solve a problem you unlike would have solved other ways? What about a donation?

My name is Christiaan, and I regularly blog about Coda. While this article is free, my professional services (including consultations) are not, but I’m always happy to chat and explore potential solutions. You can find my free contributions in the Coda Community and on X. The Coda Community is a fantastic resource for free insights, especially when you share a sample doc.

--

--

Christiaan Huizer
Christiaan Huizer

Written by Christiaan Huizer

I write every week about how to Coda . You find blogs for beginners and experienced makers. Until 7 days after publication you read my blog for free. Welcome!