后来我花了两个月反复试错,终于搞出一套适合开发者的时间追踪方案。核心就两个工具:Toggl Track负责精确记录,Notion负责项目管理和复盘。今天手把手教你复刻这套系统。
先看我的血泪教训。第一个坑:我试图把每个接口、每个bug都单独建一个任务标签,结果一天结束光整理标签就花了半小时。后来我悟了:对开发者来说,时间追踪的粒度应该是“任务块”,不是“代码行”。
(开篇:一张Toggl Track的周时间统计截图,显示按项目分类的柱状图,红色标记了几个严重超时的项目)
为什么选Toggl + Notion这个组合?
你可能会说:“用Toggl自带的项目管理功能不行吗?” 行,但不够爽。Toggl的项目管理太轻量了,没法做复杂的任务拆分和复盘。而Notion的数据库功能正好互补。
我总结的玩法是这样的:
– **Toggl负责“记”**:一键开始/停止,自动生成时间线
– **Notion负责“管”**:任务状态、优先级、复盘笔记全在这里
– **两个工具通过API打通**:Toggl的数据自动同步到Notion,生成周报
先搭Toggl:精确到秒的记录。
为什么这么写?
因为我发现自己经常高估专注时间。以为写了4小时代码,实际可能只有2小时在真正写代码。Toggl的数据会让你清醒——真的好用。
先搞项目结构。在Toggl里,我只有4个顶层项目:
– **开发**:写代码、调试、Code Review
– **会议**:站会、需求讨论、技术评审
– **文档**:写技术方案、API文档
– **杂项**:回邮件、面试、帮同事debug
每个项目下再细分标签,比如“开发”下面有:
– `frontend`:前端代码
– `backend`:后端代码
– `bugfix`:修bug
– `refactor`:重构
这步很关键:设置快捷键。我配了全局快捷键 `Ctrl+Shift+T` 快速打开Toggl,`Ctrl+Shift+P` 暂停当前任务。这样切任务时完全不用鼠标,大概2秒完成一次切换。
“`
# Toggl Desktop 配置示例 (Mac)
# 设置 -> 快捷键
# 显示/隐藏: Ctrl+Shift+T
# 开始/停止当前计时器: Ctrl+Shift+P
# 继续上次任务: Ctrl+Shift+R
“`
再搭Notion:从数据到决策
Toggl只解决了“记录”的问题,但怎么让数据产生价值?这才是关键。
(核心:Notion数据库的截图,左边是任务列表,右边是周报模板,中间有自动生成的图表)
为什么这么写?
因为单纯的数字没有意义,你需要把时间和任务关联起来,才能分析出真正的问题。
建个任务数据库。我用Notion的Database功能建了一个“任务看板”,字段包括:
– **任务名称**:如“实现用户登录接口”
– **项目**:关联Toggl的项目名
– **状态**:待开始/进行中/已完成/阻塞
– **预估时间**:以小时为单位
– **实际时间**:从Toggl同步过来
– **复盘笔记**:Markdown格式,记录踩坑和心得
用API自动同步。这步需要一点技术能力,但值得花时间。我写了一个Python脚本,每天凌晨自动从Toggl拉取前一天的数据,写入Notion。
“`python
# sync_toggl_to_notion.py
import requests
import json
from datetime import datetime, timedelta
# Toggl API配置
TOGGL_API_TOKEN = “your_toggl_api_token”
TOGGL_WORKSPACE_ID = “your_workspace_id”
# Notion API配置
NOTION_API_KEY = “your_notion_api_key”
NOTION_DATABASE_ID = “your_database_id”
def get_toggl_data():
“””获取Toggl前一天的工时数据”””
yesterday = (datetime.now() – timedelta(days=1)).strftime(“%Y-%m-%d”)
url = f”https://api.track.toggl.com/api/v9/workspaces/{TOGGL_WORKSPACE_ID}/reports/summary”
# Toggl API v9的Basic Auth:用户名是API Token,密码是”api_token”
# 这个设计有待改进,文档文档不够清晰,我试了3天才搞对
auth = requests.auth.HTTPBasicAuth(TOGGL_API_TOKEN, ‘api_token’)
params = {
“start_date”: yesterday,
“end_date”: yesterday,
“grouping”: “projects”
}
response = requests.get(url, auth=auth, params=params)
return response.json()
def write_to_notion(data):
“””将数据写入Notion数据库”””
# 遍历data中的每个项目,创建Notion page
for entry in data.get(‘data’, []):
page_data = {
“parent”: {“database_id”: NOTION_DATABASE_ID},
“properties”: {
“任务名称”: {“title”: [{“text”: {“content”: entry.get(‘title’, ”)}}]},
“项目”: {“select”: {“name”: entry.get(‘project’, ”)}},
“实际时间”: {“number”: entry.get(‘time’, 0) / 3600} # 秒转小时
}
}
headers = {
“Authorization”: f”Bearer {NOTION_API_KEY}”,
“Content-Type”: “application/json”,
“Notion-Version”: “2022-06-28”
}
response = requests.post(“https://api.notion.com/v1/pages”,
headers=headers,
json=page_data)
if response.status_code != 200:
print(f”写入失败: {response.text}”)
if __name__ == “__main__”:
toggl_data = get_toggl_data()
write_to_notion(toggl_data)
print(f”同步完成,共写入{len(toggl_data.get(‘data’, []))}条记录”)
“`
对了,最后提醒一句:这套系统不适合所有人。如果你只是偶尔记一下时间,用Toggl自带的就够了。但如果你想真正分析自己的工作效率,这个组合真的值得一试。