Pull Request Checklist for iOS Developers
When I was first starting out, the most common feedback I’d receive from other developers was to “slow down”. I think every young developer wants to be the “rockstar” on the team and appear faster and more productive than everyone else.
Personally, this would mean that I’d often create pull requests (PR) or release features without doing nearly enough testing just so I seemed “fast”. I was always too eager to move on to the next problem.
Over time, I came to terms with the idea that letting obvious mistakes slip through the cracks would have a more lasting impact on my colleagues than taking some extra time to check my work.
So, I started a PR checklist for myself to help manage that tendency.
I wouldn’t allow myself to create a pull request or call a feature-complete unless I had walked through every item on the list.
This has proven to be a really useful tool for me, so I thought I’d share it with you as a starting point if you want to create your own. Additionally, I’ve added some items to address the most common comments I would receive on PRs, so I could catch those mistakes early.
By including topics I frequently overlooked, the quality of my work and the depth of my testing have improved.
This is an open-source document, so if there’s anything I missed feel free to create a pull request or fork it and create your own!
iOS Pull Request Checklist
General
- Did I remove any extraneous
self
references? [Swift only] - If you added a
default
case to aswitch
, are you absolutely sure that's the ideal solution? - Am I duplicating existing code?
- Did you specify the correct access level for any of the new entities you introduced?
- Is everything behind a feature flag that should be?
- Am I force unwrapping anything?
- Did I resolve any ambiguous constraints / handle any breaking constraints at runtime issues?
- Am I introducing any unnecessary
import
statements? - Did I document everything that I needed to?
- Am I introducing any long-running operations on the main thread?
- Am I using any "magic numbers"? Should I add them to our constants?
- Am I following the team's coding conventions throughout my changes?
- Did I receive design and product approval?
- Could any of my new code be replaced by native functions or existing helper functions?
- Did I choose appropriate names for my classes, enums, structs, methods, and variables?
- Am I handling and logging all errors correctly?
Testing
- Are there tests? Should there be?
- Did I test different locales and languages? Did the currency, time, and date formatting work as expected?
- Did I test night mode support or remember to disable it?
- Did I test for memory leaks? Did I make everything
weak
that should be? - Did I test multiple screen sizes and orientations?
- Did I test on the lowest iOS version we support?
- Did I test what happens if the user declines/limits permission access (location, camera roll, contacts, etc)?
- Did I test for accessibility compatibility?
- Did I test a poor or offline WiFi connection?
- Did I test what happens if the API calls fail?
- Do the existing tests (unit & UI) pass?
- Did I test with
Double Length Pseudolanguage
to ensure that text wraps and can accommodate more verbose languages? - Did I test other languages we support to ensure there are no missing translations?
Creating A Pull Request
- Am I introducing any new warnings into the Xcode project?
- Did I pull in
master
and resolve any merge conflicts before opening a pull request? - Does linting pass?
- Does my PR include screenshots and instructions on how to test these changes?
- Did I remove any commented-out code?
- Did I remove all
TODO
,@hack
, and placeholder code? - Did I remove all of the
print
statements I was using? Am I doing any unnecessary logging? - Does my PR include testing instructions, a description, and a link to the ticket?