As a profession, we have the perfect scam for our customers. Every time technology marches far enough ahead, and support for the old technology wanes, we convince management to allow us to rewrite the widget, or better yet start over from scratch. Over 30 years. I personally have rewritten the same Mortgage Backed Securities (or equities, or Corporate Bonds, or Treasuries) trading system for a variety of customers in C, C++, Java 1.2, Java 1.4, Java 1.5 and Java 1.6. Oh, they ask for a new feature here and there, but the bulk of the functionality never changes; they just keep paying us to do what is essentially the same work over and over. It's an unintended scam truly worthy of the descriptor: caper!
Capes are cool. They create an aura of mystery. Who doesn't feel it when they see Batman swooping in? Or Superman leaping tall buildings in a single bound? Capes are even more awesome when worn by someone that embodies evil. For example, Count Dracula. Or Doctor Doom. Of course, not all capes inspire awe; some inspire fear, dread and despair...
Derek E. works for a large national bank which has a Lotus Notes workflow application called the Creative Accounting Posting Engine (CAPE), whose purpose is to help guide commercial loan applications through approval and underwriting steps in various departments located around the country. CAPE has been in use for the last 13 years with 600 users and has mostly worked. Some users complained about it being slow, and management has had a difficult time in getting reports out of it.
Since Notes is non-relational, reporting was usually accomplished by designing programs to loop through the data. There were usually ~30,000 documents in the database, so on a good day, CAPE reporting could give a crippled snail stuck in molasses on a cold winter day a run for its money. It was originally written using Notes 4, and was ported to various versions of Notes 5, 6, 7, 8 and now 8.5.
Through the years it was modified countless times by dozens of different programmers and consultants of varied skill levels. As one might expect, the code is a Pit-o-WTFTM comprising a vast collection of @Formulas and LotusScript programming tucked away in functions saved in various places in forms, sub-forms, events, buttons, and even script libraries. The general programming style is "object oriented if someone was in the mood".
Several years ago, a large project was put in place to re-platform it using Visual basic so it could utilize relational databases. Since LotusScript is a dialect of Visual Basic, the Notes developers should have had a fairly decent handle on it. The Notes developers were trained in Visual Basic and turned loose. Given the Steaming-Pile-o-WTFTM they produced, perhaps they should have been kept on a tight leash. The project became legendary for the epic level of fail it had attained. The rewrite was never used. As a result, most of the developers and managers quit.
Sadly, Derek inherited the mess.
For the last 2.5 years, Derek worked on several small to medium sized modifications to CAPE. Most of these involved a pop-up input dialog box with scrolling lists of input fields to allow entry of up to 99 different sets of data. The data would then be stored and reported in a variety of sort orders on another form. Since Notes isn't relational in nature, the developers had decided to store the sets of data as tilde-delimited strings: field1~field2~field3~...~field99. Naturally, this was implemented in any number of inefficient algorithms, all just a little different, in every place that this sort of functionality was required. This could be replaced by more up to date techniques like embedded views or XPages, but the amount of code that would have to be located and changed simply made it too risky.
Last year it was announced that CAPE would be re-platformed onto ASP.Net using Agile methodology. A department of existing .Net developers was salivating at the chance to port CAPE to showcase their .Net and Agile knowledge. Unfortunately, it would be their first project developed using Agile methodologies. They seemed to have used Joel Spolsky's "Things You Should Never Do..." articles as a how-to guide because if it was possible to do something wrong, they did.
Since this rewrite was expected to continue for several years, Derek was asked to take on one final Lotus Notes CAPE project; to interface it with a distributed data feed to bring in data for 1-99 customers from a series of three web services: Customer, Account and Exposure, using the same tilde-separated-values data entry/collation/storage mechanism as before. Thus, if someone entered data for 50 customers, each of whom had 12 accounts, it would make 600 sets of web service calls before it could crunch the data and begin to give feedback to the user. The initial estimate was nine weeks. Nine months later it was mostly done, and ran like a recovering crippled snail stuck in molasses on a cold winter day.
After more than a year, the .Net team completed their first set of Agile story-boards and have finally started writing some actual code...
The programmers have pulled off the caper again; after 5 major Notes-ports and a failed full-rewrite, they managed to convince management to pay for yet another full rewrite using yet another set of technologies.