Cross-Board Task Management — Designing My Work for Multi-Project Teams
The first project gets a board. The second gets another. The third ships silently while the first two drift. Per-board views fail the moment you have more than one project. “What am I supposed to work on today?” stops having an answer. We built a single My Work inbox with explicit attention rules across every board. The inbox is a function: who needs me, how badly, and across how many projects. This is the pattern and the implementation.
Most task trackers optimize for the single-board case. The board looks great in screenshots: clean columns, smooth drag-and-drop, satisfying confetti on Done. Then you join a second project, get added to a third, and suddenly the question “what should I work on today?” requires opening four browser tabs and mentally unioning the cards with your name on them.
This is the design pattern we landed on for cross-board task management, and the small set of rules that made it actually useful.
Why per-board views fail at scale
The per-board assumption is fine for a team of one. It breaks in three specific ways:
- Daily planning requires N tabs. Monday morning, you open every board you are on, scroll for your face, and copy tasks into a notebook. This is the workflow people pay Notion to escape.
- Overdue tasks hide. A task overdue on Board B is invisible when you are staring at Board A. The most important thing you could do today is the one you cannot see.
- Stale tasks pile up silently. Without a unified view, “I created this three weeks ago and forgot” is invisible until someone else complains.
The fix is not another board. It is a personal inbox that aggregates across all of them.
Attention rules as a single source of truth
The insight that made My Work click: do not sort by board, sort by attention state. A single module (attentionRules.ts in our codebase) categorizes every task into one of four buckets:
| State | Rule |
|---|---|
| Overdue | Has a deadline in the past, status is not Done |
| Stale | Open, not updated in 7+ days |
| Active | Open, updated in the last 7 days |
| Done | Recently completed (last 14 days) |
The rules are pure functions: (task) => attentionState. They are the single source of truth — the My Work page, the daily digest, the Telegram bot’s “what needs my attention” command, and the search filters all import and use them. Change the rule once, every surface updates.
Decision note: we considered putting the rules in the database per-user (configurable thresholds). Rejected for v1 — defaults that work for 90% of users beat configurability nobody touches. We may expose thresholds later if data demands it.
Cross-board search and saved views
A My Work inbox answers “what is mine.” Cross-board search answers “where is that thing.” Both matter.
Search needs to span every board the user can access and support filters that compose:
assignee:@mestatus:in-progresspriority:criticaltag:bugfrom:2026-06-01 to:2026-06-30
Saved views persist a filter combination for one-click recall (“My critical bugs this sprint”). Without saved views, users retype the same filter every Monday.
On-demand digests
The async version of My Work: a push notification or chat message that summarizes what needs attention. Two design choices that mattered:
- On-demand, not scheduled. Users ask for a digest when they want one (“/digest” in Telegram, or a button on the web). Scheduled digests get ignored; on-demand ones get acted on.
- Preference-driven scope. Daily vs weekly, all boards vs specific namespaces, only-overdue vs everything. The default is weekly + overdue-only + all boards; users opt into more.
Implementation notes
The query that powers My Work in our backend:
// TasksReader.findMyWork
async findMyWork(userId: number): Promise<Task[]> {
const boardIds = await this.boardsReader.findAccessibleBoardIds(userId);
return this.repo.find({
where: [
{ assigneeId: userId, board: In(boardIds) },
{ creatorId: userId, board: In(boardIds) },
],
order: { updatedAt: "DESC" },
});
}
Then attentionRules.categorize(tasks) buckets them. The frontend renders four sections: Overdue (red), Stale (amber), Active (default), Done (collapsed). Done is collapsed by default because most of the time you do not care what you finished — you care what is left.
FAQ
Q: How do I manage tasks across multiple boards or projects? A: Use a single My Work inbox that aggregates every task assigned to or created by you across all accessible boards, sorted by attention rules — overdue, stale, active, done.
Q: What is a My Work page in a task tracker? A: A personal cross-board view showing every task assigned to or created by you, regardless of board. Usually grouped by attention state.
Q: How do attention rules work in task management? A: Attention rules are pure functions that categorize tasks into states (overdue, stale, active, done) based on deadline and last-updated timestamps. They are the single source of truth used by My Work, digests, and notifications.
Q: How many boards is too many for one user? A: There is no hard limit, but once you are on 3+ active boards, per-board views stop being usable for daily planning. A unified inbox becomes essential around that point.
Q: Should digests be scheduled or on-demand? A: On-demand. Scheduled digests get ignored; users act on digests they ask for when they are ready to plan.
Conclusion
Cross-board task management is solved by a personal inbox with attention rules, not by another board. The rules are a single source of truth; every surface (web, bot, digest) imports them. Sort by attention state, not by project — that is the change that makes the inbox click.
→ Read about our unified assistant · Telegram bot task management guide · Try Kangram