task management
productivity
organization
time management
task tracking

Keeping track of active task

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

Introduction

Keeping track of active tasks sounds simple until work starts moving between "planned", "in progress", and "done" faster than people can remember it. Whether you are building an internal tool or organizing a personal workflow, the important part is defining a clear state model and making it easy to query what is active right now.

This article shows a lightweight way to model tasks, mark them active, and list only the work that still needs attention. The same ideas apply to a spreadsheet, a web app, or a command-line utility.

Model the Task Lifecycle First

Most bad task trackers fail because they skip the state model. If every task is just a title in a list, you cannot answer simple questions such as "what is active?" or "what got stuck this morning?"

A practical model usually includes:

  • 'todo for work that has been captured but not started'
  • 'active for work currently being executed'
  • 'blocked for work that cannot continue yet'
  • 'done for completed work'

You can extend the model later, but starting with explicit states gives you something measurable. Once the state is explicit, "active tasks" becomes a query instead of a guess.

Build a Minimal Tracker

The Python example below keeps tasks in memory, records who owns them, and exposes a method that returns only active tasks. It is intentionally small, but the design is already useful: state changes happen through methods, timestamps are stored, and every active item can be listed at any time.

python
1from dataclasses import dataclass, field
2from datetime import datetime
3from typing import Dict, List
4
5
6@dataclass
7class Task:
8    id: int
9    title: str
10    owner: str
11    status: str = "todo"
12    updated_at: datetime = field(default_factory=datetime.utcnow)
13
14    def set_status(self, new_status: str) -> None:
15        allowed = {"todo", "active", "blocked", "done"}
16        if new_status not in allowed:
17            raise ValueError(f"unsupported status: {new_status}")
18        self.status = new_status
19        self.updated_at = datetime.utcnow()
20
21
22class TaskTracker:
23    def __init__(self) -> None:
24        self._tasks: Dict[int, Task] = {}
25        self._next_id = 1
26
27    def add_task(self, title: str, owner: str) -> Task:
28        task = Task(id=self._next_id, title=title, owner=owner)
29        self._tasks[task.id] = task
30        self._next_id += 1
31        return task
32
33    def start_task(self, task_id: int) -> None:
34        self._tasks[task_id].set_status("active")
35
36    def complete_task(self, task_id: int) -> None:
37        self._tasks[task_id].set_status("done")
38
39    def active_tasks(self) -> List[Task]:
40        return [task for task in self._tasks.values() if task.status == "active"]
41
42
43if __name__ == "__main__":
44    tracker = TaskTracker()
45    tracker.add_task("Draft release notes", "Mina")
46    tracker.add_task("Review billing bug", "Jules")
47
48    tracker.start_task(1)
49
50    for task in tracker.active_tasks():
51        print(task.id, task.title, task.owner, task.updated_at.isoformat())

Run this program and it prints only the tasks whose status is active. That one idea is the foundation for dashboards, stand-up reports, and work-in-progress limits.

Make Active Work Easy to Inspect

Tracking activity is not only about a status field. The supporting metadata matters because active work has to be understandable to someone other than the person doing it.

At minimum, capture:

  • who owns the task
  • when the status last changed
  • whether the task is blocked
  • enough description to know what "done" means

If you later store tasks in a database, the query stays simple. For example, in SQL you would ask for rows where status = 'active' and sort by the most recent update:

sql
1SELECT id, title, owner, updated_at
2FROM tasks
3WHERE status = 'active'
4ORDER BY updated_at DESC;

That query becomes far more useful if your application enforces valid status transitions. A task should not jump from todo to done without being started unless your workflow explicitly allows it.

Another practical improvement is to separate active from blocked. Teams often lump both together, which makes the active list look healthy even when nothing is actually moving.

Common Pitfalls

The first pitfall is using vague states. Labels such as "ongoing" or "working on it" are hard to query consistently and easy to interpret differently across a team. Choose a small set of states and define them clearly.

Another problem is allowing status to change without recording time. If you cannot tell when a task became active, you cannot identify stale work. Even a simple updated_at field is enough to flag tasks that have not moved in days.

Many trackers also fail by mixing task priority with task status. A high-priority task can still be todo, active, or blocked. Keep those concepts separate so your filtering stays predictable.

A more subtle mistake is treating the active list as a parking lot. If everything is marked active, the label has no value. Good task tracking limits active work to the things that are genuinely being worked on now.

Finally, avoid manual synchronization across too many tools. If one system says a task is active and another says it is done, trust in the tracker disappears quickly. Pick one source of truth and make other views read from it.

Summary

  • Active task tracking starts with a clear lifecycle, not with a UI choice.
  • A small set of states such as todo, active, blocked, and done is enough for most workflows.
  • Store owner and timestamp data so active work is easy to inspect.
  • Keep status separate from priority and from general notes.
  • Treat the active list as current work, not as a backlog of everything important.
  • Once the data model is sound, dashboards and reports become straightforward queries.

Free course
Beginner
7 lessons
2 hours
Tackling System Design Interview Problems

A short course that equips you with the skills to approach system design interviews methodically.

Start the free course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

All Rights Reserved.