- 01The idea of predecessor tasks
- 02I wrote a design page first
- 03What Notion’s built-in dependencies can do
- 04Built-in feature vs. homemade setup
- 05Overview of the homemade setup
- 06Steps you can copy
- 07The display rules I decided on
- 08Rules for completion and notifications
- 09Predecessors only for major projects
- 10Tracing predecessors in order via the API
- 11Where I tripped up with MCP and the API
- 12What to check before you start
- 13FAQ
- 14Official sources I referred to
- 15Wrapping up
Good morning, まさきん here.
When you run your household tasks in Notion, errands that have to happen in order are a pain. You cannot start one until the previous step is done, yet both end up side by side in “Do Today.” This time, I tried adding “predecessor tasks” to my Notion tasks, so the next one appears the moment the previous one is finished. Here is how I built it.
*This information is current as of publication. Please check the official websites for the latest terms.
- In Notion, you can build “show the next task when the previous one is done” with a self-relation + rollup + formula
- Notion’s built-in “Dependencies” feature is for drawing arrows on a timeline and shifting dates
- For removing tasks you cannot start yet from “Do Today,” I found a homemade setup easier to work with
- The steps come in four stages: add a relation, then a rollup, then a formula, then a filtered view
- Be careful when having AI create properties via MCP, as it can create duplicate properties
The idea of predecessor tasks
At home, we manage household tasks in a Notion Tasks database. Until now, though, there was no concept of “predecessor tasks.” Every task sat side by side, and I kept the order in my head.
For example, you cannot “fill out the form” until you have “requested the form.” I wanted the database itself to hold this kind of ordering information. What I wanted was just one thing: the instant the previous task is done, the next task shows up on the “Do Today” side. That is all.
I wrote a design page first
Instead of jumping in and adding properties, I first wrote a single design page. I listed the points I was unsure about there and settled them one at a time, question by question. Only after deciding did I start building.
Here are some of the things I went back and forth on. How much should tasks waiting on a predecessor be hidden? What should happen to the predecessor if the successor gets completed first? Should I be notified when a successor becomes ready to start? Should every task get predecessors? Putting these decisions into words up front makes it harder to waver during implementation, I find.
I also wrote about rules not being followed in my post counting 164 tasks. This time, I focused on “building what I decided into the system itself.”
What Notion’s built-in dependencies can do
Notion actually has a built-in feature called “Dependencies.” According to the official help center, you turn it on from the database settings by going to “More settings” and then “Dependencies.”
Once it is on, you can link tasks to each other in a linear chain. The official guide says that when you hover over a task in timeline view, an arrow appears on its right. You drag that arrow to connect it to another task. These dependencies are described as showing up only in timeline view.
Under the hood, it is built on top of a relation property. If there is no relation, you are asked to create one, and by default it is apparently a self-relation called “Dependencies.” In the English interface, it is said to create properties named “Blocked by” and “Blocking.”
For automatic date shifting, you choose from these three options.
- Shift only when dates overlap
- Shift while keeping the gap between items
- Do not shift automatically
You can also turn “Avoid weekends” on or off. If the previous task slips by a week, the following one slips by a week too. It is a feature suited to that kind of use.
Built-in feature vs. homemade setup
What I wanted was not a way to shift dates. I wanted to remove tasks I could not start yet from “Do Today.” So I compared the two.
| Item | Notion built-in dependencies | Homemade (relation + rollup + formula) |
|---|---|---|
| Where to set it up | Database settings, More settings, Dependencies | Add the properties yourself |
| How it looks | Arrows in timeline view | Visible as a property in any view, such as table or list |
| Automatic date shifting | Three options, plus an avoid-weekends setting | None (you would have to build it) |
| Whether the previous task is done | I found no status property described in the official help | Count unfinished tasks with a rollup |
| Removing from Do Today | I found no such feature described in the official help | Can be removed with a formula and a filter |
| Best suited for | Team schedules and timeline management | Choosing “what to do next” for individuals or households |
I think built-in dependencies are a tool for keeping schedules on track. On the other hand, many of my household tasks have no due date. So I wanted to see “can I start this right now” rather than dates. It is not that one is better, just that they serve different purposes, perhaps.
Overview of the homemade setup
For the homemade version, I added three properties to Tasks and fixed one existing formula. The only new additions were two relation properties and one rollup property.
| Property name | Type | Role |
|---|---|---|
| Predecessor tasks | Relation (self, two-way) | What to do before this task |
| Successor tasks | Relation (self, two-way) | What to do after this task |
| Open predecessors | Rollup | How many predecessors are not done yet |
| Ready status | Formula (existing, modified) | Adds the “waiting on predecessor” check |
A self-relation links pages within the same database. The official help center explains that turning on “Two-way relation” creates two separate properties. “Next task” and “Previous task” were given as examples. When you add to one side, the other side updates automatically.
Steps you can copy
If you are building this in a typical Tasks database, I think the following order is easy to follow. I am assuming your status has a “Done” option.
- Add a new property to Tasks and set its type to “Relation”
- For the target, choose the same Tasks database you are working in
- Turn on “Two-way relation” and name the properties “Predecessor tasks” and “Successor tasks”
- Create a formula property that returns 0 if done and 1 if not done (for example, “Unfinished flag”)
- Add a rollup that sums the “Unfinished flag” of the “Predecessor tasks”
- Name the rollup “Open predecessors”
- Create a “Ready status” formula that returns “Waiting on predecessor” if Open predecessors is 1 or more
- Add “Ready status is not Waiting on predecessor” to the filter of your “Do Today” view
- Do not add this filter to your per-project views
For steps 4 and 5, you can also count using only a formula. The official help center shows an example using .every() and current on a list of related pages. Either a rollup or a formula can count the status of predecessors.
One caution. According to the official help center, you cannot roll up a rollup. This is apparently to avoid circular references. It is safest to count a property that is not itself a rollup.
How the Ready status formula works
Our Tasks database already had a formula called “Ready status.” This time I added “Waiting on predecessor” to it. The idea is simple.
If Open predecessors is greater than 0, return “Waiting on predecessor.” Otherwise, return the existing result as is. Doing it in this order means you do not break your existing rules. An example formula looks like this.
if(prop("Open predecessors") > 0, "Waiting on predecessor", existing check)
Replace the “existing check” part to fit your own Tasks database. I think the trick is to check for waiting on predecessor first.
The display rules I decided on
Here are the display rules I settled on in the design page. Deciding up front what goes on which screen keeps you from getting lost with filters.
| Screen | Tasks waiting on a predecessor |
|---|---|
| Do Today | Hidden as a rule. Only those due today or earlier appear faded at the bottom |
| Doable Today | Hidden |
| On mobile | Hidden |
| By project | All shown |
I decided not to completely hide those due today or earlier. If something is due and you cannot see it, you will not notice it. Still, they are not the main focus, so they sit faded at the bottom.
To do something similar with Notion views, you can use advanced filters. The official help center says filter groups let you combine AND and OR. Apparently you can nest them up to three levels deep.
Once you start running household errands from your phone, it becomes the tool for coordinating the family. At that point, it is worth reviewing your phone bill once too.
Clicking this opens the Rakuten login page. Once you log in, you’ll see the campaign details.
Rules for completion and notifications
When a successor is completed first
In reality, a successor sometimes gets finished while its predecessor is still open. Like when you went ahead and filled out the form first. In that case, I decided not to automatically mark the predecessor as done.
Instead, it asks me at the moment I complete the successor. There are three choices: “Complete together,” “Skip,” and “Keep.” I do not touch it automatically because only a person can tell whether the predecessor’s actual work is really finished.
No notifications, just a toast
Even when a successor becomes ready to start, I do not send a Telegram notification. This was another point I went back and forth on in the design page. Adding more notifications might bury the important ones.
Instead, my homemade mobile screen (a PWA) shows a toast. When I complete a predecessor, it simply shows “Next: [task name]” at the bottom of the screen. By the way, I named this PWA Kairos. It means “the opportune moment,” which I think fits the feeling of a predecessor finishing and the next task getting its turn.
I have also written about my morning routine in my post on the daily briefing. Apart from notifications, a lot of information is fine to see just when you open the screen.
Predecessors only for major projects
I decided to add predecessor tasks only for major projects. And even then, I link them one by one, question by question. I did not have AI guess and attach them to everything in bulk.
If you attach them in bulk, it is hard to notice when a wrong order slips in. Since tasks waiting on a predecessor disappear from the list, a mistake can hide a task you need. So I felt this was a place worth spending the effort.
Tracing predecessors in order via the API
I also added one function to my own small API. For a given task, it returns its unfinished predecessors in order. It follows the predecessor’s predecessor, and that one’s predecessor, up to a depth of 10.
I also added cycle detection so it stops if it hits a loop. That is the case where A’s predecessor is B and B’s predecessor is A. I tested it with three test tasks, A to B to C. Once testing was done, I deleted the test tasks.
Where I tripped up with MCP and the API
This is where I spent the most time. When I created properties through Notion’s MCP (a connection that lets AI operate Notion), a few unexpected things happened.
- Creating a two-way relation with MCP DDL produced duplicate pairs like “Predecessor tasks 1” and “Successor tasks 1”
- When I tried to fix it by renaming, a “Predecessor tasks 2” appeared as well
- The rollup ended up attached to the successor side instead of the predecessor side
- Changing the formula failed with a “Type error”
- The formula contents could not be read from MCP, so I checked them with the REST API
In the end, I cleaned things up by deleting the extra properties and renaming. I fixed the formula with a PATCH request to Notion’s REST API.
According to the official documentation, updating data source properties lets you add, delete, and rename properties. Sending null as the value deletes that property, and sending a name renames it. Renaming apparently does not change the ID.
Formulas are specified as a string called expression. The docs say an expression that cannot be parsed returns a validation_error. Saved formulas reference properties by ID, so they are said not to break even if you rename things later.
For a two-way relation, set type to dual_property; for one-way, use single_property. The related database also needs to be shared with the integration. If sharing is incomplete, relations can apparently appear empty. Rollup results are also said to be incomplete in that case.
If you create properties via AI, I recommend always checking the property list with your own eyes in the Notion interface. It is reassuring to check that no properties with the same name plus a number have multiplied, and which property the rollup got attached to.
What to check before you start
If you are going to build this, checking the following points first should make things go more smoothly.
- Whether you have a status or checkbox that can tell when a task is done
- Whether you have decided if you want to shift dates or remove tasks from the list for today
- Whether you have separated screens that hide waiting tasks from screens that show everything
- Whether you have decided what happens when a successor is completed first
- If you create properties with AI or the API, whether you can make time to check them in the interface afterward
FAQ
Q. Is Notion’s built-in dependencies feature not enough?
If you are managing schedules, the built-in dependencies may be enough. It has timeline arrows and automatic date shifting. On the other hand, say you want to remove tasks you cannot start from your list. In that case, I found having homemade properties handy.
Q. Which views show the built-in dependencies?
The official guide explains that dependencies are shown only in timeline view. If you want to see predecessors in a table or list, you would display the relation property.
Q. Is a two-way relation required?
It is not required, but it makes things easier. Turning on Two-way relation for a self-relation creates two properties, predecessor and successor. Fill in one, and the other fills in automatically.
Q. Can I build it with just a formula instead of a rollup?
I think you can. The official help center has an example formula that checks a list of related pages with .every(). That said, splitting it into separate properties lets you see the intermediate numbers. So it may be easier to verify.
Q. What happens if I complete a successor while its predecessor is still open?
Nothing happens automatically on the Notion side. In my case, I set it up to ask “Complete together, Skip, or Keep” right then. I do not mark the predecessor as done automatically.
Q. Can I rewrite formulas via the API?
According to the official documentation, a formula definition can be specified as a string called expression. An expression that cannot be parsed returns a validation_error. I fixed a formula that would not go through MCP with a PATCH request to the REST API.
Q. Should every task have predecessors?
Personally, I think major projects alone are enough. Tasks waiting on a predecessor disappear from the list, so attaching them by mistake can hide tasks you need. It might be best to start with things whose order is clear.
Official sources I referred to
- Sub-items and dependencies in Notion (Notion Help)
- Break tasks into manageable steps with sub-tasks and dependencies (Notion Guide)
- Notion 2.19 release notes (sub-tasks and dependencies)
- Relations and rollups (Notion Help)
- Formulas (Notion Help)
- Views, filters, and sorts (Notion Help)
- Update a data source (Notion Developers)
- Update data source properties (Notion Developers)
- Property schema object (Notion Developers)
- Notion MCP (Notion Developers)
Wrapping up
I built “show the next task when the previous one is done” in Notion with homemade properties rather than the built-in feature. I think built-in dependencies are an excellent tool for shifting schedules. But for choosing what to do next at home, a different approach fit better: counting open predecessors and removing tasks from the list.
When you build it, I recommend settling the rules on a design page first. Where things show up. What happens if a successor is finished first. Whether to send notifications. Once those are decided, adding the properties is not much work.
If you create properties via AI, just be sure to leave time at the end to check them in the interface. If your household has lots of errands that need to happen in order, it may be worth a try.
If you run your household from your phone, it is reassuring to take a look at your monthly phone bill too. I wrote about our family’s case in my post taking stock of our mobile lines.
Clicking this opens the Rakuten login page. Once you log in, you’ll see the campaign details.
This article contains affiliate advertising. If you sign up for a product or service through a link on this site, we may receive compensation from the partner company. The site operator is also an employee of Rakuten Group and may receive compensation through an employee referral program. The content and opinions here are based on the operator’s own experience and research regardless of any advertising relationship, but please read with the above in mind. See the Disclaimer & Affiliate Disclosure for details. Disclaimer & Affiliate Disclosure
This article includes machine-translated content. Please check the official Rakuten Mobile multilingual page for exact terms.
If you have concerns about Rakuten Mobile coverage or signal quality, you can consult through the official signal improvement request form .