We’re a group of a bit over 10 programmers at Nelen&Schuurmans. Coordination and quality and interaction is something you’ve got to watch carefully with a group of that size.
I’d like to mention one item that’s we’re using more and more: github pull requests. One programmer works on a branch and then submits a pull request so that others can look at it.
Some comments:
The “files changed” tab is what I use most. Just go through the code and add comments per line where needed.
You learn new stuff yourself. Django functions that you didn’t know
about. A colleague spotted @cached_property
in one of my pull
requests.
I got to explain
it and he learned something useful. In the same way, I keep learning
things myself.
A quick comment here and there help converge each others’ style.
Import ordering, for instance. Or .rst
syntax tweaks.
Good for keeping you on track: see this comment by a colleague on my pull request: “where is the changelog entry and where are the tests?”. Oopsie! I corrected it afterwards of course. That’s where pull requests are good for.
You know someone else is going to look at it, so you pay a bit more care to what you’re submitting.
How did we get it started? Someone suggested it in a team meeting and started using it himself. And actively shopped around for others to review his code. This way it immediately became the norm for that individual package and others started to join in.
In the week after, a project started with three programmers. They agreed on “doing it with pull requests” and stuck to that decision. Three more converts! Each of them now regularly use it in other projects, too, taking even more developers down the Righteous Path of Pull Requests.
The core reason why it spreads, though: pull requests work great. Quality improves, everybody learns more, knowledge spreads, etc. Nice!
My name is Reinout van Rees and I program in Python, I live in the Netherlands, I cycle recumbent bikes and I have a model railway.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):