Vector Solutions Engineering • March 2026 • v4.0.1

tempo timesheet
automation

Context

200 engineers filling timesheets by hand, every single day.

At Vector Solutions, every employee must log 8 hours daily in Tempo via Jira. For 200+ engineers, QA engineers, product owners, and sales staff, this means 15-20 minutes of manual entry, every working day, across the entire organization.

200+
Employees affected
15-20
Minutes per day wasted
62%
On-time submission rate
38%
Late submissions
"Every month, managers spend 2+ hours chasing late timesheets. Payroll gets delayed. Compliance risk grows. Employees resent the busywork."

The daily routine

Developers open Jira, try to remember which tickets they worked on, estimate hours for each, navigate to Tempo, fill in worklogs with descriptions, and repeat for each ticket. At month-end, they scramble to fix shortfalls before the submission deadline.

Four roles, same pain

Developers 130 people, Jira-based
QA Engineers 20 people, Jira-based
Product Owners 30 people, activity-based
Sales Team 20 people, activity-based
Problem

$1.2M in productivity lost to a task that should be automated.

Manual timesheet entry costs more than anyone realized. The numbers tell a clear story.

Role Headcount Time lost / month Annual cost
Developers 150 825 hrs $693,000
Product Owners 30 220 hrs $211,200
Sales Team 20 147 hrs $114,660
Manager Follow-ups 15 130 hrs $140,400
Total 215 1,322 hrs $1,159,260

Plus hidden costs: payroll delays ($6K), compliance risk ($50K), employee frustration (6.8/10 rating).

Before vs After

Before — Manual entry

Daily effort per person 15-20 min
On-time submissions 62%
Manager follow-up / week 2 hours
Employee frustration 6.8 / 10
Accuracy Guesswork
Annual cost $1,215,260

After — Automated

Daily effort per person < 2 min
On-time submissions 98%
Manager follow-up / week < 15 min
Employee frustration 2.0 / 10
Accuracy From Jira data
Annual cost $2,000
Process

A Python script that runs locally. No servers. No subscriptions. No cloud.

The script runs on each employee's computer. It reads Jira, distributes hours, and creates worklogs automatically. Tempo syncs from Jira.

01

Read Jira Tickets

Script queries your active tickets via Jira REST API. Filters by status based on role: IN DEVELOPMENT / CODE REVIEW for developers, Testing / UAT for QA.

02

Distribute Hours

Splits your 8-hour day equally across active tickets. Generates smart descriptions from ticket content.

03

Submit to Tempo

Creates Jira worklogs (Tempo auto-syncs). At month-end, submits the full timesheet for manager approval.

# That's it. Run once and forget.
$ python tempo_automation.py

[OK] Found 3 active tickets
[OK] Logged 2.67h on TS-101 — Implement search feature
[OK] Logged 2.67h on TS-102 — Fix login validation
[OK] Logged 2.66h on TS-103 — Update API endpoint
[OK] SYNC COMPLETE — 8.00 / 8 hours

Development timeline

21 days from idea to production. 10 releases in 3 weeks.

v1.0
February 3, 2026

Initial Release

Daily sync, Jira/Tempo integration, smart descriptions

v2.0
February 12, 2026

Production Hardening

ASCII output, DualWriter, batch wrappers

v3.0
February 17, 2026

Schedule Management

Holidays (100+ countries), PTO, weekly verify, monthly submit

v3.1
February 18, 2026

System Tray App

Tray icon, toast notifications, smart exit, auto-start

v3.4
February 20, 2026

Overhead Stories

5 overhead cases, PI support, hybrid Jira+Tempo detection

v3.5
February 22, 2026

Mac Support

Full macOS: tray app, install.sh, cron, osascript

v3.6
February 22, 2026

Monthly Shortfall

Gap detection, --view-monthly, --fix-shortfall

v3.7
February 22, 2026

Tempo as Source of Truth

4 methods use Tempo API primary, Jira fallback

v3.8
February 23, 2026

Distribution Zips

3 zip types, embedded Python 3.12, one-click install

v3.9
February 23, 2026

Early Submission

Submit mid-month when remaining days are non-working

v4.0
March 13, 2026

Enhancement & QA

Data safety (create-before-delete, rollback), retry logic, health check, --dry-run, --backfill, config validation, 500 tests, CI/CD, ruff

v4.0+
March 24-26, 2026

Accurate Sync & QA Role

Auto-sync with accurate toast outcomes, Task Scheduler fix, QA role (Testing/UAT), --dry-run on --submit

v4.0+
March 31, 2026

Tempo API v4 Submit Fix

Correct submit endpoint, reviewer lookup, approval status flow, response body error logging

Python 3.7+ Jira REST v3 Tempo API v4 528 Tests 7,268 Lines 8 Classes
Solution

Complete automation with a system tray app, smart scheduling, and cross-platform support.

Everything a team member needs, from daily sync to monthly submission, in a single install.

Daily Auto-Sync

Distributes hours across active Jira tickets at your configured time (default 6 PM).

Weekly Verification

Friday check catches missed days. Backfills from historical ticket data.

Monthly Submission

Verifies total hours, blocks on shortfalls, submits for approval. Early submit supported.

Overhead Stories

5 cases covered: daily overhead, no tickets, manual entries, PTO/holidays, planning week.

Schedule Guard

Skips weekends, org holidays (auto-fetched), national holidays (100+ countries), and PTO.

System Tray App

Persistent icon with color status, one-click sync, PTO dialog, toast notifications.

Cross-Platform

Full support for Windows 10/11 and macOS. Platform-specific installers and native UI.

Distribution Zips

Windows Full (embedded Python), Windows Lite, and Mac. One-click install.

Smart Descriptions

Generates meaningful worklog comments from Jira ticket descriptions and recent comments.

DPAPI Encryption

API tokens encrypted with Windows DPAPI. HTTPS only. No cloud storage of credentials.

Idempotent Sync

Safe to re-run. Deletes previous entries then creates fresh. No duplicates.

Toast Notifications

Native notifications on Windows (winotify) and Mac (osascript). Status and alerts.

Tempo as Source of Truth

4 core methods read Tempo API first with Jira fallback. Catches manual entries Jira can't see.

Tray Auto-Restart

Daily scheduler detects if the tray app was closed and relaunches it with a recovery notification.

Welcome Toast

Personalized greeting on launch with time-of-day message. "Welcome back" on auto-restart.

Smart Exit Check

Verifies today's hours are logged before closing. Warns if worklogs are missing to prevent gaps.

Change Sync Time

Adjust daily sync time from the tray Configure menu. Validates HH:MM and reschedules instantly.

Monthly Reports

--view-monthly shows per-day hours with gap detection. --fix-shortfall fills missing days interactively.

Setup Wizard

Guided first-run: role selection, token entry, location picker (100+ countries), overhead config.

22 CLI Commands

Full command suite: sync, verify, submit, PTO, schedule, overhead, monthly reports, backfill, approval status, and more.

Four roles, one tool

Developer

Hours auto-distributed across active Jira tickets (IN DEVELOPMENT / CODE REVIEW). Needs Jira + Tempo tokens. Saves 15-20 min/day. Includes 2h default daily overhead.

QA

Hours auto-distributed across active Jira tickets (Testing / UAT). Same workflow as Developer. Needs Jira + Tempo tokens. Saves 15-20 min/day.

Product Owner

Hours logged via configured manual activities. Needs Tempo token only. Saves 10-15 min/day.

Sales

Pre-configured activities synced via Tempo API. Needs Tempo token only. Saves 10-15 min/day.

System tray app

Right-click the tray icon to access all features. Runs silently in the background.

CLI output samples

Real output from the running application.

Schedule Calendar

Monthly Hours Report

============================================================
MONTHLY HOURS REPORT - February 2026
============================================================

  Date         Day         Logged Expected     Status
  --------------------------------------------------
  2026-02-02   Monday        8.0h     8.0h       [OK]
  2026-02-03   Tuesday       8.0h     8.0h       [OK]
  2026-02-04   Wednesday     8.0h     8.0h       [OK]
  2026-02-05   Thursday      8.0h     8.0h       [OK]
  2026-02-06   Friday        8.0h     8.0h       [OK]
  2026-02-09   Monday        8.0h     8.0h       [OK]
  ...
  --------------------------------------------------
  TOTAL                   120.0h   120.0h

  [OK] All hours accounted for

Architecture

8 classes, single file, no external frameworks.

CLI
argparse, 22 commands
TempoAutomation
Orchestration, ~2,100 lines
JiraClient
REST v3
TempoClient
API v4
ScheduleManager
Holidays, PTO
ConfigManager
Setup wizard
CredentialManager
DPAPI encryption
NotificationManager
Email, Teams, toast
DualWriter
stdout + file

Developers and QA write to Jira; Tempo auto-syncs. PO/Sales write directly to Tempo.

Takeaway

15,091% ROI. Immediate payback. Zero infrastructure.

The numbers speak for themselves. A one-time $8K investment returns over $1.2M annually.

Annual savings
$1.2M
Productivity + management + compliance
Return on investment
15,091%
$8K investment, $1.2M return
Payback period
Day 1
Immediate savings from first run
Investment Cost
Development One-time, already completed $6,000
Hosting Runs locally on each machine $0
Licenses No subscriptions required $0
Annual Maintenance Ongoing support $2,000
Total Year 1 $8,000

Getting started

01

Download

Get the appropriate zip: Windows Full (includes Python), Windows Lite, or Mac.

02

Install

Run install.bat or ./install.sh and follow the setup wizard.

03

Done

Tray app starts automatically. Timesheets are filled every day at 6 PM. No manual action needed.

Future roadmap

Retry Logic

Exponential backoff for 429/502/503/504 API errors. Max 3 retries. TempoClient + JiraClient.

v4.0

--dry-run Mode

Preview what would be logged without creating worklogs. Also works with --submit.

v4.0

Weighted Distribution

Allocate more hours to higher-priority tickets via distribution_weights config.

v4.0

Pre-Sync Health Check

Validates Jira + Tempo API connectivity before every sync. Fail fast with clear error.

v4.0

QA Role

Distributes hours across Testing / UAT tickets. Full Jira-based workflow like Developer.

v4.0+

Accurate Sync Toasts

Toast shows exact hours logged or reason (no overhead, no tickets, partial). Red icon on error.

v4.0+

Teams Webhook

MS Teams notifications for sync status. Code exists, needs webhook URL.

Ready

Auto-Fill on Submit

Auto-fill gap hours on last working day before submitting. No manual fix needed.

Next

PyInstaller .exe

Single executable, no Python install needed. Double-click to run.

Planned

Slack Notifications

Webhook-based Slack alerts for sync status and shortfall warnings.

Planned