LCA07 talk on UQDS Abstract

(What follows is my Abstract I'm submitting to LCA07 on UQDS)

Contributing to open source projects is hard. If you've found a bug, you have to go to the effort of fixing it, testing that your fix works, making a diff against the upstream repository, and submitting your patch. Once you submit your patch, you don't know if it's going to even be accepted.

In the Twisted project we now enforce strict rules, such as usage of a task tracker, branch based development using subversion, mandatory unit tests and absolutely no commits to trunk without an independent code review. This process was pioneered at Divmod.org, and brought into the Twisted project later.

Branch based development allows us to remain agile, committers can work on what they want to without fear of it clashing with anyone else's code. Once they're finished, and an independent review has passed the code, the code then may be committed to trunk. Casual committers are treated just the same as everyone else. A casual contributor may submit a patch, and get it accepted or rejected based on the same strict rules that apply to the project leader and the top committers.

Initially, we feared that enforcing these strict rules for an Open Source project would drive casual contributors away. Our finding is that our changes resulted in an engaging experience for contributors and core developers. The community as a whole was motivated to produce code of a high standard. Contributors stay around longer, and care about the resulting code far more than we have previously seen.

Contributing to an Open Source project is hard and requires a lot of motivation. By putting a strict development cycle in place, the twisted project has found that the quality has improved and, contrary to common wisdom, the rate at which contributions occur has increased.

The Twisted project lives at http://twistedmatrix.com and #twisted on irc.freenode.net

Tools we use are:
  • http://svn.tigris.org/ Subversion for source control
  • http://www.divmod.org/trac/wiki/DivmodCombinator Combinator is a tool we use for managing our branch based development
  • http://buildbot.sf.net/ BuildBot for automated builds
  • http://trac.edgewall.org/ Trac for bug tracking

More information about the Ultimate Quality Development System can be found at
  • http://divmod.org/trac/wiki/UltimateQualityDevelopmentSystem
  • http://twistedmatrix.com/trac/wiki/ReviewProcess


Ultimate Quality? What's That?

I hack on the Twisted project. I have for years now. I only just found out I have a jerub@ email address there. I've had that for years too. I've been a lot more active lately than previously. I've got pypy running the unit tests, and I've been doing the odd code review.

Twisted has a development structure that I'm growing quite fond of. The idea is to produce code that we can call the 'Ultimate Quality Development System.'. Sometimes it feels like everyone is going on a health kick, all at once. Everyone's going to the gym, working out, doing all the right things, and when someone does something wrong (eats a hamburger) they get pounced on.

What does UQDS mean? It means that we have a software process. Not just a bunch of people who commit to our SVN repo. How does it it work? Well the process looks like this:

  1. Ticket is raised in the tracker.
  2. One or more people work on this ticket. They will accomplish the task set out in the ticket (be it Task, Enhancement or Defect)
  3. A person other than one of the developers from the previous stage reviews the changes. He may reject the changes or accept them.
  4. Then, and only then, do the changes get committed to trunk

What this means in real terms, is that folks say, "Why do I need to go through this process, it's an obvious fix for an obvious bug, a one liner."

An example that comes to mind that was a real situation that happened recently. A bug was reported, the fix was given, after referral to the bag tracker and the development process a test was also given. The ticket reached review, and I reviewed the ticket.

After reviewing the ticket, I made a branch (combinator is great for python/svn work), applied the patch with the test in it, fiddled around so the test was in a more appropriate file, changed the test so it tested the abstract base class (because that was where the code being tested was defined), wrote two more tests and found another bug.

That's why UQDS is awesome. Trunk isn't allowed to be changed without it being reviewed, and reviews find bugs. It was just a 1 line obvious change, and there was nothing wrong with the change, but by putting it through the formal process someone eyeballed the code a bit deeper than it had been eyeballed previous and another bug was found.

The idea is to never let code into trunk that hasn't been reviewed and passed on. Even trivial docbugs get reviewed, and even those trivial docbugs reviews find more things that need to be fixed, and the review will either issue another ticket, or block the merge until the problems are fixed.

This process exists in other places, but I've never seen it taken so serious as in twisted. Nor so successfully.


Humbug AGM

Yay! The AGM is still going, but we've had some interesting content so far.

Mark was unopposed as president. Clinton was opposed successfully for Vice President by James Isseppi, Secretary by David Seikel, Treasurer by Rohan Smith and Librarian by Scott Wilson.

There was a big ado about nominating officers who can pack up meetings and stuff. Now the exec will nominate a group of people who will be able to setup/packup.

Apparently not enough attending humbug members are blogging. My name was taken in vain. Apparently we have too many bloggers on planet humbug are not currently attending members, and I'm one of the few attending financial members who is actually blogging. I've not blogged in ages so I found that a little surprising that my name was mentioned... That's why I'm sitting here on Elspeth's iBook writing this during the meeting. :)

Software freedom day organisation is in trouble. It's not really going ahead properly - I think it's more or less entirely stalled. We have stuff to hand out (hundreds of live-cds) but not really anywhere to hand it out. Hmmm. Any ideas? Elspeth is now the events coordinator, so she's going to have to think seriously about this.

I should really sit down and blog about my work with running twisted's unit tests on top of the pypy python interpreter.

Well, congratulations everyone who defeated Clinton in this election, Clinton, better luck next year. Clinton for President!