Length: 50 minutes


Moonpig is an innovative billing and accounting system that Rik Signes and I worked on between 2010 and 2012, totaling about twenty thousand lines of Perl. It was a success, and that is because Rik and I made a number of very smart decisions along the way, many of which weren't obviously smart at the time.

You don't want to hear about the billing and accounting end of Moonpig, so I will discuss that as little as possible, to establish a context for the clever technical designs we made. The rest of the talk is organized as a series of horrible problems and how we avoided, parried, or mitigated them:

Moonpig, however, does not suck.

Some of the things I'll talk about will include the design of our web API server and how it played an integral role in the system, our testing strategies, and our idiotically simple (but not simply idiotic) persistent storage solution. An extended digression on our pervasive use of Moose roles will be deferred to the lightning talks session on Sunday.

Much of the design is reusable, and is encapsulated in modules that have been released to CPAN or that are available on GitHub, or both.

A note about Moonpig

The world is full of shitty billing systems. How many times have I received a threatening notice like this one in the mail?
Your account is currently past due! Pay the outstanding balance of $ 0 . 0 0 or we will be forced to refer your account for collection.
What happened here is probably this: some idiot knows that money amounts are formatted with decimal points, so decided to denominate the money with floats, and the amount I paid rounds off a little diferently than the amount I actually owed, leaving me with a nominal debt on the order of 2-64 dollars.

Sometimes you see other people fuck up a project over and over, and you say ‘I could do better’, and then you get a chance to try, and you discover it was a lot harder than you thought, and you realize that those idiots who tried before are not as stupid as you thought.

That did not happen this time. Moonpig is a really good billing system. It is not that hard to get right. Those other guys really were idiots.

Browse the slides

.tgz file of entire talk

I gave this talk at the 2013 Pittsburgh Perl Workshop on 5 October, 2013. Thanks to Dan Wright for inviting me, to ZipRecruiter for paying to send me, and to Ricardo Signes for checking over my talk for errors. (There weren't any.)

Return to: Universe of Discourse main page | Perl Paraphernalia | Other Classes and Talks