Saturday, June 6, 2009

Moose Bus Factor

One of the most common problems in many software projects is the Bus Factor. This can be especially true of Open Source projects even if they have a lot of contributors, because it is not often that a project will get another developer who is as steeped in the code as the original author.

I am happy to say that the Bus Factor for Moose is now a solid 2 and able to expand easily up to 5 and Class::MOP is the same if not better. This is not to count out the other 50+ contributors at all. Several of them have been steadily climbing in these lists over the past few months.

Here is the output of git-blame for Moose.

Total lines: 45996
       18954  41.21%  Stevan Little
       15270  33.20%  Dave Rolsky
        3556   7.73%  Yuval Kogman
        2414   5.25%  Shawn M Moore
        1038   2.26%  Chris Prather
         414   0.90%  John Napiorkowski
         387   0.84%  Tomas Doran
         333   0.72%  Guillermo Roditi
         298   0.65%  Jesse Luehrs
         274   0.60%  Todd Hepler
         259   0.56%  Lars Dieckow
         259   0.56%  Hans Dieter Pearcey
         195   0.42%  Anders Nor Berle
         187   0.41%  Matt S Trout
         186   0.40%  Nathan Gray
         186   0.40%  Aankhen
         182   0.40%  Jonathan Rockway
         177   0.38%  Jesse Vincent
         172   0.37%  Aran Clary Deltac
         150   0.33%  *initial checkin
         110   0.24%  John Goulah
         103   0.22%  Tomas Doran (t0m)
          89   0.19%  Dann
          88   0.19%  Marcel Grunauer
          88   0.19%  Ricardo SIGNES
          73   0.16%  Jess Robinson
          63   0.14%  Evan Carroll
          56   0.12%  Justin DeVuyst
          55   0.12%  Ash Berlin
          50   0.11%  Daisuke Maki (lestrrat)
          46   0.10%  Wallace Reis
          41   0.09%  Florian Ragwitz
          40   0.09%  Tokuhiro Matsuno
          33   0.07%  Adam J. Foxson
          32   0.07%  Marc Mims
          23   0.05%  Robert 'phaylon' Sedlacek
          18   0.04%  Cory G Watson
          18   0.04%  Scott McWhirter
          15   0.03%  Paul Jamieson Fenwick
          13   0.03%  michaelr
          11   0.02%  Tomas Doran (t0m
           7   0.02%  Adam Kennedy
           5   0.01%  Robert Boone
           5   0.01%  Nelo Onyiah
           4   0.01%  t0m
           4   0.01%  Mike Whitaker
           2   0.00%  Piotr Roszatycki
           2   0.00%  Eric Wilhelm
           2   0.00%  Paul Driver
           2   0.00%  Christian Hansen
           2   0.00%  hakim
           1   0.00%  Marcus Ramberg
           1   0.00%  John Douglas Porter
           1   0.00%  Jay Hannah
           1   0.00%  Shlomi Fish
           1   0.00%  Cory Watson

And here are the same for Class::MOP.

Total lines: 26107
       11109  42.55%  Stevan Little
        5107  19.56%  Dave Rolsky
        4525  17.33%  Chris Prather
        1919   7.35%  Yuval Kogman
        1606   6.15%  Florian Ragwitz
         702   2.69%  Guillermo Roditi
         647   2.48%  Shawn M Moore
          98   0.38%  nperez
          89   0.34%  Matt S Trout
          70   0.27%  Ricardo SIGNES
          50   0.19%  *initial checkin
          42   0.16%  Tomas Doran
          36   0.14%  Todd Hepler
          29   0.11%  Hans Dieter Pearcey
          26   0.10%  Jesse Luehrs
          24   0.09%  Marc Mims
          11   0.04%  Brandon L Black
           5   0.02%  Robert Boone
           4   0.02%  Scott McWhirter
           3   0.01%  Jonathan Rockway
           2   0.01%  Flavio Poletti
           2   0.01%  Shlomi Fish
           1   0.00%  Rob Kinyon

I am quite happy with this, as it now means that I can cross the street without fear.


  1. Personally I think the bus number is much higher, more like 6.

    Though if any one would get hit by a bus the project would be hurt, it wouldn't be doomed.

    If these 6 people died then we'd be fucked.

  2. Yeah, you are probably correct that it is closer to 6, but I disagree that we would be fucked if those 6 were to die. We have a few "specialists" in that list, whose combined efforts could form some kind of MooseX::Voltron that could maintain Moose while we all burn in hell.

    People like Tomas Doran (t0m) and Florian Ragwitz (rafl) have been making some serious contributes to the MooseX:: namespace of late. John Napiorkowski has really dove into the type constraint system with his MooseX::Types:: extensions.

    However, all that said, only Rolsky could cut a release as they zipped my mangled corpse into the body bag, everyone else would have to take a day to get up to speed.

  3. Sounds good!

    (Just curious: how did you tickle git-blame to make those nice lists?)

  4. I'd love to see how this was done and compare Moose to some other high profile Perl projects. I've been claiming that one way Moose makes Perl better is that it provides a better shared context for developers which smooths the learning curve, making it easier for people to join in. This feeling I have is just an educated guess based on my experience and on my examination of other high profile Perl projects. But would be fantastic to get some additional data behind it. For example, if we could get the bus data for Template::Toolkit, or Catalyst both before and after the Moose port, etc.

    This is the kind of evidence which helps counter the "Perl is write only unmaintainable garbage" which I am hearing.

  5. I'd say the bus numbers for Catalyst, DBIx::Class and Moose are all at least 6 - though a fair number of us overlap between more than one project.

    Plus the "well volunteered" process for all three projects has a bus number of at least two or three now, so were we to lose a couple of critical people at once I'm sure we'd manage to talk enough new contributors into being involved soon enough to bring it back up comfortably.

    -- mst

  6. @asjo - I didn't run the scripts, Chris Prather did. He did do some tickling though IIRC.

  7. Stevan, perhaps you forget my tenure as Moose release monkey. When the bus does strike, I'll be ready to release Shawn M Moose..