Awesome Time Tracker for Azure DevOps
Log and track time spent on work items and generate comprehensive reports with full audit history.
This project is a derivative work based on the open-source plugin Time Tracker Logger by Micheal Balogun. More details on the original project can be found.
Version 1.0 delivers reliable draft time tracking for new tasks, automatic task progress synchronization, configurable report columns, date sorting, and Azure DevOps theme integration.
Features
Time Logged Summary on Work Items
- See time at a glance: Time logged is displayed directly on the work item form without clicking any tabs
- Shows total hours and contributors
- Quick link to edit time or navigate to full Time Tracking tab
Time Entry on Work Items
- Add time entries directly from any work item using the "Time Tracking" tab
- Quick-add buttons: +30m, +1h, +3h, +6h, +8 for fast time logging
- Configurable time increments (15 min, 30 min, or 1 hour)
- Add notes/descriptions for each time entry
- Simple, compact form that opens directly when you click Time Tracking
- Log time while creating a new Task; draft time is linked automatically after Azure DevOps assigns the work item ID
- See Original Estimate, Remaining Work, and Completed Work while logging time
- Use a Log Time surface that follows the current Azure DevOps theme
Daily Logging & Update Flow
- Log time per-day for a specific work item — each day's hours are tracked separately.
- When a user opens the Time Tracking tab, the input defaults to today's logged hours (if any) and the action button toggles between Add Time and Update Time depending on whether a daily entry already exists.
- All daily logs are visible in the "Daily Time Log" section on the work item for quick review.
- Saving or updating a daily log records an audit entry (previous → new hours) and notifies other open tabs so reports and work-item views refresh automatically.
- New-task time is stored separately from formal report data, so unsaved tasks never appear as work item ID 0.
- Draft migration is idempotent and retains the draft for retry if the first binding attempt fails.
Task Progress Synchronization
Completed Work is synchronized to the sum of all valid time logs for the Task.
Remaining Work is recalculated as max(Original Estimate - Completed Work, 0).
- An empty Original Estimate is treated as zero for calculation without overwriting the original field.
- Time remains safely stored if the Azure DevOps scheduling fields cannot be updated.
Audit Trail & History
- Full audit log: Track who updated time and when
- View change history showing previous hours → new hours
- See all notes/comments associated with each update
- Expandable history panel on the Time Tracking tab
Time Reports Hub
- Access via Boards > Time Reports
- Filter by date range, project, work item type, user
- Visual bar charts showing hours by user and work item type
- Summary cards with total hours, entries count, and averages
- Export reports to CSV for external analysis
- Detailed table with all time entries
- Correct local-date presets across time zones
- Sort Time Entries by newest or oldest date and remember the selection per user and project
- Choose visible columns with Column options
- Add standard Azure DevOps fields and project-specific custom fields to the table
- Export the current filtered, sorted, and visible report to CSV
New: Work Item ID Search
- Reports now support filtering by Work Item ID so you can quickly find all daily logs and audit history for a specific work item.
- Enter a work item ID in the report filters to scope charts and tables to that item.
- This search works in combination with existing filters (date range, user, project).
New: Remember Assigned To Filter
- Time Reports now remembers the last selected
Assigned To filter and restores it when the page is opened again in the same browser.
- Selecting
All Users clears the saved user filter.
New: Column Options and Date Sorting
- Keep Work Item, Hours, and Date visible as core report columns.
- Show or hide Type, User, and Description.
- Add readable standard and custom work item fields discovered from Azure DevOps.
- Work item fields are loaded in batches and cached for the current report session.
- CSV export follows the current table columns and date sort order.
Fixed: Date Presets and CSV Work Item IDs
This Month, This Quarter, and other presets now use the browser's local calendar date instead of a UTC conversion.
- CSV exports use a plain numeric
Work Item ID without a # prefix.
- Legacy ID 0 records are excluded from normal reports and exports.
Fixed: Time Entry Descriptions in Reports
- Notes entered while logging or updating time are now saved as the time entry description.
- The Time Reports > Time Entries table and CSV export now have description data available instead of falling back to
- for newly saved entries.
- Daily report rows now use each log's own description instead of repeating the latest description across every date for the same work item.
Getting Started
- Install the extension from the Visual Studio Marketplace
- Open any work item - you'll see a "Time Logged" section showing current time
- Click the "Time Tracking" tab to add or edit time entries
- Access Boards > Time Reports to generate reports across your project
How It Works
- Each user can log time against each work item (one entry per user per work item)
- Time entries are stored securely using Azure DevOps Extension Data Service
- All changes are tracked in an audit log with timestamps and user information
- Reports aggregate time across all users for comprehensive project tracking
Implementation notes:
- Daily logs are represented as an array of
{ date: string, hours: number, description?: string } on each user's TimeEntry record for a work item.
- The extension uses BroadcastChannel (with a localStorage fallback) to notify other open tabs when a time entry is created/updated; listeners reload data accordingly.
- The reports page accepts an optional
workItemId filter and queries aggregated entries by that ID for fast lookups.
- Unsaved work item time uses an isolated
PendingTimeEntries record with a migration token and seven-day expiry.
- Formal time records reject invalid work item IDs and report queries only include IDs greater than zero.
- Report column and sort preferences are scoped by user and project in browser storage.
Permissions Required
- Work Items (Read): To read work item information
- Work Items (Write): To save time entries
Version History
v1.0.9
- Kept Time Reports available when historical entries reference deleted or inaccessible work items.
- Displayed missing work item field values as unavailable without failing the remaining batch.
- Prevented failed column selections from being saved and blocking subsequent report loads.
v1.0.8
- Restored the Log Time panel to a softer blue-black gradient.
- Kept scheduling cards, time controls, date input, and quick actions on light surfaces for readability.
- Moved Today into the same summary row as Original Estimate, Remaining Work, and Completed Work.
- Removed the redundant All Time summary because it duplicated Completed Work.
- Kept the Column options header and action buttons fixed while scrolling through the items list.
- Centered the Column options dialog in the visible window and increased its usable height.
v1.0.7
- Added a UTF-8 BOM and CRLF line endings to CSV exports so Excel displays Chinese and English correctly.
- Added Time Reports and Time Logged recovery for drafts interrupted by Save & Close.
- Retained unbound drafts until migration or expiry instead of deleting them during iframe unload.
- Removed the persistent success status line after draft migration and scheduling synchronization.
v1.0.6
- Added form-context-aware draft recovery with a conservative unique-match fallback.
- Kept pending draft metadata synchronized when an unsaved Task title changes.
- Fixed Column options rendering for valid zero-valued work item fields.
v1.0.5
- Registered full and short work item contribution IDs during module startup so Azure DevOps Server can deliver save notifications immediately.
v1.0.4
- Fixed authenticated work item PATCH requests from Azure DevOps Server sandboxed iframes.
- Preserved scheduling synchronization errors instead of replacing them with a migration success message.
v1.0.3
- Registered work item save listeners immediately after SDK initialization for Azure DevOps Server.
- Added safe recovery of a unique unbound draft when reopening the newly saved Task.
v1.0.2
- Added HTTP-compatible UUID generation for on-premises Azure DevOps Server draft sessions and migration tokens.
v1.0.1
- Added Azure DevOps Server sandbox compatibility for new-Task draft recovery without browser storage.
- Replaced the bundled REST client with a single-SDK lightweight API layer to prevent duplicate SDK initialization.
- Preserved failed draft migrations by binding the target work item ID in extension data for later retry.
v1.0.0
- Added isolated draft time entry for new Tasks and automatic binding after the first Task save.
- Prevented new work item ID 0 records and excluded legacy ID 0 data from normal reports.
- Added idempotent draft migration, retry support, and expired-draft cleanup.
- Synchronized Completed Work and non-negative Remaining Work from logged time.
- Added Original Estimate, Remaining Work, and Completed Work summaries to Time Tracking.
- Fixed local-date presets so This Month starts on the local first day of the month.
- Added ascending and descending Date sorting with per-user, per-project persistence.
- Added Column options for core, time-entry, standard work item, and custom fields.
- Updated CSV export to follow visible columns and sorting and to emit plain numeric work item IDs.
- Updated Log Time and Time Logged styling to use Azure DevOps theme variables.
v0.3.8
- Added persistence for the Time Reports
Assigned To filter so the last selected user is restored on the next page load.
- Clearing the
Assigned To filter back to All Users now removes the saved user preference.
v0.3.7
- Fixed Time Reports to store descriptions on each daily time log.
- Fixed Time Reports to display each work item log's own description instead of repeating the latest description across rows for the same work item.
- Updated report data model notes to include optional daily log descriptions.
v0.3.4
- Fixed Time Reports description persistence for newly saved time entries.
- Fixed Time Reports to render each daily log's own description instead of reusing the latest work item description for every row.
v0.3.3
- Initial release with core time tracking features and reports.
| |