"Code review." My knee-jerk reaction to that phrase? Nap time.
I'll be honest, I never really felt engaged during "code review" meetings at the end of an iteration. It always took too long to get and discuss the code. The room would get warmer. We'd discover things we'd want to change. Many of those changes would never be made.
Since today is Boycott a Meeting Day, I thought I'd offer an alternative we've used lately.
Here's the flow. Read Josh Susser's post for the git commands.
- Start a user story.
- Code the feature.
- Push the feature to a branch.
- A Github hook starts a CI build.
- A Github Campfire hook posts your work to Campfire.
- Click the link that's in Campfire.
- Click the Github "Pull Request" button.
- It will smartly select all commits in your branch that are not in master.
- Create the pull request.
- Ask your team in Campfire for a review of the pull request.
- The team comments in-line, right on the code.
- Make the suggested changes.
- Merge into master.
- Push to master.
- CI runs again.
- Deploy to staging.
Many teams use this "feature branch" pattern. The "code review" part is the Github pull request flow stuck right before the code goes into master.
Here's what a pull request looks like:
jm-cm-client-sets-up-recurring-payment branch is compared to
And here's what a comment on a commit looks like:
You could use normal git tools to check out a team member's feature branch, view the history, etc., but Github one-ups bare git by adding a streamlined user interface and commenting.
Why we like it
Test-Driven Development moves code failure earlier in the development process. It's better to have a failing test on your development machine than in production. It also allows you to have tighter feedback cycles.
Code reviews that happen right before code goes into master offer similar benefits:
- The whole team learns about new code as it is written.
- Mistakes are caught earlier.
- Coding standards are more likely to be established, discussed, and followed.
- Feedback from this style of code review is far more likely to be applied.
- No one forgets context ("Why did we write this?") since it's fresh in the author's mind.
I've personally loved this process. Give it a shot!