惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
S
Secure Thoughts
月光博客
月光博客
美团技术团队
雷峰网
雷峰网
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
News and Events Feed by Topic
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Forbes - Security
Forbes - Security
W
WeLiveSecurity
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
Last Week in AI
Last Week in AI
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recent Announcements
Recent Announcements
Webroot Blog
Webroot Blog
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
N
News and Events Feed by Topic
罗磊的独立博客
The Register - Security
The Register - Security
Blog — PlanetScale
Blog — PlanetScale
T
Threat Research - Cisco Blogs
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
T
The Exploit Database - CXSecurity.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
B
Blog
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Engineering at Meta
Engineering at Meta
Latest news
Latest news
IT之家
IT之家
D
DataBreaches.Net
博客园 - 司徒正美
N
Netflix TechBlog - Medium
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

Graphite blog

Introducing Code Tours: a new way to review Introducing Cursor Cloud Agents in Graphite Building the future of software development with Cursor Reimagining the PR Page: Designing for speed and focus Graphite changelog [11-20-2025] Graphite changelog [11-04-2025] Graphite changelog [10-16-2025] The future of engineering is collaborative (and already here) Meet Graphite Agent: the next evolution of AI code review Introducing frozen branches: A safer way to build on your teammates’ work Graphite changelog [09-17-2025] How we sped up code search for Graphite Chat Introducing Graphite Chat AI is writing code—here's why it also needs to review that code How I got Claude to write code I could actually ship How we built the first stack-aware merge queue (and why it matters) How we organize our monorepo to ship fast Graphite brings stacking to Tower Code review tooling: Should you build or buy? Making AI code review available to everyone Introducing: The new Graphite + Linear integration Graphite raises $52M and launches Diamond to reimagine code review for the age of AI Why AI will never replace human code review How stacked PRs unblock distributed development teams Graphite is going to Developer Week 2025 Beating the end of year code freeze How Graphite’s eng team ships code remarkably fast Why we chose Anthropic's Claude to power Graphite Reviewer AI code generation will remain fragmented How we redesigned Graphite's landing page in-house Introducing Graphite Reviewer: your AI code review companion How AI code review reduces review cycles to improve developer productivity What if you could get instant feedback on your code? The new developer toolchain Not Rocket Science - How Bors and Google’s TAP inspired modern merge queues Graphite's State of code review 2024 How Google migrated billions of lines of code from Perforce to Piper Going from 0 to 1: How to write better unit tests when there are none Down for less than four minutes a month: how AWS deploys code BitKeeper, Linux, and licensing disputes: How Linus wrote Git in 14 days Graphite is now free for startups and open source projects Launch week wrap-up (May 2024) Reduce CI costs for Buildkite and GitHub Actions Cheaper CI & faster merging with batching How Google does code review The technical learning curve at a startup is gentler than you might think Graphite will now automatically rebase your partially-merged stacks Multiple engineers can now seamlessly collaborate on the same stack of PRs Do you ever outgrow GitHub? From the 80's to 2024 - how CI tests were invented and optimized Graphite changelog [4/10/2024] 🎺 Graphite changelog [4/25/2024] 🐸 How Stack Overflow replaced Experts Exchange How GitHub monopolized code hosting Graphite changelog [3/27/2024] 🤝 The core principles of building a good AI feature Onboarding roulette: deleting our employee accounts daily Graphite changelog [3/13/2024] 🚁 Why Facebook doesn’t use Git How to recreate the Phabricator code review workflow Types of code reviews: Improve performance, velocity, and quality What's the best GitHub pull request merge strategy? Phabricator vs GitHub vs Graphite: How do they stack up? Improving team velocity through better pull request practices Moving fast breaks things: the importance of a staging environment Building trust as a software engineer Keeping code simple: moving fast by avoiding over-engineering What's better than GitHub pull request filters? The Graphite pull request inbox 7 Best Phabricator alternatives for PR stacking + code review [2024] Accurate eng estimations: predicting and negotiating the future Tracking and understanding GitHub PR stats: A step-by-step guide 8 pull request best practices for optimal engineering What’s next for Graphite Graphite Q1 Launch week: Stacking with the tools you love Graphite Q1 Launch week: Making stacking seamless Accelerating code review The Mom Test How to use stacked PRs to unblock your entire team Graphite Q1 launch week 2024 The practical and philosophical problems with AI code review Empirically sup code review best practices Call site attribution: how to pinpoint rogue SQL queries throttling your performance Every engineer should understand git reflog Post mortem: we took 124 seconds from you, here's 378 back Your GitHub pull request workflow is slowing everyone down Optimizing CI/CD workflows for trunk-based development Why we use AWS instead of Vercel to host our Next.js app How large pull requests slow down development 3 key lessons in application server optimization Trunk-based development: why you should stop using feature branches Git was built in 5 days Why large companies and fast-moving startups are banning merge commits How long should your CI take? Experimenting with AI code review CRA to AppRouter in 5 Steps: A case study with Graphite Graphite Changelog [10/18/2023] The comprehensive guide to writing the best PR title of all time How 10,000 Developers All Contribute to the same Repo
Speed up your merges: Parallel CI is now generally available for teams using Graphite’s merge queue
Stephen Pink · 2024-06-04 · via Graphite blog

Cursor Cloud Agents are now in Graphite. Create, review, and ship without leaving your PR.

author

Stephen Pinkerton

Jun 3, 2024

It’s no secret that monorepos are great for developer velocity, which is why so many engineering organizations are moving to them. But when more developers are shipping code in the same repo, it’s easier to step on each other’s toes. In the best case, developers experience more merge conflicts and need to constantly rebase their changes. In the worst case, it means broken deployments and user-facing outages.

The solution is a merge queue, which merges your changes in a first-in-first-out order — resulting in more predictable releases, more reliable software, and happier developers. The problem we’ve heard from teams using them is that long CI times can hold up their queue, and this gets progressively worse as your team ships more pull requests. To avoid these traffic jams, you need to make sure your merge queue scales with the size of your team and the speed at which you ship.

Introducing Parallel CI

In response to this feedback, we’re excited to dramatically speed up merges by bringing Parallel CI to the Graphite merge queue — giving development teams their time back without sacrificing reliability.

Parallel CI speeds up your merge queue by running your CI checks in parallel for multiple stacks at once (including individual PRs not part of a stack), without compromising on correctness. This is especially helpful if your repo sees a high volume of PRs, long CI times, or both.

For the last few months, some of the largest Graphite customers have been using the beta version of Parallel CI to merge thousands of pull requests. Thanks to their feedback, we’re able to open up this faster merge strategy to all Graphite merge queue customers - starting today.

Save time by running CI in parallel

Parallel CI increases the overall throughput of your code merge process (number of PRs merged per time period), which gives time back to individual developers.

A sample of Parallel CI early adopters have already seen 1.5x faster merges, which includes time spent running CI (33% decrease for p95, 26% for p75).

Orgs with a large number of stacked PRs are seeing up to 2.5x faster merges (60% decrease for p95, 34% decrease for p75).

When configuring Parallel CI, you can save developer time & CI runs by configuring both 1) where CI runs on stacked PRs and 2) how many PRs/stacks to process simultaneously.

The first setting lets you choose between correctness (safe revert-ability) and reducing the overall number of CI runs. Read more about these options in the docs.

The second setting (parallelism) will make your merge times approach your CI times, as CI should already be completed for the next stacks / PRs in the queue. Teams who stack more will see a greater reduction in their merge times from a higher parallelism setting. Internally, we use Parallel CI with a parallelism setting of 4, which halved our merge times. Our merges now take about 12 minutes, of which 10 minutes is CI.

The origins of Parallel CI and Batching

Engineering organizations who previously built and managed their own internal merge queues ran into these same problems, and came up with two solutions:

  1. Parallel CI

  2. Batching

A dev tools team at Uber published a great paper on Parallel CI (which they refer to as “speculative execution”), which they implemented for their own internal merge queue. Parallel CI has the benefit of higher throughput while maintaining correctness (every merged PR must pass CI on its own), but it does not reduce CI costs.

The second merge queue optimization is Batching, which runs CI on the changes from multiple PRs all at once and merges them if they pass. Batching is also good for increasing throughput, and trades correctness for lower CI costs. Specifically, each PR by itself does not need to pass CI when merging into trunk, just the overall batch of PRs. While some teams need perfect revertibility, for many fast-moving engineering teams this is a worthwhile tradeoff.

Graphite’s merge queue supports both Parallel CI and batch merging, and soon you’ll be able to use both of these strategies together at the same time.

How Parallel CI works under the hood

To learn more about configuring Parallel CI or how it works, check out the docs! The below example illustrates how Parallel CI works.

Suppose you’ve configured Graphite to run up to 3 parallel CI runs, and you have 5 unrelated PRs (or stacks of PRs) enqueued at a similar time: ABCD, and E.

  1. CI starts for A. In parallel, Graphite creates these temporary groupings and starts CI at the same time:

  • A ← B (i.e. B rebased on A), thereby testing this group of 2 PR’s at once

  • A ← B ← C, thereby testing this group of 3 PR’s at once

  1. Once A succeeds, it’s merged.

  • Graphite then starts CI for the grouping: B ← C ← D, thereby testing this group of 3 PR’s at once.

  1. Once B succeeds, the same process repeats: a group for C ← D ← E is created and CI runs.

  2. If at this point C fails, then:

  • C is evicted from the queue.

  • The runs for groups C ← D and C ← D ← E are both canceled.

5. D then becomes the first PR in the queue:

  • CI starts for D.

  • Graphite starts CI for the grouping: D ← E.

Getting started with Parallel CI

👉 To get started with the Graphite merge queue and Parallel CI, visit your Graphite settings or check out the docs.

Related articles