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

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Help Net Security
Help Net Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
P
Privacy International News Feed
T
Threatpost
T
Tor Project blog
AWS News Blog
AWS News Blog
S
Schneier on Security
Cyberwarzone
Cyberwarzone
The Hacker News
The Hacker News
Scott Helme
Scott Helme
C
Cybersecurity and Infrastructure Security Agency CISA
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Palo Alto Networks Blog
P
Proofpoint News Feed
Vercel News
Vercel News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
V
V2EX
腾讯CDC
C
CERT Recently Published Vulnerability Notes
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V2EX - 技术
V2EX - 技术
C
Cyber Attacks, Cyber Crime and Cyber Security
MyScale Blog
MyScale Blog
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
D
Docker
Security Latest
Security Latest
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
Know Your Adversary
Know Your Adversary
宝玉的分享
宝玉的分享
爱范儿
爱范儿
Simon Willison's Weblog
Simon Willison's Weblog
N
News | PayPal Newsroom
Recent Announcements
Recent Announcements
小众软件
小众软件
Project Zero
Project Zero
SecWiki News
SecWiki News
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
Cloudbric
Cloudbric
博客园 - Franky
Forbes - Security
Forbes - Security
C
Cisco Blogs
Webroot Blog
Webroot Blog
H
Help Net Security

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 Speed up your merges: Parallel CI is now generally available for teams using Graphite’s merge queue 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 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
How to recreate the Phabricator code review workflow
Ninad Pathak · 2024-02-29 · via Graphite blog

When the Phabricator team discontinued development in 2021, they left a huge void in the developer tool space. Many big tech teams had all come to depend on the code review workflows Phabricator introduced. While you can continue to use the legacy platform, it makes sense to transition your team out of the system slowly.

The core principles of Phabricator still matter greatly—flexible draft changes, feedback before merging, and controlled releases. However, recreating that workflow to align with modern teams' operations isn’t easy and can require heavy lift from engineering teams.

Today's developers need easy context sharing across GitHub, Slack, and their IDEs of choice. The self-hosted Phabricator approach was practical at the time, back when it was actively maintained, and before the advent of more modern integrated ecosystems, but it no longer aligns with the current engineering workflow.

If you're moving away from Phabricator or looking to evolve its efficient workflow, this article is for you. We'll explore how to recreate the Phabricator code review system with a modern, integrated toolstack that leverages today's leading development platforms.

What is the Phabricator workflow?

Long before "pull request driven development" became popularized, Phabricator pioneered a write → review → merge → publish paradigm for peer collaboration. This approach contrasted sharply with alternative workflows that immediately publish changes externally for wider visibility.

Core principles of Phabricator's workflow

The Phabricator workflow was based on several core principles. Here are three important ones:

Treat changes like flexible drafts

Phabricator reinforced the idea that local changes should be viewed as malleable documents for exploration rather than permanent. This idea is similar to how an author's initial draft can change and improve with feedback from an editor before it's finally published.

The whole system created a psychological safety for developers to freely experiment with solutions from various angles before framing polished commits for review. The pressure to immediately market "the right take" was no longer present.

Teams had the space to express what they didn't fully grasp yet and to incubate vulnerable, unconventional ideas that may have otherwise been hidden away due to the demand for perfection.

Review diffs, not branches

Phabricator concentrated feedback on smaller sets of code diffs, reflecting incremental work-in-progress changes rather than monolithic feature branches. The result? Discussing the implementation and evaluating alternate approaches became more transparent instead of packaging everything formally every time.

Conversations focused on subtle architectural tradeoffs and future unknowns. Developers also avoided the anxiety-inducing practice of defending ambiguous technical changes.

Merge first, then publish

Phabricator deferred the external publication of changes until after they proved useful enough for integration into the team's central branches.

Phabricator pioneered the code review process, meaning changes required genuine peer reviews and endorsements before broadcasting widely.

Together, these principles cultivated an environment optimized for collaboration and feedback.

The core Phabricator workflow

The resulting workflow sequence looked like this:

  1. Write: Developers made local changes, committing frequently without concern for formal polishing. The checkpoints enabled deeply creative exploration.

  2. Review: Related commits were bundled into "Differential Revisions" for internal feedback within the team's shared context. Discussing these specifics reinforced collective wisdom—without the fear of judgment.

  3. Merge: Once technically approved through peer review, the revisions were merged into the main branch for shared integration and staging. The branching conversation focused on a collective understanding of the code and its future impact.

  4. Publish: Finished features were published externally as seamless, fast-forwarded commits consumable by less informed stakeholders. Since the team approved all the code diffs, there was enough data for stakeholders to approve the main merge.

Why recreate the Phabricator workflow?

Phabricator workflows improved how teams worked together. However, since Phabricator is no longer maintained, many teams that worked on this platform need a Phabricator alternative to recreate this workflow. You may as well be a new team looking to explore a new way to work and speed up development.

The Phabricator workflow has multiple benefits

Some of the key benefits of Phabricator included:

  • Lightweight code reviews: Open communication allowed developers to receive feedback early and often instead of right before finishing features. Therefore, people were more willing to take risks and learn faster.

  • Focused conversations: Feedback centered around small specific changes rather than big finished products, which kept discussions focused on technical details instead of presentation polish.

  • Controlled integration: Required changes to be accepted internally before making them externally visible and helped build more collective buy-in.

  • Integrated platform: Provided a suite of integrated tools for developers under one roof that enabled smooth hand-offs between previously disconnected systems.

These thoughtful practices increased transparency, alignment, and productivity when used properly.

To preserve the philosophy

Simply replacing Phabricator with a like-for-like clone misses the bigger opportunity.

A better approach is to:

  1. Keep the helpful cultural philosophies that powered Phabricator's workflows.

  2. Improve technical constraints using modern technologies available at hand.

This balance enables you to sustain and enhance the development practices that worked well without being limited by outdated legacy implementations.

The goal is to stay loyal to the insights that made Phabricator impactful and build upon.

Enter Graphite—a code review platform purpose-built for fast development.

What is Graphite?

Many developer tools have a singular use or focus. Team members are required to jump between tools to complete the feedback loop. It’s a system of systems that fractures creative flow while complicating organizational alignment and oversight.

Graphite brings all the phases of the software lifecycle into one intuitive developer platform—coding, experimenting, reviewing code, revising iterations, and tracking progress. Graphite integrates within environments engineering teams already use daily, starting with a Git CLI redesigned from the ground up, in addition to integrations with GitHub, Slack, and VS Code.

This unified toolstack eliminates the constant context switching that drains cognitive focus. Developers can execute their entire process from local commit to remote deployment, within one system designed specifically for their needs.

At the same time, the transparency and visibility gained from this consolidation enhances organizational oversight while still allowing a team to maintain autonomy.

Graphite also offers Insights: a birds-eye-view of key code review metrics like total PRs merged, average PRs merged per person, and median review response time. This data-driven approach aims to enhance team productivity by providing transparency into workflow gaps and blockers.

Consolidating metrics into a single dashboard can liberate teams from fragmented toolchains while providing the guardrails necessary for stability. It also facilitates rapid experimentation and peer learning—developers can leverage this feature to explore new ideas and share insights, fostering a collaborative and innovative environment within the team.

Why Graphite?

Before recreating the Phabricator workflow, let's briefly understand key Graphite capabilities that enable translating those practices:

Native GitHub integration

Using a GitHub app, Graphite directly integrates pull requests and branches with your GitHub repository. Changes happen within Git, and the data flows into Graphite, giving you full control and collaboration interfaces, all within the Graphite interface.

Stacked pull requests

While Phabricator organized commits into incremental diffs, Graphite structures changes as groupings of small pull requests—called stacked pull requests—each with a single focused commit. Reviews become more manageable while still tracking interdependencies and allowing incremental integration.

Interactive reviews

Teams can discuss changes within customizable workflows—adding comments, suggestions, and approvals centralized for context. Configurable notifications and a smart inbox streamline human coordination protocols around changes.

Branch tracking

Developers may have branches created using GitHub and don’t have parent branches or aren’t part of a stack. To simplify restacking, Graphite offers branch tracking directly from the command line so you can let Graphite know what the parent branch should be.

The simple gt track command in Graphite handles everything behind the scenes so you can continue working. The next time you restack or submit a stack, this newly tracked PR will be part of the stack.

So, let's see how recreating productive legacy workflows like Phabricator's code review in Graphite's natively integrated experience balances creative freedom and organizational controls even more effectively.

Recreating Phabricator workflows in Graphite

Graphite recreates this tight review and iteration loop at scale. Let’s walk through incrementally enhancing a feature via precise, scoped peer feedback.

Step 1. Start at main branch

Our current main branch contains a basic weather reporting module. It simply fetches and returns the current temperature:

import requests

API_KEY = "**********"

def get_weather():

url = f"api.openweathermap.org/data/2.5/weather?q=London,uk&appid={API_KEY}"

response = requests.get(url)

json = response.json()

temp = json["main"]["temp"]

return temp

While functional, we’d like more complete weather data, including atmospheric conditions, precipitation forecasts, humidity readings, and wind speeds. We'll Incrementally augment get_weather() through scoped, iterative peer reviews.

Step 2. Make focused enhancements locally

To begin with, let’s extend the get_weather() to encapsulate additional weather attributes:

def get_weather():

url = f"api.openweathermap.org/data/2.5/weather?q=London,uk&appid={API_KEY}"

response = requests.get(url)

json = response.json()

details = {}

details["temperature"] = json["main"]["temp"]

details["conditions"] = json["weather"][0]["main"]

details["description"] = json["weather"][0]["description"]

return details

Instead of returning just the temperature, we now return a dictionary with additional attributes. 

The purpose is to maintain existing functionality while allowing modular growth. We’ll save changes locally for isolated reviewing before pushing to main.

Step 3. Initialize branch for review

Now let’s switch to our Graphite command line tool. To push changes with GitHub, you need to first checkout to a branch, add the files, and commit them. With Graphite, it all happens with a single command:

gt create -am "add weather description attributes"

The -am flag automatically adds all the changed files to this commit along with a commit message. It will also automatically create a branch with a name based on your commit message.

Graphite organizes these changes into 00-add_weather_attributes, committed with the message you specify.

To submit the changes, you can create a draft pull request using the below command:

This allows peer review without requiring the attention of the final code reviewer.

Step 4. Discuss changes

Graphite makes it easy to discuss changes on specific parts of the PR right from the app. You can have conversation threads within the interface instead of moving to Slack. Here’s a hypothetical conversation between teammates Philip and Lisa about the code modifications and suggested changes.

Philip: Can we include the humidity %? Most weather apps show that.
[Person modifying the code]
: Humidity reading makes sense! I will extend to add that metric in the response.
Lisa:
This is solid! Wind speed would also be a great context.
[Person modifying the code]:
Good callout—will incorporate wind speed as well.

The centralized conversations around isolated changes help the team be on the same page to move forward with the development.

Step 5. Enhance locally per feedback

Let’s revisit our branch and change the weather response model locally to add humidity and wind_speed.

def get_weather():

// existing attrs

details["humidity"] = json["main"]["humidity"]

details["wind_speed"] = json["wind"]["speed"]

return details

Thanks to our previous change, adding new attributes becomes simple because we only have to add dictionary items. The rest of the function remains the same.

Step 6. Update pull request

With updates made, we can amend our existing draft pull request:

The PR synchronizes the latest code for re-review. Philip and Lisa inspect augmented attributes and approve, continuing the tight collaborative cycle.

Note: gt submit defaults to draft PRs in non-interactive mode when it’s your first time submitting the PR.

Step 7. Merge vetted changes upstream

With greenlights from the team, the PR is merged into stable main:

The get_weather() function is now available to downstream modules while letting you continue working on additional features without blocking progress due to this one.

Where to go next?

Great cultures keep building—they turn answers into questions, fueling future discoveries and improvements. Phabricator changed how developers work together long before developer productivity became a conversation. It lets them treat early ideas like drafts and get feedback on small changes instead of big finished products.

That environment helped teams feel safe to try creative things.

Hugely successful companies like Facebook, Dropbox, and Pinterest used Phabricator extensively. It earned respect for improving how developers collaborate.

Now that Phabricator is no longer maintained, Graphite helps you retain the principles and workflows while using the latest tech. Integrated with GitHub and VS Code, Graphite prevents constant switching between separate systems. This removes roadblocks that break concentration.

"We've been using Graphite extensively for Next.js the past couple of months. Stacked PRs help land smaller changes faster." — Tim Neutkens, Author of NextJs

The interactive reviews, branch tracking, and automated rules reconnect the fragments so developers can go from writing code to deployment without the blockers.

Experiment with a workflow that boosts development velocity in big tech companies. Try Graphite for free and see how you can positively impact your workflows!