Featured

Timesheet Theater: Why Jira Time Logs Don't Match What Your Engineers Actually Built

Software capitalization, client billing and R&D tax credits all run on Jira time logs that engineers fill in on Friday afternoon, from memory. Learn what engineering and finance leaders on Reddit say about time tracking nobody trusts, and how Keypup MCP compares Jira worklogs with linked pull requests, commits and merges to show when time is logged, how late it arrives, and which hours have code behind them.

Thomas Williams
Thomas Williams LinkedIn
• 13 min read
Timesheet Theater: Why Jira Time Logs Don't Match What Your Engineers Actually Built

Table of Contents

TL;DR: In large organizations, Jira time logs feed software capitalization, client billing, cost allocation and R&D tax credit claims. Yet most of those hours are entered days or weeks after the work, often on Friday afternoon or at month end, and a large share sits on issues with no code behind them. This is timesheet theater: numbers that look precise and are mostly reconstructed. The Keypup MCP Server reads every Jira worklog — its duration, the date it was logged for and the moment it was entered — each issue's time spent, time estimate, type and parent, and the pull requests linked to it, with their first commit, last merge and lines changed. Your AI assistant can then show how late time is logged, when in the week it is entered, how month-end backfill hits finance closes, which teams log time Git can corroborate, which logs simply copy the estimate, and which issues to check before the quarter closes.

Every CFO who capitalizes software development eventually asks the same question: how do we know these hours are real? The usual answer is that engineers log them in Jira. The honest answer is that most engineers log them on Friday at 4 p.m., from memory, rounded to the nearest day — and that nobody has ever checked them against what was actually built.

The Friction: Precise Numbers, Reconstructed After the Fact

Jira time tracking was designed for teams that want to compare estimates with effort. In an enterprise it ends up carrying far more weight:

  • Finance capitalizes on it. Under ASC 350-40 and IAS 38, development costs can be capitalized. Many companies use Jira hours by epic as the allocation key.
  • Clients are billed on it. Agencies, IT service providers and internal shared-service teams invoice or charge back from logged time.
  • Tax credits rely on it. R&D tax credit claims need a defensible link between hours and qualifying work.
  • Nobody owns its quality. Engineers see it as admin, managers chase it at month end, and finance receives a number without the means to question it.

The result is a dataset that drives real money and is entered as an afterthought.

Why This Matters: The Real Cost of Timesheet Theater

The Audit Problem

Auditors increasingly ask how capitalized hours were recorded. "Engineers entered them in Jira" holds up until someone notices that a third of them were typed in a week after the fact, and that whole days were logged against tickets with no commits.

The Allocation Problem

When hours are reconstructed, they gravitate to whatever ticket is open in the browser — usually the big epic, not the support request or the production incident. Capitalization rates drift up, maintenance looks cheaper than it is, and roadmap investments look more expensive.

The Trust Problem

Engineers know the numbers are approximate and resent being asked for precision they can't provide. Finance knows the numbers are approximate and adds a buffer. Each side quietly stops trusting the other's reports.

The Enterprise Discussion: What Engineering and Finance Leaders Are Actually Saying

"Nobody logs time honestly", "we capitalize off fiction" and "time tracking is the most hated part of the job" come up again and again wherever engineering directors, controllers and delivery leads compare notes. The quotes below are representative of recurring threads on r/ExperiencedDevs, r/EngineeringManagers, r/jira and r/Accounting.

Director of Engineering, SaaS Platform (r/EngineeringManagers)

"Finance capitalizes about 60% of our engineering cost based on Jira worklogs. I know for a fact that half my team fills in the whole week on Friday afternoon. The number goes into the audited financials anyway."

Staff Engineer, Consulting Firm (r/ExperiencedDevs)

"We bill clients from Jira time. Everyone logs exactly eight hours a day, split across whatever tickets they remember. Then the client asks why a two-line fix cost three days and nobody can answer."

Financial Controller, Software Group (r/Accounting)

"Every month end I send the same email asking engineering to complete their timesheets. Twenty percent of the hours arrive after we've closed the books. We end up accruing an estimate and truing it up the month after."

The pattern holds: organizations make financial decisions on time logs, but almost none of them measure how those logs are produced or whether the code supports them.

How Keypup MCP Audits Jira Time Logs Against Git

The Keypup Model Context Protocol (MCP) Server gives your AI assistant structured access to the data Keypup imports from Jira and from GitHub, GitLab, Bitbucket and Azure DevOps. For this analysis, what matters is every Jira worklog — its author, its duration, the date the time was logged for, and the moment the worklog was entered — and, for each issue, its time spent, time estimate, type, parent, project and closure date, along with the pull requests linked to it: how many there are, whether any was merged, the date of the first commit and the last merge, and the lines changed.

A pull request is linked to an issue when it references the issue key — in its title, or in its body or a commit message after a closing keyword such as "fixes" or "resolves". The entry delay of a worklog is the number of business days between the date it was logged for and the moment it was entered. All figures below cover the last 12 full months, October 2025 to September 2026.

1. Measuring How Reliable the Time Logs Are

The first question: how much of the logged time was recorded close to the work?

MCP Prompt:

For Jira worklogs of the last 12 full months, show the total hours
logged, the number of worklogs, people and projects, and the share
of hours entered 5 or more business days after the work date and
after the end of the work month. Split hours by entry delay: same
day, 1-4, 5-20 and over 20 business days. Add the share of time
spent on issues closed in the period that have no linked pull
request.

Output: How Reliable Are Our Jira Time Logs?

Four KPI cards and a split bar for Jira worklogs of the last 12 full months: 412,600 hours logged in 186,300 worklogs by 1,140 people across 52 Jira projects; 31% of hours entered 5 or more business days late; 17% entered after the month closed; 34% of time spent on closed issues with no linked pull request; entry delay split of 34% same day, 35% 1 to 4 business days later, 19% 5 to 20 business days later and 12% more than 20 business days later

Key Insight: Only a third of logged hours are entered on the day of the work. 31% arrive a week or more later — at that point they are reconstructed, not recorded. One hour in six is entered after its month has closed, which means finance closed the books on an incomplete number.

2. Seeing When Time Is Actually Logged

The entry timestamp tells you whether time is recorded as work happens or rebuilt at the end of the week.

MCP Prompt:

As a heatmap, show the share of hours logged in Jira over the last
12 full months by weekday and by two-hour slot of the time the
worklog was entered (UTC). Add the total per weekday.

Output: When Do People Actually Log Their Time?

Heatmap of the share of logged hours by weekday and two-hour entry slot in UTC: Friday totals 40.4% of hours, with 10.2% entered between 14:00 and 16:00, 15.8% between 16:00 and 18:00 and 5.2% after 18:00; Monday totals 18.0% with 4.6% before 10:00; Tuesday 12.9%, Wednesday 12.3% and Thursday 15.0%; weekend entries 1.4% not shown

Key Insight: 40% of the week's hours are entered on Friday, and 31% of all hours on Friday after 14:00. Monday morning is the second peak, when last week is rebuilt from memory. A worklog entered at 17:00 on Friday for Tuesday's work is an estimate of effort, not a measurement of it.

3. Tracking Month-End Backfill

Finance closes the month on the hours it has. The question is how many arrive after that.

MCP Prompt:

By month of the work date over the last 12 full months, show as a
combo chart the hours logged in Jira as bars and, as a line, the
share of those hours entered after the end of that month.

Output: Month-End Backfill

Combo chart by work month from 2025-10 to 2026-09: bars of hours logged between 30,200 and 38,300, with quarter-end months highlighted; line of the share of hours entered after the month ended, between 13% and 23%, peaking at 23% in 2025-12, 20% in 2026-03, 21% in 2026-06 and 20% in 2026-09

Key Insight: Every quarter-end month spikes: 20–23% of its hours arrive after the month closed, against 13–17% in the other months. December, March, June and September are the months finance uses to close capitalization and cost reports — and the months with the least complete time data.

4. Comparing Teams: Late Entry vs Code Evidence

Two signals together tell you whose logs you can rely on: how late time is entered, and how much of it sits on issues with merged code.

MCP Prompt:

For the 12 Jira projects with the most hours logged in the last 12
full months, show as a bubble chart the share of time spent on
closed issues that have a merged linked pull request (x), the
share of hours entered 5 or more business days late (y), and hours
logged as the bubble size.

Output: Which Teams' Time Logs Can You Trust?

Bubble chart of 12 Jira projects by share of time spent on closed issues with a merged linked pull request and share of hours entered 5 or more business days late: PLAT 39% and 52%, DATA 44% and 46%, RISK 47% and 44%, BILL 58% and 41%, INT 51% and 38%, MOB 66% and 29%, WEB 63% and 27%, SRCH 69% and 22%, IDN 74% and 19%, PAY 72% and 18%, CHK 77% and 15%, CORE 81% and 12%; bubble size is hours logged, from 13,000 to 38,000

Key Insight: The two problems travel together. PLAT, DATA, RISK and BILL enter 41–52% of their hours a week or more late, and under 60% of their logged time is backed by merged code. CORE, CHK and IDN log on time against issues Git can corroborate. Same company, same time-tracking policy, very different evidence. Not all work produces code — platform and data teams do more operational work — so read the chart as a list of conversations, not a ranking. Behind the chart, the assistant runs two queries — one on worklogs, one on closed issues — and joins them by project.

5. Finding What Is Behind the Logged Hours

Time spent on an issue with no pull request isn't necessarily wrong. But finance should know how much of it there is, and of what kind.

MCP Prompt:

For Jira issues closed in the last 12 full months, show as a donut
chart their total time spent split by: issues with a merged linked
pull request, issues with a linked pull request not merged, and
issues with no linked pull request broken down by issue type.

Output: What Is Behind the Logged Hours?

Donut chart of 298,400 hours of time spent on Jira issues closed in the last 12 full months: 58% on issues with a merged linked pull request (173,100 hours), 8% with a linked pull request not merged (23,900), and 34% with no linked pull request: Task 14% (41,800), Story 9% (26,900), other types 6% (17,900), Bug 5% (14,900)

Key Insight: 58% of logged time can be matched to merged code. The largest untraceable slice is Tasks with no pull request: 41,800 hours. Some of it is legitimate design, investigation or operations work; some of it is time parked on a convenient ticket. If your capitalization policy treats those hours as development, this is where an auditor will start.

6. Spotting Logs That Copy the Estimate

Real effort rarely matches its estimate to the minute. When it does, often, the estimate is being copied into the timesheet.

MCP Prompt:

For Jira issues with a time estimate closed in the last 12 full
months, show as a 100% stacked bar chart for the 8 projects with
the most such issues the share where time spent equals the
estimate exactly, is within 10% of it, is more than 10% off, or
is empty.

Output: Logged Time or Copied Estimate?

100% stacked bar chart of closed Jira issues with a time estimate, by project, split into time spent equal to the estimate, within 10%, more than 10% off, and no time logged: PLAT 41%, 12%, 29% and 18%; DATA 36%, 14%, 33% and 17%; BILL 33%, 11%, 38% and 18%; RISK 29%, 15%, 41% and 15%; MOB 18%, 16%, 52% and 14%; PAY 12%, 14%, 61% and 13%; CORE 9%, 13%, 66% and 12%; CHK 7%, 12%, 70% and 11%

Key Insight: In PLAT, 41% of issues log exactly their estimate — more than four times the rate of CORE or CHK. The same projects lead the late-entry chart. Copied estimates also make estimation accuracy reports meaningless: a team that logs its estimate will always look perfectly calibrated.

7. Listing the Time Logs to Check Before the Quarter Closes

The last step turns the analysis into a short list for the controller and the engineering manager to review together.

MCP Prompt:

List Jira issues closed last quarter where time spent equals the
estimate exactly, or 40+ hours were logged with no merged linked
pull request, or linked pull requests took 5+ business days from
first commit to last merge with under 8 hours logged. Show the key,
type, parent, hours logged, estimate, number of linked pull
requests, whether one was merged, business days from first commit
to last merge, lines changed and the flag. Sort by hours logged.

Output: Time Logs to Check Before the Quarter Closes

Table of seven flagged Jira issues closed last quarter, sorted by hours logged: PLAT-2291 Task, 120 hours logged, estimate 120, no linked pull request, flagged equals estimate and 40+ hours with no merged PR; DATA-1874 Story, 96 hours equal to estimate, 1 merged PR, 1.5 business days of code, 84 lines; BILL-3302 Task, 88 hours, no PR; RISK-0917 Story, 56 hours equal to estimate, 2 linked PRs none merged; PAY-5418 Story, 52 hours, 1 PR not merged; CORE-4410 Bug, 6 hours, 9.5 business days of code, 640 lines; MOB-2650 Story, 4 hours, 12 business days of code, 1,310 lines
IssueTypeParentLogged (h)Estimate (h)Linked PRsMerged PRCode (bd)LinesFlag
PLAT-2291TaskPLAT-2200120.0120.00No——Equals estimate · 40+ h, no merged PR
DATA-1874StoryDATA-180196.096.01Yes1.584Equals estimate
BILL-3302TaskBILL-329088.040.00No——40+ h, no merged PR
RISK-0917StoryRISK-088056.056.02No——Equals estimate · 40+ h, no merged PR
PAY-5418StoryPAY-539052.040.01No——40+ h, no merged PR
CORE-4410BugCORE-43026.08.02Yes9.5640Code window 5+ bd, under 8 h
MOB-2650StoryMOB-26014.016.02Yes12.01,310Code window 5+ bd, under 8 h

Key Insight: The list cuts both ways. PLAT-2291 carries 120 hours — exactly its estimate — and has no code at all. DATA-1874 logged 96 hours for an 84-line change merged in a day and a half. MOB-2650 spent 12 business days in Git with 4 hours logged. Over-logging and under-logging both distort what finance capitalizes or bills. None of these flags proves a log is wrong; each is a question worth asking before the numbers are signed off.

The Technical Implementation: What Keypup MCP Actually Reads

Every number above comes from fields Keypup already imports from Jira and your Git platforms. It helps to be precise about what they are — and what they aren't.

Worklogs Come From Jira's Native Time Tracking

Keypup imports each Jira worklog as a work logged event with its author, its duration, the date the time was logged for and the moment it was entered. Entry delay, weekday and time-of-day of entry, and month-end backfill all come from those three values. This requires teams to log time with Jira's own "Log work" feature. Time tracked in a separate timesheet tool that doesn't write Jira worklogs won't be visible.

Time Spent and Estimates Are Issue Fields

Each issue carries its total time spent and its time estimate as entered in Jira. Comparisons with the estimate only make sense for teams that fill in the original estimate; issues without one are left out of that view. Time spent is the issue's running total, so for period analysis use the worklogs themselves, and use time spent for issues closed in the period.

Keypup links a pull request to a Jira issue when the pull request references the issue key — in its title, or in its body or a commit message after a closing keyword such as "fixes", "closes" or "resolves". Each issue then carries its linked pull requests, whether they were merged, the first commit and last merge dates, and the lines changed. If many pull requests don't reference a key, the "no linked pull request" share will be inflated: check the share of merged pull requests linked to an issue first, and agree on a convention where it's low.

Git Activity Is Evidence, Not a Timesheet

Commits and merges show that work happened and over what period. They don't measure hours: design, reviews, meetings, incident response and investigations rarely leave a commit, and a short diff can hide a long investigation. Keypup doesn't import calendars, meetings or IDE activity. The analysis above flags where logs and code disagree; it doesn't replace time logs with a Git-derived number.

Capitalization Rules Are Yours

Keypup doesn't decide what is capitalizable. If your policy maps epics, issue types or labels to capital and operating expenditure, reuse that mapping in the prompts — by parent, type or label — so the results line up with what finance reports.

Business Days and Time Zones

Entry delays are counted in business days, Monday to Friday, with Keypup's BUSINESS_DAYS function, which accepts a time zone and working hours. The entry-time heatmap uses UTC; for a team in another time zone, ask your assistant to shift the entry time by that team's UTC offset. Neither knows about public holidays or vacations: Keypup doesn't import calendars, so a worklog entered after a week of leave will count as late.

Real-World Impact: Enterprise Case Studies

Case Study 1: European Enterprise Software Vendor

Before Keypup MCP:

  • 700 engineers, 55% of engineering cost capitalized from Jira worklogs
  • External auditors asking how capitalized hours were recorded and controlled
  • A month-end routine of reminder emails and a "timesheet completion" percentage as the only quality metric

After Keypup MCP:

  • The entry-delay view replaced the completion rate as the quality metric: the share of hours entered 5+ business days late fell from 34% to 15% in two quarters after teams moved to daily logging prompts
  • Month-end backfill dropped from 19% to 7% of hours, so finance stopped accruing an estimate and closing on it
  • The flagged-issues list became a quarterly control reviewed jointly by the controller and engineering managers, documented for the auditors

"Our auditors didn't ask us to track time differently. They asked us to show that we check it. Comparing worklogs with the code behind them gave us a control we could actually describe."

— CFO, European Enterprise Software Vendor

Case Study 2: North American IT Services Provider

Before Keypup MCP:

  • 1,500 engineers billing clients on Jira time
  • Recurring disputes over invoices for small changes that showed several days of logged effort
  • No way to tell copied estimates from measured effort

After Keypup MCP:

  • The estimate-copy chart showed three delivery units logging exactly their estimate on more than a third of issues; those units moved to daily time entry
  • The code-evidence donut, run on each client's Jira projects, gave account managers a split of billed time between work with merged code and investigation, support and design, which clients had been asking for
  • Invoice disputes fell by half within two quarters, as billed hours came with the pull requests behind them

"Clients don't mind paying for investigation. They mind not knowing what they're paying for. Putting the merged code next to the logged hours ended most of those conversations before they started."

— VP Delivery, North American IT Services Provider

Implementation: Getting Started with Keypup MCP

1. Connect Jira and Your Git Platforms

Connect Jira and GitHub, GitLab, Bitbucket or Azure DevOps to Keypup. Issues, worklogs, pull requests and commits are imported automatically.

2. Confirm Time Is Logged in Jira

Check that your teams use Jira's own "Log work" feature. If some log time elsewhere, start with the teams whose worklogs are in Jira.

3. Check How Many Pull Requests Reference an Issue Key

Ask your assistant for the share of merged pull requests linked to an issue, by repository. Where it's low, agree on a convention — the issue key at the start of every pull request title is the easiest to enforce.

4. Reuse Your Capitalization Mapping

Write down how your policy maps epics, issue types or labels to capitalizable work, and reuse it in every prompt so engineering and finance read the same numbers.

5. Connect the MCP Server to Your AI Assistant

Follow the MCP documentation to connect Keypup to Claude, ChatGPT, Cursor or any MCP-compatible assistant.

6. Make It a Month-End Control

Run the reliability KPIs and the month-end backfill chart before each close, review the flagged-issues list every quarter with finance, and track entry delay by team over time instead of timesheet completion alone.

Frequently Asked Questions

How accurate is Jira time tracking?

It depends on when time is logged. Worklogs entered the same day are usually close to reality; worklogs entered a week later are reconstructed from memory. Measuring the delay between the work date and the entry date of each worklog is the simplest way to know how much of your logged time you can rely on.

Can Git data replace timesheets for software capitalization?

Not on its own. Commits and merges show that development happened and over what period, but they don't measure hours, and a lot of real work — design, review, investigation, incidents — leaves no commit. Git data is best used as corroborating evidence for time logs, and to flag where the two disagree.

How do you detect timesheet backfilling in Jira?

Compare each worklog's work date with the moment it was entered. A high share of hours entered several days late, on Friday afternoons or after the month ended indicates backfilling. Keypup MCP reads both dates from Jira worklogs, so your AI assistant can report it by team, month or person.

Why do logged hours equal the estimate so often?

Because the estimate is the easiest number to type when effort wasn't recorded at the time. A high share of issues whose time spent equals the original estimate exactly usually means time is being copied, not measured — which also makes estimation accuracy look better than it is.

The Bottom Line

Your organization already makes financial decisions on Jira time logs. Keypup MCP shows how much those logs can be trusted:

✅ Measuring entry delay to show how much logged time was recorded close to the work ✅ Showing when time is entered, from Friday afternoon peaks to Monday reconstruction ✅ Tracking month-end backfill against finance closes ✅ Comparing teams on late entry and code evidence in a single view ✅ Splitting logged hours by what is behind them, from merged code to no pull request at all ✅ Spotting time logs that copy the estimate ✅ Listing the issues to review before the quarter closes

Ready to see what is behind your logged hours? Connect the Keypup MCP Server and ask your AI assistant.

Ready to Transform Your Analytics?

Join teams already using AI to make data-driven decisions faster than ever.

Most Recent Articles

The Hidden Queue: Why Most of Your Lead Time Happens Before the First Commit

The Hidden Queue: Why Most of Your Lead Time Happens Before the First Commit

Your pipelines got faster and your reviews got shorter, yet features still take months to reach customers. Learn what engineering leaders on Reddit say about work that waits weeks in Backlog, Ready for Development and To Do before anyone writes code, why delivery dashboards that start at the first commit miss it, and how Keypup MCP uses Jira workflow history, sprints and the commit and merge dates of linked pull requests to measure the queue in front of your code.

Liam Davis
Watermelon Status: Why Jira Says Done When Your Code Hasn't Merged

Watermelon Status: Why Jira Says Done When Your Code Hasn't Merged

Green on the outside, red on the inside. Learn what engineering leaders on Reddit say about Jira tickets moved to Done before the code ships, velocity that doesn't match delivery and status reports nobody trusts at enterprise scale, and how Keypup MCP compares each issue's closure date, workflow history and sprint with the state and merge dates of its linked pull requests to measure how much of your reported "Done" has no merged code behind it.

Stephane Ibos
Approval Drift: Why Code Changed After Approval Keeps Reaching Your Main Branch

Approval Drift: Why Code Changed After Approval Keeps Reaching Your Main Branch

An approved pull request isn't always approved code. Learn what engineering leaders on Reddit say about commits pushed after approval, self-merges and bypassed branch protection at enterprise scale, and how Keypup MCP uses approval dates, last commit dates, approval counts, required approvals, mergers, target branches and build status to measure how much code reaches your protected branches without anyone reviewing what actually shipped.

Arnaud Lachaume