My biggest Pull Requeston Dragoș Străinu's blog
I was working on a white-label mobile application in active development. (If you plan to develop a white-label mobile app, JUST DON'T!!! 😅 But this is a story for another post.) I implemented a BIG FEATURE that was very tightly coupled with back-end implementation.
The PRs were created, reviewed, and approved by front-end and back-end teams.
Everything was tested, some small bugs were found, I fixed them and was ready for merging to
But some severe bugs and priority features had to be done,
so the back-end developer had to switch working on them and the back-end implementation was not shipped in production.
I didn't want to merge my commits in
as the implementation in back-end may be changed after addition of other requirements
and decided to wait until the back-end developer will be free and ready to merge his implementations.
I thought that the feature will be shipped the week after.
Meanwhile, I started working on the next feature that was based on the BIG FEATURE.
When I finished I didn't create a new PR in
master branch as the
feature2 branch included changes from
After a week I asked the back-end developer about the status with BIG FEATURE shipment to production,
but he was busy with other tasks and as the app was in active development I continued developing on top of
I was working alone in that repo and the front-end devs were helping me only with pair programming or opinions on feature implementations. No one needed my changes and I took the easy path of just working on features/bugs and creating builds directly for testers and onboarding clients.
Time has passed, the back-end developer forgot about the BIG FEATURE.
I was working on features and bug fixes.
refactor2 branches were all created on top of
One day I understood that the PR in
master branch will be an ENORMOUS lesson for me and the team.
Another developer joined the project so I created a new
dev branch from
feature16 and for the last 2 weeks, we created and reviewed PRs in
Finally after 140 days from the beginning of BIG FEATURE the back-end implementation was merged and shipped to prod.
And I was ready for my biggest Pull Request (so far).
The Pull Request
It was so big that BitBucket couldn't display it. The only way to review it was by checking each commit separately or maybe using a desktop git client. Additional complexity added mobile-specific files that were generated by XCode and Android Studio.
420 files changed, 25739 insertions(+), 19429 deletions(-)
Beside 420 files maybe 20-40 files were added and removed in between.
- Changes from 140 days
- 163 commits
- 36 intermediary branches
In the end, I received 3 approves and only one comment.
"Omg" - Tech Lead (implemented the back-end for BIG FEATURE)
- Make small PRs.
- One feature | bug-fix | refactor per PR.
- If the PRs includes several features squash commits to have one commit per feature
and let the team review each commit separately.
- Don’t squash everything.
Let styling/formatting commits be separate from implementation commits.
If features relay on other features that are not in
master. Or you are working on a BIG FEATURE, divide BIG FEATURE in big-feature-phase-1, big-feature-phase-2. Create temporary branches like
devand make PRs in
"Fix PR comments"commits and then squash them.
If PR is big and you have several comments, fix them in a separate commit and let reviewers check only it. After approval squash
"Fix PR comments"commit in previous feature commit.
- Be kind to your reviewers.
- Make small PRs.