{"snapshot_id":"2026-11-05","as_of":"2026-10-24T18:10:00+00:00","path":"/first-pull-requests/","data_file":"/data/2026-11-05/first-pull-requests.json","values":{"snapshot_id":"2026-11-05","page_url":"https://porchlamp.org/first-pull-requests/","window_start":"27 April 2026","window_end":"24 October 2026","first":"95,078","returning":"83,226","outside_prs":"1,726,945","read":"592,986","projects":"10,998","known":"178,304","known_share":"30%","first_settled":"24,917","silent_14":"53%","merged_0":"32%","merged_7":"17%","merged_14":"13%","merged_30":"9%","merged_60":"5%","returning_merged_0":"47%","returning_merged_60":"6%","later_30":"11%","later_60":"21%","later_90":"27%","answered_1d":"25%","answered_14d":"47%","returning_answered_1d":"33%","returning_answered_14d":"60%","ask_answered":"28%","ask_answered_none":"14%","ask_gap":"9","ask_n":"286","ask_projects":"236","ask_merged":"19%","ask_merged_none":"9%","ask_merged_gap":"5.5","ask_merged_low":"1.4","ask_merged_high":"9.7","week_one_gap":"2.3","week_one_low":"−0.9","week_one_high":"5.6","all_ask_gap":"8","all_ask_low":"6","all_ask_high":"10","all_ask_n":"1,821","all_ask_projects":"850","all_other_gap":"0.3","all_other_low":"−0.8","all_other_high":"1.3","weekday_better":"69%","weekday_projects":"2,261","weekday_gap":"6","who_projects":"2,843","over_half":"79%","median_people":"3","large_projects":"266","large_stars":"50,000","large_over_half":"73%","large_people":"4","top_bin":"1,175","outcome_projects":"1,199","one_projects":"702","shared_projects":"93","one_answered":"75%","one_merged":"56%","shared_answered":"64%","shared_merged":"43%","gap_answered":"6","gap_answered_low":"1","gap_answered_high":"12","gap_merged":"13","gap_merged_low":"8","gap_merged_high":"18","strict_answered":"4","strict_answered_low":"−3","strict_answered_high":"11","strict_merged":"13","strict_merged_low":"7","strict_merged_high":"19","strict_one":"140","strict_shared":"92","below_projects":"961","below_answered":"23%","below_one_projects":"572","below_one_answered":"30%","listed_projects":"800","count_word":"ten","count_title":"Ten","min_within_a_day":"78%","min_merged":"52%","min_account_days":"90"},"sentences":{"h1":"In most open source projects we measured, one person gives most of the first answers. Newcomers get merged more often there.","lede":"Porchlamp followed {first} first pull requests, each from someone who hadn't sent that project a pull request in about six months or more. Projects that lean on one person answer them within a day at least as often as projects that share the job.","tiles":[{"label":"One person gives over half of first answers","value":"over_half","text":"of {who_projects} projects"},{"label":"Merged where one person gives 90% or more","value":"one_merged","text":"of first pull requests in the typical project, against {shared_merged} where nobody gives over half"},{"label":"Silent at two weeks, then asked","value":"ask_answered","text":"got an answer in the next 30 days, against {ask_answered_none} with no comment in the same projects"},{"label":"Merged, counting every pull request","value":"merged_0","text":"of first pull requests, against {returning_merged_0} for people who had sent one before"}],"best_heading":"More first pull requests get merged where one person does the answering","best_text":"In the typical project where one person gives 90% or more of the first answers, {one_merged} of first pull requests get merged. Where nobody gives more than half, it's {shared_merged}. Answers within two weeks lean the same way, {one_answered} against {shared_answered}, but that gap is smaller and less sure.","control_text":"Stars and volume don't explain the merges. Comparing only projects with similar stars and a similar number of first pull requests, the gap is {gap_merged} percentage points (95% range {gap_merged_low} to {gap_merged_high}). Leaving out projects owned by the busiest person's own account, and projects where only one person answers at all, leaves {strict_one} and {strict_shared} projects and a gap of {strict_merged} percentage points (95% range {strict_merged_low} to {strict_merged_high}). The same two comparisons in answers give {gap_answered} points ({gap_answered_low} to {gap_answered_high}) and {strict_answered} points ({strict_answered_low} to {strict_answered_high}).","best_note":"The typical project is the median of {outcome_projects} projects with at least 20 first answers we could attribute to a person and at least 10 first pull requests at least 14 days old: {one_projects} with one person at 90% or more, {shared_projects} with nobody over half. Each project counts once, so a busy one weighs no more than a small one, and a project has to answer often to clear that floor. That's why these shares run higher than the page's counts by pull request: {answered_14d} answered within two weeks, {merged_0} merged. Another {below_projects} projects have at least 10 first pull requests and fewer than 20 such answers: the typical one answers {below_answered} of its first pull requests within two weeks. In {below_one_projects} of them one person gave nearly all of the few answers, and the typical one answers {below_one_answered}.","wait_heading":"After two weeks of silence, the odds of a merge have more than halved","wait_text":"More than half of first pull requests, {silent_14}, hear nothing from the project's people for two weeks, and the longer the silence, the lower the odds of a merge. Each point counts pull requests at least four months old that had no answer by that day, and how many of them were merged in the end: {merged_7} after a week of silence, {merged_14} after two weeks, {merged_30} after a month, {merged_60} after two months. By then the two lines nearly meet, at {merged_60} and {returning_merged_60}.","late_text":"A late answer is still possible. Of first pull requests silent at two weeks, {later_30} hear something by day 30, {later_60} by day 60 and {later_90} by day 90.","wait_note":"Share merged by the end of the data, at least four months after opening, by days with no answer. {first_settled} first pull requests are old enough to count. An answer means a reply or review from the project's people, a merge, or a close by them.","ask_heading":"Authors who asked got about {ask_gap} percentage points more answers. A comment with no ask and no tag got none.","ask_text":"Of first pull requests silent at two weeks, {ask_answered} got an answer in the next 30 days (by day 44) if the author had asked in the past week, with words like \"friendly ping\" or \"could you take a look\". In the same projects, with no comment after the first hour, it was {ask_answered_none}. Part of that gap comes from which projects get asked. Inside one project, about {ask_gap} percentage points remain. A comment with no ask and no tag shows nothing.","ask_note":"First pull requests silent at two weeks, {ask_n} with a recent ask in {ask_projects} projects. Lines show the 95% range. Across all outside pull requests the same comparison gives {all_ask_gap} points ({all_ask_low} to {all_ask_high}) for asking, from {all_ask_n} pull requests in {all_ask_projects} projects, and {all_other_gap} points ({all_other_low} to {all_other_high}) for a comment with no ask and no tag.","merges_text":"Merges follow: by the end of the data, {ask_merged} merged against {ask_merged_none}, or {ask_merged_gap} points inside one project ({ask_merged_low} to {ask_merged_high}). An ask in the first week shows less: {week_one_gap} points ({week_one_low} to {week_one_high}), measured at one week.","first_heading":"The first pull request waits longest","first_text":"Within a day, {answered_1d} of first pull requests have an answer, against {returning_answered_1d} for people the project has seen before. After two weeks the gap is still there: {answered_14d} against {returning_answered_14d}.","first_note":"The time scale is logarithmic, and the shares allow for pull requests too young to tell or closed by their author. {first} first and {returning} returning pull requests.","week_heading":"Weekend pull requests wait longer","week_text":"Inside the same project, weekday pull requests beat weekend ones in {weekday_better} of {weekday_projects} projects, by a median of {weekday_gap} percentage points.","week_note":"All outside pull requests, days in UTC, including the busiest projects that the first and returning figures leave out, so don't compare these shares with those. The inside-a-project figure uses projects with at least 30 weekday and 10 weekend pull requests. Weekend senders may differ from weekday ones, which that comparison only partly removes.","who_heading":"In {top_bin} of {who_projects} projects, one person gives 90% or more of the first answers","who_text":"Count who gives the first answer to each outside pull request, and the median project has {median_people} people giving first answers at all. In {over_half} of these projects, one person gives more than half of them. Fame barely changes it: among {large_projects} projects with {large_stars} stars or more, it's {large_over_half}, with a median of {large_people} people.","who_note":"Only projects with at least 20 first answers we could attribute to a person. Known bots are left out; a few automation accounts that look like people remain.","fast_heading":"{count_title} projects that answer first-timers quickly and merge their work","fast_text":"Picked by hand from the {listed_projects} projects with at least 25 first pull requests old enough to judge, so this isn't a ranking. All {count_word} answered at least {min_within_a_day} of them within a day and merged at least {min_merged}. Most have under 60 first pull requests, so read them as examples. These count first pull requests only, so each differs from the number on the project's own page, which counts every outside pull request.","method":["Data. Porchlamp's {snapshot_id} snapshot holds {outside_prs} outside pull requests opened from {window_start} to {window_end}, across {projects} projects with a record. These results read {read} of them, those with recorded replies after the rules below.","Left out. Bots, drafts never marked ready, accounts under {min_account_days} days old, and project members, including anyone the record shows merging or closing someone else's pull request, whatever GitHub's label says. In very busy projects, replies are read from the snapshot's even random sample.","First pull request. The author has no earlier pull request to that project in its record of the past 365 days or in the window. Every pull request here opened in the last six months, so the look-back runs from about six months to a year. Only projects whose record isn't cut off at its cap of about 500 can tell, so most of the busiest projects are missing. The split covers {known} of the {read} pull requests read, {known_share}.","Which results use what. The waiting curve, the answered-by curve and the listed projects use first pull requests only. So do the asking figures unless a line says all outside pull requests, and the answered and merged shares beside who answers. The weekday results and who gives the first answers use all outside pull requests.","Who answers. The person behind the first answer to each outside pull request: who wrote the reply or review, or who merged it. Known bots are left out. A project counts once, whatever its size, so the shares beside who answers are the median project's. The comparison of similar projects uses bands of stars (under 3,000, 3,000 to 10,000, 10,000 to 30,000, 30,000 or more) and of first pull requests (under 15, 15 to 30, 30 to 60, 60 or more), and the 95% range comes from resampling projects.","An answer. The earliest reply or review from the project's people, a merge, or a close by them. A reply needs at least 40 characters, and automated greetings and replies from bots don't count. The clock starts when a draft is marked ready.","Asking. A comment from the author after the first hour, matched against a word list: ping, bump, gentle nudge, could you review, take a look, any update and similar. A hand check of 60 matches found 57 real asks. The list also misses requests: of 60 comments that only tagged someone, 25 were asking. Tool commands and CLA signatures aren't asks, but they do count as commenting. The baseline is no comment after the first hour. The inside-one-project gap compares the groups project by project, weighted by how many each has (Mantel-Haenszel), and the 95% range comes from resampling projects. We tightened the word list after a first look at the data, so this is a result to test again on the next snapshot.","Waiting curve. Pull requests at least four months old. One an author closed unanswered drops out from that day. The {silent_14} in the waiting section uses all {first} and treats an author closing their own pull request as leaving the count, so it doesn't divide out from the curve's table."],"not_covered":["Why a project didn't answer. Silence may mean a closed list, a mailing-list workflow, or a pull request nobody wanted.","Not seen. Merges after the record's date, and any pull request's quality or size.","Cause. All of this describes what happened, including who answers and the asking and weekday comparisons. Authors who ask may also care more, or have a better pull request, and projects with shared answering may get harder ones.","When that person stops. We didn't measure what happens to a project when its one answerer leaves.","Six months is one season. Volume and answer rates may move with the time of year."],"cite":"Porchlamp. First pull requests: who answers and how long it takes. Snapshot {snapshot_id}, data from {window_start} to {window_end}. {page_url}","description":"Porchlamp followed {first} first pull requests. In {over_half} of {who_projects} projects, one person gave most first answers, and more newcomers got merged there.","title":"In most open source projects we measured, one person gives most of the first answers"},"curve":[{"days":0,"label":"0 days","first":0.3247,"first_text":"32%","first_exact":"32.5%","first_n":24917,"first_n_text":"24,917","returning":0.4686,"returning_text":"47%","returning_exact":"46.9%","returning_n":19218,"returning_n_text":"19,218"},{"days":1,"label":"1 day","first":0.2637,"first_text":"26%","first_exact":"26.4%","first_n":16461,"first_n_text":"16,461","returning":0.3655,"returning_text":"37%","returning_exact":"36.6%","returning_n":11444,"returning_n_text":"11,444"},{"days":3,"label":"3 days","first":0.2167,"first_text":"22%","first_exact":"21.7%","first_n":14280,"first_n_text":"14,280","returning":0.3027,"returning_text":"30%","returning_exact":"30.3%","returning_n":9261,"returning_n_text":"9,261"},{"days":7,"label":"7 days","first":0.1694,"first_text":"17%","first_exact":"16.9%","first_n":12485,"first_n_text":"12,485","returning":0.2282,"returning_text":"23%","returning_exact":"22.8%","returning_n":7585,"returning_n_text":"7,585"},{"days":14,"label":"14 days","first":0.1293,"first_text":"13%","first_exact":"12.9%","first_n":11158,"first_n_text":"11,158","returning":0.1706,"returning_text":"17%","returning_exact":"17.1%","returning_n":6549,"returning_n_text":"6,549"},{"days":21,"label":"21 days","first":0.1059,"first_text":"11%","first_exact":"10.6%","first_n":10384,"first_n_text":"10,384","returning":0.136,"returning_text":"14%","returning_exact":"13.6%","returning_n":5934,"returning_n_text":"5,934"},{"days":30,"label":"30 days","first":0.0882,"first_text":"9%","first_exact":"8.8%","first_n":9716,"first_n_text":"9,716","returning":0.1124,"returning_text":"11%","returning_exact":"11.2%","returning_n":5358,"returning_n_text":"5,358"},{"days":45,"label":"45 days","first":0.0635,"first_text":"6%","first_exact":"6.4%","first_n":8894,"first_n_text":"8,894","returning":0.0819,"returning_text":"8%","returning_exact":"8.2%","returning_n":4751,"returning_n_text":"4,751"},{"days":60,"label":"60 days","first":0.0474,"first_text":"5%","first_exact":"4.7%","first_n":8335,"first_n_text":"8,335","returning":0.0575,"returning_text":"6%","returning_exact":"5.8%","returning_n":4401,"returning_n_text":"4,401"}],"answered":[{"hours":1,"label":"1 h","first":0.0613,"first_text":"6%","returning":0.0795,"returning_text":"8%"},{"hours":6,"label":"6 h","first":0.1419,"first_text":"14%","returning":0.1858,"returning_text":"19%"},{"hours":24,"label":"1 day","first":0.2495,"first_text":"25%","returning":0.3325,"returning_text":"33%"},{"hours":72,"label":"3 days","first":0.3399,"first_text":"34%","returning":0.4452,"returning_text":"45%"},{"hours":168,"label":"1 wk","first":0.4154,"first_text":"42%","returning":0.5374,"returning_text":"54%"},{"hours":336,"label":"2 wk","first":0.4741,"first_text":"47%","returning":0.5991,"returning_text":"60%"},{"hours":720,"label":"1 mo","first":0.5334,"first_text":"53%","returning":0.6576,"returning_text":"66%"},{"hours":1440,"label":"2 mo","first":0.5865,"first_text":"59%","returning":0.7042,"returning_text":"70%"},{"hours":2160,"label":"3 mo","first":0.6182,"first_text":"62%","returning":0.7304,"returning_text":"73%"}],"asking":[{"label":"Asked in the past week","gap":0.0931,"low":0.0492,"high":0.1387,"gap_text":"+9.3","low_text":"+4.9","high_text":"+13.9","count_text":"286","projects_text":"236"},{"label":"Tagged someone, no request words","gap":0.0615,"low":0.0273,"high":0.0974,"gap_text":"+6.2","low_text":"+2.7","high_text":"+9.7","count_text":"456","projects_text":"348"},{"label":"Commented with no ask and no tag","gap":-0.0021,"low":-0.0202,"high":0.0167,"gap_text":"−0.2","low_text":"−2.0","high_text":"+1.7","count_text":"1,502","projects_text":"846"}],"weekdays":[{"day":"Mon","share":0.3921,"share_text":"39%","count_text":"77,349","weekend":false},{"day":"Tue","share":0.3912,"share_text":"39%","count_text":"81,115","weekend":false},{"day":"Wed","share":0.3896,"share_text":"39%","count_text":"81,272","weekend":false},{"day":"Thu","share":0.3853,"share_text":"39%","count_text":"80,129","weekend":false},{"day":"Fri","share":0.3373,"share_text":"34%","count_text":"75,193","weekend":false},{"day":"Sat","share":0.2873,"share_text":"29%","count_text":"60,895","weekend":true},{"day":"Sun","share":0.3338,"share_text":"33%","count_text":"61,575","weekend":true}],"histogram":[{"label":"0–10%","projects":6,"projects_text":"6","top":false},{"label":"10–20%","projects":50,"projects_text":"50","top":false},{"label":"20–30%","projects":125,"projects_text":"125","top":false},{"label":"30–40%","projects":188,"projects_text":"188","top":false},{"label":"40–50%","projects":213,"projects_text":"213","top":false},{"label":"50–60%","projects":295,"projects_text":"295","top":false},{"label":"60–70%","projects":280,"projects_text":"280","top":false},{"label":"70–80%","projects":237,"projects_text":"237","top":false},{"label":"80–90%","projects":274,"projects_text":"274","top":false},{"label":"90–100%","projects":1175,"projects_text":"1,175","top":true}],"who_bands":[{"label":"up to 50%","top":false,"projects_text":"93","answered":0.64,"answered_text":"64%","merged":0.4286,"merged_text":"43%"},{"label":"50–70%","top":false,"projects_text":"192","answered":0.7282,"answered_text":"73%","merged":0.4791,"merged_text":"48%"},{"label":"70–90%","top":false,"projects_text":"212","answered":0.7637,"answered_text":"76%","merged":0.5,"merged_text":"50%"},{"label":"90–100%","top":true,"projects_text":"702","answered":0.75,"answered_text":"75%","merged":0.5643,"merged_text":"56%"}],"projects":[{"key":"servo/rust-smallvec","name":"smallvec","what":"small vectors for Rust","path":"/projects/servo/rust-smallvec/","median_text":"58 minutes","within_a_day_text":"97%","merged_text":"72%","count_text":"36"},{"key":"postcss/postcss","name":"PostCSS","what":"tool for transforming CSS","path":"/projects/postcss/postcss/","median_text":"1.2 hours","within_a_day_text":"88%","merged_text":"70%","count_text":"33"},{"key":"faker-js/faker","name":"Faker","what":"fake data for tests","path":"/projects/faker-js/faker/","median_text":"1.6 hours","within_a_day_text":"90%","merged_text":"83%","count_text":"30"},{"key":"freeCodeCamp/freeCodeCamp","name":"freeCodeCamp","what":"free coding curriculum","path":"/projects/freecodecamp/freecodecamp/","median_text":"1.8 hours","within_a_day_text":"80%","merged_text":"52%","count_text":"238"},{"key":"bkaradzic/bgfx","name":"bgfx","what":"cross-platform graphics library","path":"/projects/bkaradzic/bgfx/","median_text":"2.4 hours","within_a_day_text":"87%","merged_text":"80%","count_text":"30"},{"key":"pcottle/learnGitBranching","name":"Learn Git Branching","what":"interactive Git tutorial","path":"/projects/pcottle/learngitbranching/","median_text":"3 hours","within_a_day_text":"93%","merged_text":"96%","count_text":"28"},{"key":"wolfpld/tracy","name":"Tracy","what":"frame profiler","path":"/projects/wolfpld/tracy/","median_text":"3.2 hours","within_a_day_text":"89%","merged_text":"71%","count_text":"28"},{"key":"schollz/croc","name":"croc","what":"send files between computers","path":"/projects/schollz/croc/","median_text":"3.5 hours","within_a_day_text":"78%","merged_text":"78%","count_text":"36"},{"key":"quinn-rs/quinn","name":"Quinn","what":"QUIC in Rust","path":"/projects/quinn-rs/quinn/","median_text":"4 hours","within_a_day_text":"83%","merged_text":"56%","count_text":"54"},{"key":"kovidgoyal/calibre","name":"calibre","what":"e-book manager","path":"/projects/kovidgoyal/calibre/","median_text":"4.8 hours","within_a_day_text":"92%","merged_text":"81%","count_text":"36"}]}