I worked at Centive from May 2002 to December 2004.
Centive is in the business of calculating the commissions of sales-people. When I interviewed there, I thought this couldn't be that complicated: multiply the sales amount by some percentage rate, and sum over the sales within the time period. But it actually turned out to be very interesting. For example, suppose the commission rate is 12%, paid in six equal monthly installments, and John sold something on January 1st.
Cases like this make the necessary computations extremely involved. Add to this the sheer volume of data to be handled, and doing all of it efficiently becomes an interesting challenge.
Centive had developed a sophisticated system for doing all this. It used Oracle as the database, and did the computations on the database, for efficiency. Computations were batched, with the batch size controllable to obtain maximum throughput. At each stage, the dependencies were tracked so that computations were done in order. The compensation analyst could describe the computations in little steps, and these would be "compiled" into larger steps for higher performance using various heuristics. A nice Java applet served as the UI, with sophisticated features like viewing the data according to the current sales date or some past sales date. The sales date is the sales period being computed. Say the calendar date is July 3rd. The month of June is still being finalized, so the sales date is still June 30th. At this point, the compensation analyst may realize that some payment or sale done on April 12th needs to be edited, so she could temporarily change the current sales date to April 30th and edit the transaction amount, whereupon the system would automatically re-calculate the affected amounts for April, May & June, and include those deltas, appropriated marked, in the June payments.
So much for what Centive did. What did I do there? When I joined the company, I realized, somewhat to my chagrin, that the guts of the computations were done in Oracle, and tended by the "Oracle" guys, whereas I was one of the "Java" guys. For various historical reasons, the Oracle and Java teams did not work that closely together. I did do several interesting things on the Java side, and managed to end up working more closely with the database guys. Here are the highlights of which I'm particularly proud:
(I will add more details on the above soon.)
During this time (2002 - 2004), despite having a good product, Centive experienced a slowdown in revenue, had several deep layoffs, and re-did its funding, which occasioned changing most of the management. I disagreed with several decisions taken by the new management, so I finally left the company. Actually, I feel that the company left me. I was sorry to see it go.