PR Size Matters
Most developers, given a choice, would rather review a smaller pull request. It's valuable to foster team agreement about what constitutes an optimally sized PR.
While smaller PRs are generally better, there can be trade-offs:
Advantages of smaller PRs
More people are likely to review them.
Reviewers are more likely to fully comprehend the changes.
More developers can work on the same feature in unison.
They tend to be merged quickly.
Disadvantages
Small PRs for changes affecting multiple interdependent parts of the codebase
can lead to merge conflicts and generally more admin maintaining git branches
and create a greater need for communication between developers and greater cost for failure to communicate.
For new endpoints: test data can be harder to create as there’s no public way of creating it.
How to measure PR size?
Merge with the main branch,
git fetch --all && git merge origin
get diff stats with the main branch
git diff --stat origin/main your-branch
and add the totals for insertions and deletions.
What to aim for for?
Maybe we can somehow measure the time takes to review?
Optimal pull request size - Small Business Programming
Simpler suggestion: we calibrate what PR-size adjectives mean and then agree on what to aim for.
tiny < 15 lines
small: 16-99 lines
medium: 100 - 399 lines
big: 400-749 lines
huge: > 750 lines
Aim for tiny, small or medium?
How big is considered problematic?
To start a discussion, let's say a problematic PR exceeds 750 lines.
This may seem a lot, but depending on the programming language, tools and frameworks used, every change could include some necessary boilerplate.
For example, to add a reasonable chunk of a product feature to Django API code, integration tests comprise 50 or more lines, and one PR could include several of these. OpenAPI documentation for APIs could add another 150 lines. This would mean the cut-off point is 400 lines of business logic, which is still a lot.
Is big always “bad”?
While it would be nice if all PRs were small, this isn’t always practical. There are legitimate reasons for larger PRs.
The whole thing needs to be tested as a whole.
The system being extended is tightly coupled.
What extra measures to take with huge PRs?
I think it's a good idea that if engineers open a huge PR, they are responsible for organizing and advertising a short meeting to walk through and explain the code to interested parties.
Conclusion
In conclusion, while smaller pull requests are generally more manageable and facilitate quicker, more thorough reviews, they are not without their drawbacks. The ideal PR size is context-dependent, balancing the need for clarity and comprehensibility with the practical realities of the codebase and project requirements.
Establishing team-wide guidelines on PR size, such as categorizing them by line count, can help streamline the review process. However, it's important to remain flexible, acknowledging that larger PRs may be necessary for certain tasks.
Subscribe to my newsletter
Read articles from Simon Crowe directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Simon Crowe
Simon Crowe
I'm a backend engineer currently working in the DevOps space. In addition to cloud-native technologies like Kubernetes, I maintain an active interest in coding, particularly Python, Go and Rust. I started coding over ten years ago with C# and Unity as a hobbyist. Some years later I learned Python and began working as a backend software engineer. This has taken me through several companies and tech stacks and given me a lot of exposure to cloud technologies.