Resources/Guides

    Engineering Work That Never Becomes a Commit (2026)

    Matt·August 20, 2026·Updated August 20, 2026
    Engineering Work That Never Becomes a Commit (2026)

    The week that looks empty in git

    Everyone who has done this job for a while has had the week where they closed a customer-facing incident, unblocked two other engineers, killed a bad architectural decision before it shipped, and pushed four commits totalling maybe sixty lines. Then they opened their own GitHub profile on Friday and felt vaguely fraudulent. The graph was pale. The week was brutal.

    Quick Answer

    Engineering work that never becomes a commit is most of the job: code review, reading and thinking before any code exists, supervising an AI agent, config and environment plumbing, spikes that proved an approach wrong, and debugging that ends in a one-line fix or no fix at all. Git records file-tree changes at the moment they are written, so none of that work is in the repo, and the contribution graph treats a week of it as an empty week. The traces do exist, but they sit in the forge API, in CI history, and in editor and terminal session activity rather than in commits. Below is a taxonomy of the six types, an honest read on how much of the week they take, and what to do if you need the invisible half of your work to be visible.

    That gap is not a measurement bug you can fix with a better git query. A commit is a claim about output. It records that this file tree changed, at this moment, attributed to this author, and it says nothing about what produced the change, how long the change took, or how many changes you correctly decided not to make. Everything upstream of the diff happens somewhere git was never watching. The breakdown of why green squares mislead covers what this does to how people read your profile. This page is about the work itself.

    A taxonomy of non-commit engineering work

    The six categories below cover almost every hour that vanishes between "I worked all day" and "the repo says otherwise". The last column is the useful one, because none of this work is untraceable. It leaves its traces somewhere other than the place people look.

    Work typeWhat it looks like in a real weekDoes it produce a commit?Where a trace does exist
    Code reviewReading a diff properly, pulling the branch, testing the edge case the author missed, writing comments, re-reviewing after changesNo, and never in your own historyForge API (PR reviews, comment threads, approvals)
    Thinking and designReading existing code, sketching a schema, comparing two approaches, deciding not to build somethingSometimes, hours later, as one small commitEditor and terminal session activity; design docs if you wrote them
    Agent supervisionPrompting Claude Code or Cursor, reading what it produced, rejecting half of it, re-steering, verifying the restYes, but the diff arrives in seconds and hides the hour around itAgent session telemetry, token and cost logs
    Config, environment, plumbingCI that fails only on main, expired secrets, dependency upgrades, local env drift, a deploy that will not deploySometimes, as a two-line YAML change after three hoursCI run history; session activity
    Spikes and dead endsA branch that proved the approach wrong, a library evaluated and rejected, a prototype that answered its question and diedAlmost never, since deleted branches and stashes leave nothingSession activity, and nothing else
    DebuggingBisecting, adding logging, reproducing on a colleague's machine, reading tracesA one-line fix, or nothing if the cause was configSession activity; the issue tracker if you filed it

    Three of them behave differently from how people assume.

    Agent supervision is the newest and the most badly measured. When Claude Code writes a 900-line scaffold, the commit lands in about forty seconds and looks, in the repo, like the most productive minute of your quarter. The hour you spent specifying the thing, reading the output, catching the two places it silently changed an interface, and re-prompting does not appear anywhere in git. In practice this inverts the old relationship between diff size and effort. The biggest commits in an agent-heavy week are often the ones you thought about least, and the tiny ones are where the judgement went.

    Spikes are the only category with no trace at all. Review lives in the forge, config failures live in CI, but a dead-end branch you deleted on Thursday leaves nothing behind except the decision it produced. This is the purest form of engineering work that never becomes a commit, and it is usually the work that saved the most money. Nobody has ever been promoted for a git log entry that says "spent two days proving we should not do this".

    Config work is the one people underestimate in their own logs. You will often see a developer write off a day of CI archaeology as "admin", as though it were email. It is engineering, it takes the same context and the same debugging discipline, and it blocks everyone downstream until it is done. The two-line YAML commit at the end is a receipt, not a record.

    How much of the week is this, honestly

    Nobody has published a clean measurement of this split, and any precise-looking percentage you see quoted for it is almost always self-reported. What we do have are the hands-on-coding studies, and they bracket the problem from the other side.

    RescueTime's widely cited developer study put active coding-application use at about 52 minutes a day. Amazon shared internal data landing near an hour a day for many engineers. A multi-company survey of roughly 3,000 developers reported a much wider band of 2 to 6 hours, because self-report and passive measurement are not measuring the same thing. The full comparison of those studies explains why the spread is so wide.

    Take the range at face value and the arithmetic is unavoidable. On a 40-hour week, hands-on editor time lands somewhere between roughly 5 and 20 hours depending on whose definition you accept. Meetings and real non-engineering overhead take part of the rest, and what remains is the six categories above. Even inside the editor hours, only a fraction ends up as a commit, because reading code, running tests, and steering an agent all happen in the same window as typing.

    My own read is that for a mid-level or senior engineer, non-commit work is somewhere between a third and two thirds of the week, and the share rises with seniority. I will not pretend that is a measured figure. It is a bracket derived from the studies above plus the shape of the calendar, and the only number that matters to you is your own. Which you can get, but not from git.

    Why engineering work that never becomes a commit stays invisible

    The mechanism is worth being precise about, because "git is incomplete" gets said a lot and rarely gets explained.

    A commit stores a snapshot of the file tree, an author, and a timestamp taken when the commit object is created. That timestamp is a moment rather than a duration, so the entire history of a change collapses into a single point, and six hours of investigation produces the same shape of record as forty seconds of agent output. Reviews are not repository objects at all. They live in GitHub's or GitLab's API as a separate object graph, which is why git-only analytics can report your commits but not your review load. Spikes get garbage collected. Config work shows up in CI logs that expire on a retention policy.

    This is why inferring hours from commit clustering drifts, and drifts hardest for the people using AI the most. The technique assumes commit density tracks effort density, and agent workflows break that assumption in both directions at once, batching hours of supervised work into one large commit while scattering trivial fixes into many small ones. Git remains a useful baseline for what shipped and when. It is not a clock, and the more of your week goes to the six categories above, the further off it reads.

    Making the invisible half visible

    Most developers hit this problem when someone else needs to see the work: a client questioning an invoice, a performance review, a manager who reads the dashboard literally. Here is the order I would work through, cheapest first.

    1. Pull your review activity from the forge API. GitHub's /search/issues?q=reviewed-by:you and the pull request reviews endpoint give you a month of review load in about ten minutes. For most senior engineers this is the largest invisible category and the easiest to recover.
    2. Write down decisions, including the rejected ones. A three-line entry when you kill an approach turns a spike from a total loss into a durable artefact. It is the only trace that category will ever have, and it costs a minute.
    3. Count the outcomes, not the activity. Whether a change failed in production, whether last month's code has already been rewritten, and how long work took to reach users all survive the AI era intact. The metrics that hold up under agent-written code go through this, and none of them care who typed the characters.
    4. Instrument the sessions if the stakes justify it. Editor and terminal telemetry records work as it happens, which is the only way to capture the categories that leave no artefact. It is heavier than the first three steps and worth it mainly when someone is paying for, or judging, the answer.

    One thing not to do: fix the pale graph by committing more often. Splitting work into smaller commits changes the record without changing the work, and that reflex is what made contribution density worthless in the first place. Fragmenting your day to feed a metric costs you real time too, which the piece on context switching puts numbers to.

    Why this becomes a proof problem

    This matters beyond feeling underappreciated on a Friday. Every claim you make about the invisible half is currently unfalsifiable. "I spent two days on review" and "I spent two days on Reddit" produce the same git history, and a skeptical client, manager, or hiring panel has no way to tell them apart. Neither do you, six weeks later, working from memory.

    It cuts both ways, too. People trust commits despite everything wrong with them because a commit is hard evidence of something, even if that something is narrow. Recovering the rest of the work means producing evidence of the same quality, recorded while it happened and traceable back to a source rather than reconstructed from a feeling. That is a higher bar than a timesheet, and it is the only version of this argument that survives someone who has no reason to believe you.

    Where DevClocked fits

    If you are a solo developer with nobody to convince, skip all of this. Your own sense of the week is fine, and the honest answer is that a tool solves a problem you do not have. A team running formal DORA reporting is also better served by an engineering-intelligence suite built for org-level rollups.

    DevClocked is built for the case where the invisible half has to be defensible. Full disclosure: I build it. It combines a git baseline (useful, approximate, no per-editor plugin needed) with telemetry from a lightweight editor extension and an editor-agnostic CLI tracker covering terminal and agent sessions, so time spent driving Claude Code, Cursor, or Codex is captured as the engineering work it is rather than as a forty-second commit. The git baseline alone will not give you accurate hours, and I would rather say that plainly than sell the graph as a clock. The telemetry layer is what makes the rest possible: Work Blocks that show review and supervision time alongside authoring, AI-versus-human attribution on what shipped, token and cost tracking on agent sessions, and a Leverage Score that reads output against real effort instead of against diff size. If you would rather build this yourself, the guide to measuring developer productivity covers the approach without recommending any tool.

    Common mistakes

    Treating a pale graph as a verdict on the week. The graph is a record of one narrow event type. Reading it as a productivity score means grading yourself on the fraction of your job that happens to leave a file-tree diff.

    Assuming agent-heavy weeks are lower effort. The diff got bigger and the typing got shorter. The specifying, reviewing, and correcting did not go anywhere.

    Logging invisible work as one "other" bucket. Review, config firefighting, and dead-end spikes have different causes and different fixes. Collapsed into one category, they tell you only that your week was busy, which you already knew.

    FAQ