No. 0501 min read
What mediation taught me about people (not that kind of mediation)
Fourteen years reconciling billing records at Sprint taught me to check what I know before assigning blame.
No. 0051 min read
Migrating 130 switches off Marconi CEOS meant translating thousands of billing rules without a usable spec. Perl, Parse::RecDescent, and a lot of damned hex dumps.
Replacing a carrier's billing-mediation platform sounds reasonable enough until you have to explain what the old one actually does. That took some work.
In the late 2000s I led the program to replace Sprint[1]Ref. 1Sprint en.wikipedia.org's Marconi CEOS platform with Openet[2]Ref. 2Openet en.wikipedia.org FusionWorks. Across 130 switches.
CEOS had a manual, and it described roughly what the vendor intended the rule language to do. I needed to know what the software was doing to the customers' bills, including the parts the manual got wrong.
I wrote the parser in Perl[3]Ref. 3Perl perl.org with Parse::RecDescent[4]Ref. 4Parse::RecDescent metacpan.org. You give it a grammar in BNF[5]Ref. 5BNF en.wikipedia.org-ish syntax embedded in Perl and it generates a recursive-descent parser. You do have to write the grammar yourself. The module doesn't come with a psychic attached.
For each ambiguity I made test records and ran them through CEOS with a rule that isolated the question. Then I recorded what happened. Those observations became the translator's semantics. When the manual disagreed, I went with what I'd observed.
For every rule, I took samples of real records it had matched in production over the previous month, plus records that had nearly matched. Original rule on CEOS, translated rule on FusionWorks, diff the results.
Interpretation accuracy came out about 40% better than the hand-translation pilot. By that I mean translated rules behaving identically to their originals on the test corpus. I am not claiming the parser made everything 40% faster.
But the bit I remember is about eleven at night, when the diff for the whole premium-rate rule family came back empty on the first try. I'd spent all that effort figuring out what the manual hadn't said, and the parser had finally understood it.
I was quite happy to sit there with nothing to read for a change.
No. 0501 min read
Fourteen years reconciling billing records at Sprint taught me to check what I know before assigning blame.
No. 0361 min read
Corrupt how, folks?
No. 0341 min read
Your parser rejected the record.
No. 0331 min read
A bigger sequence number does not mean your missing file arrived, folks.