Gallery
Coda Tutorial for Planning & OKRs
Share
Explore
Best practices

icon picker
Automate the OKR process

Have Coda do the heavy lifting and manual toil for you.
Running a planning process for a company is a stressful job. There is a lot of time critical communication involved. During planning week, my schedule used to be heavily modified, until I automated many of the routine tasks with Coda doc - allowing me to focus on the non-routine aspects of the job.
In this tutorial, we will show you how Coda can send reminders automatically on your behalf. We will also show you how AI can take the pain out of message writing.

⭐ What you’ll get

A page detailing your planning process.
Automated communications to your company when you enter a new planning phase.
AI-generated messages.

💼 What you’ll use

Table Views
Formulas
Automations
Pack
Coda AI

1. Structure your planning phases.

You probably details how your OKR process works on the Welcome page earlier in the tutorial. Let’s make sure we have a table that defines the different phases of planning. Let’s call it Planning phases.
Planning phases: Give an overview of the broader top-down, bottom-up, and integration phases that I described in
. Feel free to copy/paste from this writeup and modify as you see fit. Or use AI to help with the text—more on this later. Here is our table, feel free to use it:
Phase
Description
Link
1
Reflections
Before a new quarter starts we close the previous quarter with reflections. OKRs receive their final score, and team leads write a quick summary about highlights, lowlights, and lessons learned.
<link to reflection page in previous quarters’ OKR doc>
2
Top-down Guidance
Department leads kick off planning for the next quarter by sharing a writeup in this OKR doc with their teams. That writeup contains guidance for the priorities and the top objectives we ask each team to tackle.
<link to top-down guidance page>
3
Bottom-up Planning
We spend the majority of our planning time doing bottom-up planning, when each team crafts their OKRs and adds them to this doc.
<link to bottom-up planning page>
4
Integration
During the integration phase team leads and department leads review all their teams’ OKRs, with particular eye on priorities and overcommitment. We are also hosting a 3 hour bullpen meeting to efficiently resolve all outstanding planning issues. Everyone is required to be able to join this meeting if requested, and everyone can add topics to this meeting.
<link to integration page>
5
Final Presentation
We end planning by each team giving a 5 minute presentation of their plans for the coming quarter.
<link to presentation page>
6
Execution
With planning finished we work on executing the plans. Drivers keep their OKR progress and status updated, and escalate if the OKR gets stuck. Department and area leads regularly check in on their OKRs.
<link to dashboards page>
There are no rows in this table

2. Add timelines.

As you progress through planning stages, you should highlight which stage you’re currently in and when the next one begins. To do so, we’ll add start dates and duration for each phase. In step three, we’ll use this table to trigger automations
Create a view of the Planning phase definitions table you created in step one.
Type “/table” then select Planning phase definitions.
Rename this view Planning timeline
Group the Phase column by double clicking anywhere in the column, clicking Group, then selecting Group column across left.
Next, you’ll need to create a few different columns to set yourself up for building controls and automations.
Create the following columns (and column types):
Start date (date): Add the start date of each phase for the current quarter.
Duration (duration): Write in the number of days that the phase should last.
End date (date):
cmd + (ctrl on Windows) click the column headers fro Start date and the Duration columns
Then select Add calculated column.
Select State date + Duration
Add End date column.png
Current phase (checkbox): Use a formula to calculate this column. If the current date falls within the phase’s range, then the box should be checked. If not, then it should be empty.
Type “=(thisRow.Start Date <= Today() AND thisRow.End Date > Today())”.
You can add conditional formatting to this table so that it’s clear which phase you’re in without needing the extra columns.
To add conditional formatting, click Options in the top-right corner of the table, then select Conditional format.
Click Add rule and key on the Current phase column.
Create a rule that says if this row is checked, turn the entire row and its text yellow. To do this, click Checked, then select your color Yellow, and change Apply to to All columns.
Finish this step by hiding the following columns to clean up your table: Duration, End date, Current phase.
Planning timeline.png

3. Set up automations for your planning process.

Now that you have the foundation, you can set controls and automations that make your planning process smoother and more efficient. Let’s start with a simple formula.
Navigate back to the Welcome page.
Let’s create a formula that tells us what phase we’re in and how many days are left in the quarter.
Start a formula by typing “=” in the canvas.
Then use the Concatenate formula to write a dynamic message: If([Planning Phases].Filter([Current Phase]).Count()=0 , "We are currently outside the planning horizon of this doc", Concatenate("We are currently in the ", [Planning Phases].Filter([Current Phase]), " phase." ))
Planning phase formula.png
This should read, “We are in the Execution phase.” or something similar depending on the time of the quarter.
To make this standout, highlight the above message and format it an H2 heading (by highlighting the text and selecting H2 from the inline text bar) or put it in a callout.
In the planning cycle, it's helpful to over communicate what stage of the planning cycle you are in and provide instructions for the phase we just started. At Coda, we communicate this through Slack and email. I’ll walk through how to set up automated messages via Slack.
Create a new page and call it Communications.
Hide it so it doesn’t clutter your doc
Click on the three-dot menu next to the doc title (upper left)
Select Hide from the drop down
Create a new table and call it Planning Cycle Slack Messages.
In the table, create these columns (column types):
Phase (relation): This relation should look up the Phase column in the Planning Phase table.
Current phase (formula): You’ll pass through the checkbox column called Current phase that we created in . When this box is check, the automation will run. Select the column, type “=Phase.CurrentPhase” to reference the checkbox in the other table.
Message (canvas column): Draft your message for the start of each phase. You can also use AI to help you generate this message, which I’ll cover later in this step.
Send message (button): In the button’s settings use the Post Message action in the Slack Pack to send messages to a specific channel.
If you have followed every step of the tutorial up to here, you have the Slack pack set up already. If not, set up up now Add a private account: First, sign into your Slack account through the Pack to enable messages being sent on your behalf through the Pack. You can find out more
.
Content: Reference your Message column with =thisrow.Message
Channel or email: Type the name of your desired channel, ideally this would be your all hands channel, like #coda-all, for instance.
Results column: Select New Column so Coda will create a new column called Results that will store a confirmation if the message has been sent.
Important: Let’s disable the button if either of these two conditions are met
The message has been sent already. We can check this by checking if the Results column is not empty (blank). To do this click Advanced, choose Disable if > Add condition > Results > Is not blank.
Furthermore, we also want to disable the button if we are not currently in the phase the message is for. In the Advanced → Disable if section, click on Add condition > Current Phase > is equal to > Unchecked.
And, very important, we need to change the relationship between the two conditions (shown on the line between them) to “Or” not “And” (the button is disabled if either of them, not both of them, are met)
Communication table.png
You’ve done the dirty work of setting up your table. Now let’s set up the automation that makes it run on it’s own.
In the right hand corner of your doc, click the gear icon, then find Automations, and select Add rule.
Name the rule: Daily phase reminders
Under When, select a Time-based trigger. Select Day as we want to send every day. Select all weekdays under Repeat on and a time that would be ideal for teams (I am setting it to 9 am).
Under Then, select Push buttons from the dropdown and select Planning Cycle Slack Messages > Send Message
Finally, test the rule to make sure it works. And you’re all set!
Setting up Daily phase reminder automation.gif
As you will have noticed, we have set up this automation to send a daily message during the planning phase. That means if a phase spans multiple days, it will repeat the slack message every day. If you do not like that, you can adjust the disable condition for the button (disable the button if it is not the start date of the phase).

4. Using AI to craft your message.

Struggling with composing the message for each phase? Let Coda AI create a draft for you.
Right click on the Message column header. Click Add AI from the dropdown.
Now you’ll be asked to give your prompt to Coda AI. Try something like: “Write a Slack message to the company that we have now entered the @Phase stage of planning. Summarize what that means by including details from this doc. Include action items for drivers and team leads.”
AI for slack message generation.gif
Now you have your first draft of this message that you can tweak on your own, or you can modify the prompt to hone your AI generated result.

Now what?

Now that you have automations down, we have two ideas for you:
What else might you automate in Coda? Check out our to learn more.
Create a debugging page in your OKR doc. Head over for a walkthrough.

Share
 
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.