Skip to main content

Time Tracking

Time tracking requirements and best practices for FLYPILOT projects.

Overview

All billable work must be tracked accurately. Time tracking ensures:

  • Fair client billing
  • Accurate project estimation
  • Resource planning
  • Team utilization insights

Systems by Organization

OrganizationSystemRoundingWorkspace
FLYPILOTToggl15-minuteFLYPILOT
OMG InteractiveToggl15-minuteOMG Interactive
Learned MediaHarvest6-minute (0.1 hour)Learned Media

Time Entry Requirements

Required Fields

Every time entry must include:

  1. Project: Correct client/project selected
  2. Task/Category: Type of work performed
  3. Description: Brief summary of work done
  4. Duration: Actual time worked

Description Format

[Ticket#] Brief description of work

Examples:
FLY-123 Implement user authentication form
FLY-456 Fix cart total calculation bug
FLY-789 Review PR and provide feedback

Minimum Description Quality

Good descriptions:

  • "FLY-123 Add password reset email template and API endpoint"
  • "FLY-456 Debug checkout flow, identify race condition in cart update"
  • "Client meeting: Review Q1 roadmap and prioritize features"

Poor descriptions:

  • "Development"
  • "Working on stuff"
  • "Meetings"

When to Track Time

Billable Activities

ActivityBillable
Feature developmentYes
Bug fixesYes
Code reviewYes
Client meetingsYes
Testing/QAYes
DocumentationYes
DeploymentYes
Client communicationYes

Non-Billable Activities

ActivityBillable
Internal meetingsNo
Training/learningNo
Administrative tasksNo
Tool setupNo
Personal breaksNo

Toggl Usage

Desktop App

  1. Select workspace (FLYPILOT or OMG)
  2. Select project
  3. Start timer with description
  4. Stop when task complete
  5. Round to nearest 15 minutes

Keyboard Shortcuts

ActionMacWindows
Start/StopCmd + OCtrl + O
New entryCmd + NCtrl + N
Edit currentCmd + ECtrl + E

CLI Integration

# Start tracking
toggl start "FLY-123 Implement feature" -p "Client Project"

# Stop tracking
toggl stop

# Current status
toggl now

Harvest Usage

Rounding Rules

Harvest uses 0.1 hour (6-minute) increments:

MinutesRound To
1-30.0
4-90.1
10-150.2
16-210.3
......

Entry Format

Task: Development
Notes: [LM-123] Implement contact form validation
Hours: 1.5

Weekly Requirements

Minimum Hours

  • Full-time: 40 hours/week
  • Part-time: As contracted

Entry Deadline

All time entries must be submitted by:

  • Daily: End of each work day (preferred)
  • Weekly: Friday 5pm (required)

Review Process

  1. Team lead reviews weekly entries
  2. Questions raised for unclear entries
  3. Corrections made before invoicing
  4. Entries locked after client approval

Common Issues

Forgot to Track

If you forget to track time:

  1. Review calendar for meeting times
  2. Check Git commits for development work
  3. Review Slack/email for communication time
  4. Estimate and add entry with note: "(estimated)"

Timer Left Running

If timer runs overnight:

  1. Stop the timer
  2. Estimate actual work time
  3. Adjust entry duration
  4. Add note if significant adjustment made

Wrong Project Selected

  1. Edit the entry
  2. Change to correct project
  3. Verify entry moved correctly

Reporting

Personal Dashboard

Review your time weekly:

MetricTarget
Utilization75-85% billable
Entry quality100% with descriptions
Submission100% by deadline

Project Reports

Access via Toggl/Harvest dashboards:

  • Hours by project
  • Hours by team member
  • Budget vs actual
  • Weekly trends

Automation

Git Commit Integration

Track time based on commits:

# In commit message, include time
git commit -m "FLY-123 Implement feature [2h]"

Calendar Integration

Sync calendar meetings to time tracker for automatic meeting time capture.


Data Sync Architecture

All time tracking data flows through Supabase as the central data lake.

Source Systems                    Supabase                    Consumers
-------------------------------------------------------------------
Harvest (LM time) --+
|--> UNIFIED DATA LAKE --> Dashboards
Toggl (OMG/FP time) --+ (source of truth) Reports
Analytics

Sync Commands

# Activate virtual environment first
source .venv/bin/activate

# Sync all departments (incremental by default)
python -m sync.cli sync --all

# Sync specific department
python -m sync.cli sync --department lm # Harvest
python -m sync.cli sync --department omg # Toggl
python -m sync.cli sync --department fp # Toggl

# Force full sync (disable incremental mode)
python -m sync.cli sync --all --force

Incremental Sync

Sync uses incremental mode by default to minimize API calls:

  • Tasks and time entries fetch only records modified since last_successful_sync_at
  • Timestamp tracked per source in sync_state table in Supabase

Automated Schedule (Mac Studio)

JobScheduleDescription
Quick SyncEvery 30 min, 9am-6pm, Mon-FriIncremental sync
Full SyncDaily at 6amComplete data refresh

Daily Habit

Start timer when you begin work, stop when you switch tasks. Small consistent tracking is easier than reconstructing your week.