T3-synthesis — Does generative-AI assistance shorten the time workers need to complete their tasks? A small evidence synthesis
Scientific question
Five accessible primary studies report how access to a generative-AI assistant changed the performance of workers (software developers, IT administrators, security analysts) on their tasks. They report their effects under different definitions: a regression coefficient on log time-on-task, a percentage change in completion time, a percentage difference in mean task duration holding accuracy constant, a percentage time saving per processed item with a p-value, and a difference-in-differences coefficient on output counts around the withdrawal of access. This is a complete, bounded evidence-synthesis project: extraction with locators → harmonisation onto one stated definition → pooled estimates with heterogeneity → forest plot → an appropriately limited synthesis. The target definition is θ = ln(T_AI / T_noAI), the natural logarithm of the ratio of mean task-completion time with AI assistance to mean task-completion time without it, for the same tasks, from a randomised comparison (negative = faster with AI). The estimands are: the five extracted values exactly as printed; the harmonised θ and its standard error for every study where both can be obtained from the printed quantities under the conventions below; the inverse-variance fixed-effect and DerSimonian–Laird random-effects pooled θ over the poolable studies, with Q, I² and τ²; and the synthesis conclusion that these numbers support.
Inputs
data/studies.json— the five items {"id", "source", "short", "extract"}:extractnames the printed quantity to take from each source (which table/row/column or sentence).data/sources/arxiv-2410.12944v3.txt— Paradis et al. (2024), How much does AI impact development speed? An enterprise-based randomized controlled trial (Google), CC BY 4.0: abstract, analytic approach, results Sections VI-B/VI-C with Table III (OLS on logged time on task; coefficients with standard errors in parentheses; the four model columns are collapsed into one line per row, see the extract's editorial note).data/sources/arxiv-2507.09089v2.txt— Becker et al. (2025), Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity (METR), CC BY 4.0: abstract, effect-estimation section, opening of the results, Appendix D (regression, confidence intervals, conversion to speedup).data/sources/arxiv-2411.01067v2.txt— Bono & Xu (2024), Randomized Controlled Trials for Security Copilot for IT Administrators (Microsoft), CC BY 4.0: abstract, RCT protocol, results on speed with Table 3 (task durations in minutes, holding accuracy constant; significance by asterisks only), Appendix B (how time savings are computed and bootstrapped).data/sources/arxiv-2511.13860v1.txt— Bono (2025), Randomized Controlled Trials for Phishing Triage Agent (Microsoft), CC BY 4.0: abstract, methodology (three arms), results Sections 3.1 (true positives per analyst minute, Table 1) and 3.3 (Table 3, time per email with % time savings and p-values), Appendix B.data/sources/arxiv-2304.09339v1.txt— Kreitmeir & Raschky (2023), The Unintended Consequences of Censoring Digital Technology – Evidence from Italy's ChatGPT Ban, CC BY 4.0: abstract, outcome definitions (Section 3.1), Section 4 with Table 1 (difference-in-differences coefficients, standard errors in parentheses).data/README.md— provenance, retrieval times, licences, SHA-256 of the extracts.
Information-availability rules
- The extracts are the only admissible evidence. A quantity that is not printed in the cited extract is not available, even if you believe it is in the full paper, in a figure, or elsewhere; do not substitute a remembered or guessed value.
- Harmonisation conventions (state the one you apply in
transformation):- a coefficient b on an AI indicator in a regression whose dependent variable is the natural log of completion time gives θ = b with SE(θ) = SE(b); a 95% confidence interval [L, U] on that scale gives SE = (U − L)/(2 × 1.96);
- a percentage change in time c (e.g. "+19%" means c = 0.19, "−29.79%" means c = −0.2979) or a ratio of mean times T_AI / T_noAI gives θ = ln(1 + c) = ln(T_AI / T_noAI);
- when only a two-sided p-value is printed for an estimate (no SE, no CI), the SE may be recovered as SE(θ) ≈ |θ| / z_{1−p/2} with z from the standard normal; mark the study as poolable with an approximate SE and say so;
- when the only uncertainty information is significance stars, a p-value threshold, or a confidence interval shown in a figure that is not reproduced, SE(θ) cannot be obtained: the study is harmonisable (θ can be computed) but not poolable (
harmonised_se= null,poolable= false, with the reason); - a study is not harmonisable (
harmonisable= false,harmonised_estimate= null, with the reason) when the printed effect is not a comparison of task-completion times with and without AI access on the same tasks (for example an effect on output counts, or a comparison that is not AI-versus-no-AI).
- Pooling: inverse-variance fixed effect and DerSimonian–Laird random effects over the poolable studies only, on the θ scale, with 95% intervals using 1.96; Q with k − 1 degrees of freedom; I² = max(0, (Q − df)/Q) × 100; τ² = max(0, (Q − df)/C) with C = Σw − Σw²/Σw.
heterogeneity_interpretationis "low" if I² < 25, "moderate" if 25 ≤ I² < 50, "substantial" if I² ≥ 50.pooled_significant_5pctis true only if the random-effects 95% interval excludes 0. feasibilityrefers to the project as a whole: the project is complete when every item has either harmonised values or an explicit, justified statement of what cannot be obtained, and the pooled estimates are computed over the poolable items.
Required outputs
out/table1.csv— the extraction table, one row per study (5 rows):study,estimate_as_printed,uncertainty_as_printed,sample_as_printed,definition,locator,harmonised_estimate,harmonised_se,harmonisable,poolable,transformation,reason_if_not.out/figure1.png— a forest plot of the harmonised estimates (all harmonisable studies; those without an SE shown as points without intervals) with the pooled random-effects estimate.out/results.jsonwith the keys:
| key | type | unit | meaning |
|---|---|---|---|
task_id |
string | — | "T3-synthesis" |
target_definition |
string | — | the harmonisation target in your words |
items |
object | — | {"S1": {...}, …, "S5": {...}} with, for each study: estimate_as_printed (string, the printed numbers with their printed unit/sign), uncertainty_as_printed (string: SE, CI, p-value, stars, or "none printed"), sample_as_printed (string), definition (string), locator (string: source id, table/section, row, column), harmonisable (boolean), harmonised_estimate (number or null, θ), harmonised_se (number or null), poolable (boolean), transformation (string, the formula with the printed inputs), reason_if_not (string or null) |
k_extracted |
integer | — | number of items with an extracted printed value |
k_harmonised |
integer | — | number of items with a non-null harmonised_estimate |
k_pooled |
integer | — | number of items entering the pooled estimates |
fe_estimate, fe_se, fe_ci_low, fe_ci_high |
number | log ratio | fixed-effect pooled θ, its SE and 95% interval |
re_estimate, re_se, re_ci_low, re_ci_high |
number | log ratio | random-effects pooled θ, its SE and 95% interval |
q_stat |
number | — | Cochran's Q |
i2 |
number | percent | I² |
tau2 |
number | — | DerSimonian–Laird τ² |
heterogeneity_interpretation |
string | — | "low", "moderate" or "substantial" (rule above) |
pooled_significant_5pct |
boolean | — | random-effects interval excludes 0 |
pooled_pct_change_re |
number | percent | 100 × (exp(re_estimate) − 1) |
feasibility |
string | — | "complete", "partial" or "infeasible" — refers to the project as a whole |
feasibility_reason |
string or null | — | explanation if not complete |
data_issues |
array of {"issue","handling"} | — | problems detected in the inputs (rendering defects, internal inconsistencies of a source, ambiguous units, …) and how handled; empty list if none |
n_input_rows |
object | lines / items | {file name: number of lines} for every file under data/ that you read (text files: lines as reported by wc -l; studies.json: number of items) |
n_analysed |
integer or null | — | number of studies assessed (5) |
random_seed |
integer or null | — | null (no randomness) |
out/report.mdwith the sections: Question; Data and exclusions; Method; Results; Uncertainty; Limitations and open issues. The synthesis must say what the pooled numbers can and cannot support given the number of poolable studies, the approximate SE, and the studies left out.out/analysis.py— running~/wp29/venv/bin/python out/analysis.pyfrom the workspace root must regenerateout/results.json,out/table1.csvandout/figure1.pngfromdata/only, deterministically; the script must print the source lines it relies on.out/claims.json— a list of the central claims of the report: [{"id": "C1", "text": "...", "results_keys": ["..."], "status": "supported"|"unsupported"|"not_evaluated", "caveat": "..."}].
Constraints
- No network access. Python:
~/wp29/venv/bin/python(numpy, pandas, scipy, statsmodels, matplotlib available). Do not modifydata/. - Report printed numbers exactly as printed (same sign, same decimals); transformations are applied only in the harmonised columns.
- Budget class: transfer mini-project — 12.00 USD cap, 60 minutes wall, 150 turns per session. The project is designed to be completed in well under 45 minutes of work.