As a highly paid consultant, Bruce didn't make a whole lot of friends with the "locals." Whenever his New York City-based systems-integration firm placed him at a client site, the in-house developers tended to resent him for one of two reasons: They'd either believe that he didn't bring nearly enough innovation to justify his company's three-figure hourly bill rate ("We could have thought of that, too"), or they'd feel that he was far too much of an outsider to provide any valuable contributions to their team ("We already know what's best").

Victor was no exception. Almost immediately, it was obvious that Victor had come to the conclusion that bringing in any outside consultants would just delay things further.

Victor was all too familiar with delays: In his role as lead developer at a government loan guarantor, he was personally responsible for a three-month delay in their new loan-underwriting system. And then another three-month delay. And then a year-long delay.

A Reasonable Delay

A short investigation revealed why. Victor and crew weren't actually programming the loan-underwriting system. Instead, they were busily writing an all-purpose "expert system" that could easily be "configured" by the business users to do exactly what they wanted. And better yet, it was "practically done."

Bruce started with his standard line of questions:

"Why not just use an off-the-shelf expert system?"

"Oh, believe me," Victor responded defensively. "We looked and looked and looked. There's simply no off-the-shelf system that meets our needs."

"Why did you decide on an expert system for this?"

Victor smiled. "I'm a programmer. I don't need, nor do I want, to learn the business. The business users can just tell the system what to do."

Several days earlier, Bruce had spent a long time trying to learn all about the client's loans, loan-underwriting and guarantor programs. As he spoke with Victor, visions of incredibly complex workflow diagrams and business rules flew through his head. Building a user-configurable system for all this seemed to be close to impossible.

"Can I see what you've got so far?" Bruce asked.

"Well, no," Victor said, furling his brow. "It's not done yet. But I can show you the pre-alpha release."

Victor fired up Visual Studio and ran the project. After a few minutes of compiling, a window resembling Notepad popped up. Victor began typing.

DECLARE LOAN_AMT AS MONEY.
DECLARE PAYOFF_MONTHS AS INTEGER.
DECLARE INTEREST AS PERCENT.
INPUT LOAN_AMT, PAYOFF_MONTHS, INTEREST ON FORM.
DECLARE PAYMENT AS MONEY.
SET PAYMENT = LOAN_AMT * INTEREST / PAYOFF_MONTHS.
OUTPUT PAYMENT ON FORM.

After Victor clicked the green triangle, another window popped up that had three fields: LOAN_AMOUNT, PAYOFF_MONTHS and INTEREST. Typing in some values and clicking the OK button yielded another window with PAYMENT as a field.

"I don't think that's how you calculate interest," Victor shrugged, "but you get the idea."

Bruce certainly did get the idea. They had spent nearly two years building a system that required the user to tell it exactly what they wanted it to do-all in a programming language that resembled a mix between COBOL and BASIC.

"The main thing that's missing," Victor added, "is reading and writing to a database. It's sort of a one-time use project for now."

Adding Some More Use

Acting in his role as consultant, Bruce advised management of his findings. Although they were committed to finishing Victor's expert system -- and a little skeptical of an outside consultant's opinion -- they were intrigued by Bruce's "traditional" approach and wanted to see both approaches run in parallel.

Over the next few months, Victor's team worked furiously to get their code to read information from a database. It wasn't able to save back to the database, but that particular functionality was "practically done."

Bruce's small team spent that time gathering the actual business requirements, designing a database, building an architecture and coding a basic prototype for a loan-underwriting system.

After seeing the results, management realized Bruce's "traditional" approach was the way to go and immediately canceled all development on the expert system. They directed Victor's team to work on building the loan-underwriting system, and, eight months later, the new system went into production.

Victor didn't last that long, however. When his boss initially broke the news about the expert system's cancellation, Victor kicked and screamed for hours, appealing all the way up to the executive level. Within a week, he resigned from his job in protest and encouraged his former teammates to follow suit. No one did.


The Expert System was originally published in Alex's DevDisasters column in the Dec 1, 2008 issue of Redmond Developer News. RDN is a free magazine for influential readers and provides insight into Microsoft's plans, and news on the latest happenings and products in the Windows development marketplace.