kcw | journal | 2000 << Previous Page | Next Page >>

Ok, with that background in mind, what have I done in the last two years here at Oracle? Looking back at all the things I've done, all the projects completed, well not that many projects really. I see practically nothing that's actually survived two years of product development. Not extremely surprising. I'm a big believer in rewriting from the ground up. The first version gets things done and it's more of a learning experience. The next version is better and can stand on it's own. But there will always be design mistakes (unless you're really good and lucky, and few people are both) or there will be new requirements and the model has to be redone.

My first project was a SQL layer for Java. The design requirements was something easy for people to use, multi-threaded and scalable, and of course it would be nice if it worked and was fast. Basically hide JDBC from the other developers. So I wrote this two-level architecture: a front end that takes SQL requests and caches the results and a back end to run the requests through the JDBC layer. Input where SQL in Strings or a procedure name plus a String array of arguments, output was a String table. The hard part was processing procedures. Since I wasn't asking for much information (like argument types or schema name) I had to search through the Oracle database for the information, which was very slow. That lead to a caching mechanism to speed it up. In the end this thing worked and I think it was pretty good. But I could see that the next version would have to be rewritten to make it more streamlined and more robust. I never got the chance and in a couple more weeks all our code will have finally been moved off of my SQL layer and to another layer developed in 11i.

Next project I had a partner and we had to develop a schema for the 3i CCT products. (3i is version 3.1 of CRM products, we then went to version 11i which is really 11.0 and syncs with the version numbers used in ERP. So really 3i = 1.0 and 11i = 2.0. CCT is Call Centers and Telephony, my group.) In tandem with this we had to develop screens and forms to edit this data. Eddy did the forms and I implemented accessing the schema data through my SQL layer; we both worked on the schema. Here is where having a partner helps. We had an incentive clause: if we finished in about a month there would some nice bonuses, which although I didn't accept, did make me work harder so that Eddy would get his bonus at least. The 3i schema did the job, but was quite limited. All the code I wrote has been replaced, and most of the tables have been replaced or so heavily changed I don't recognize them anymore. But I can still see some of our tables and some of our weird field names and conventions and the schema doc is the one I wrote with a lot of stuff redone.

My third 3i project was the statistics module. Another team was writing a few call center reports and they needed call center data for them. So I wrote a module that worked on top of our core product without any dependencies from our core product on my module. Basically it just listened to all of the events thrown by the core and built up a picture of the call center. As each call is completed it writes the data to the database. The hard part here was interpreting the events. In hindsight perhaps I should have worked more closely with the core team, because I just looked at the events and tried to fit my module around them and any inconsistencies. I never really got all the weird things ironed out. Some data just wasn't there, some events weren't guaranteed, some events came out of order. Part of it was the requirements from the reports team, which were rather stringent and specific. Still it did 90% of what it was supposed to do. I've rewritten the statistics module for 11i and it's much better now. The requirements were reduced which made everything much easier. The code is cleaner and more streamlined, although one more rewrite would be nice before I'm satisfied with the module.

Copyright (c) 2000 Kevin C. Wong
Page Created: August 18, 2004
Page Last Updated: August 18, 2004