Skip to content
← Back to Blog

Forecasting AI Agent Build Time: Using Git History and Task Graphs to Pick Your Parallel Lanes

• By Jupiter Tecson • 7 min read
Share

When you write code line by line, you have a natural feel for how long a feature will take and exactly how much work is still pending. Once AI coding agents do most of the writing, that intuition disappears.

Whether you are a solo builder running parallel AI clones on trunk or a technical leader asked “how long will this take?”, traditional story points no longer apply. Asking an LLM to estimate its own time fails too, because it answers in human sprint units (“2 to 3 days”). Even the closest industry research on long AI tasks only measures capability (whether a model can solve a task that takes a human 4 hours), not how many minutes your own setup will run.

To get that visibility back without building a telemetry server, I rely on two things already in my repository: a clean Dependency Graph (DAG) in the spec and plan, and version-control history (git log) as the stopwatch.

Across 412 finished build tasks executed across all three of my CLI harnesses (Antigravity CLI, Claude Code, and Codex) and 44 past plans, counting a task’s checklist steps predicts total agent work within 24%, and walking the dependency graph upfront tells me whether a plan tops out at 2 lanes or scales to 7 lanes (cutting 7.0 hours of agent work down to 1.2 hours on the clock, a 5.8x speedup).


Step 1: Structure Specs and Plans as a Clean Dependency Graph (DAG)

You cannot parallelize or forecast a wall of prose. To make work parallelizable before any coding agent starts, my living specifications and implementation plans form an explicit Directed Acyclic Graph (DAG):

  1. Spec-Level Graph: Every specification header declares what it Depends on: and what it Precedes:. An agent never starts planning or building a spec until its upstream specs are merged on main.
  2. Task-Level Graph (True Blockers Only): Inside a plan, Task B lists Task A as a dependency only if Task B’s tests cannot pass without Task A’s code (such as a database table or API endpoint). Everything else is independent.
  3. Explicit File Lists (And Splitting Big Files First): Every task lists the exact .java, .tsx, and .py files it will edit so non-overlapping tasks run together. If a task names a file over 500 lines (or 300 lines for a React component), the plan requires an earlier task to split that file first so parallel agents never fight over one monolith.

Step 2: Use Git History as the Stopwatch

Because I delete completed implementation plans once they land so agents never read old checklists as current rules, storing timing metrics inside plan files would lose history. Instead, the forecast script reads every completed task directly from git log:

How Git History Tracks Agent Speed Without a Telemetry Database

Task SizeChecklist StepsTypical TimeSlow-Run TimeWhat Usually Fits Here
Small4 to 6 steps16 min24 minSingle-layer change, bug fix, or focused UI update with tests.
Medium7 to 10 steps25 min44 minCross-layer slice touching backend service, OpenAPI sync, and React view.
Large11+ steps29 min46 minFull workflow spanning database migration, domain logic, contract, and UI.

Step 3: Walk the Graph to Pick How Many Lanes to Run

Before I start a build, the forecast script walks the plan’s dependency graph across 1 to 8 lanes using the exact same dependency and file-locking rules that live clones use, and recommends the fewest lanes after which adding another saves under 10%:

Why Your Plan's Dependency Graph (DAG) Decides How Many Lanes to Run

Testing this forecast against 44 past multi-task plans (using only history that existed before each plan started) revealed four practical lessons:

  1. Total Agent Work Forecast Within 24%: Across all 44 plans, the predicted total agent work before the plan started was within 24% of actual agent build time.
  2. Why Chained Feature Plans Stop at 2 to 3 Lanes: In 36 of the 44 plans, the simulator recommended just 2 or 3 lanes. Because vertical features naturally chain Database & API -> Contract Sync -> UI Screens, spinning up 6 or 8 clones buys zero extra speed; extra lanes just wait on upstream tasks.
  3. 5.8x Speedup When the Graph Is Wide: On a 22-task UI audit where all 22 tasks had zero dependencies and touched separate screen files, the forecast predicted ~1 hour on 7 lanes. In actual execution across 7 clones, 7.0 hours of agent work finished in 1.2 hours on the clock, a 5.8x speedup.
  4. Idle Clones Are the Real Bottleneck: Most multi-day plans needed only 5 to 6 hours of active agent work, yet stretched across 60 to 120 hours of calendar time because clones sat idle between sessions.

Why This Matters for Technical Leaders Too

When engineers wrote every line by hand, a tech lead or engineering manager could ask “how much is left?” and get an intuitive answer because the developer had mentally walked every file. When LLMs write the code, teams lose that pulse.

A Git-backed forecast restores that visibility:


Three Caveats to Keep in Mind


The Takeaway

  1. Structure specs and plans as a clean DAG with true dependencies only and explicit file lists per task, splitting large shared files first.
  2. Use git log as your stopwatch by bounding every task between a claim commit and a landing commit, so you can delete finished plans without losing metrics.
  3. Pin model versions in Git so your historical averages automatically reset when frontier models upgrade.
  4. Use the forecast to replace lost line-by-line intuition, giving both solo builders and technical leaders a clear view of how many lanes to run and how much work is still pending.

(If you want to follow the journey of building JupiterGoals, you can claim 1 month free early access and get all future updates.)

🛡️ Private, ad-free goal planner

All your goals. One realistic plan.

JupiterGoals fits everything you're working toward into one plan sized to your day. Shrink or swap a step on hard days and keep moving.

Start free

Not ready to sign in? Get product updates by email →