
Boy do I have stories about this one…
I remember the day that our company chose to use SalesForce.com (SFDC) as our CRM for lead management. Basically they wanted to get rid of our old back-end system and “upgrade” to a web version with a new supplier. After a brief protest from research in a past life around SFDC, I reluctantly accepted the task to work with them.
It started off fantastically. We met with two very promising people. One was an architect and one was a configuration expert. We met with our business users and mapped out how we would exchange XML data. Our task was ridiculously simple - to have a common lead schema for vendors to submit leads to SFDC’s API. Then their API would do its magic to place the lead in the correct place(s). Then, at a later time, when our sales agent wanted to quote a lead on a product, they (SFDC) would submit the selected lead’s data to our web handler that starts the sales process with our transactional system.
Let’s talk about the leads CF: SFDC explained they don’t have a web API for leads. But they didn’t mention it up front. They mentioned it late into the project. Instead they sub-contracted some no-name company by a guy named Server-On (<- that isn’t anonymized, it really sounded like he was Server On) to write a C# web service project that talked to their API, because we wouldn’t be able to comprehend it. Once I learned of this, I laid the rules for 3rd-Party work. This included fixing code analysis warnings (some could be suppressed - we weren’t Nazi’s) and writing unit tests (80% coverage - sorry Phil Haack). Well they had us attend a WebEx conference to see what they had done. I was incognito as Vic Romano and my lead was Kenny Blankenship. There had not been any attempt at checking, let alone fixing, code analysis errors. They did have unit tests! It consisted of one class named {Something}Test that called another class with some made up variables. And it only called one or two methods in total. Nice… So we pulled Presley off of his failling Callidus project to write a web service that validates and transforms (novel ideas right?) our vendors’ submitted lead data and submits them to the SFDC’s 3rd-Party web service. Oh, and at the last minute, I was notified that this 3rd-Party web service will be hosted on our servers.
Now onto the real pain…the web service that passes a product and lead data from SalesForce.com to our transactional system’s handler. They assigned this developer Crumbie. Crumbie was presented to us as a seasoned developer. Oh, and they yanked the architect from us. So Crumbie and my team of three (not counting Presley) were trying to make this work. My lead, Mr. Bitterman was the overseer, R&B was writing the integrations with our transactional system, and Cornhusker was my middle-man, writing all of the integrations between SFDC and us. So it starts off with us having numerous sessions to bring Crumbie up to speed on what we’re trying to accomplish. We find out very quick in the process that SFDC had a terminal flaw in their design. We needed a combo-box that listed our ID-Product name name-value pairs. Easy right? Not so much. SFDC doesn’t support ID fields. All…let me say that again…ALL fields in SFDC are text, not GUID/Int/ID driven. uBersweetness… So then we got past that hurdle somehow, and then Crumbie is pointing his finger at us saying our end-point is giving hard exceptions. Mr. Bitterman quickly gets me and Cornhusker involved, because they can’t recreate the exceptions. Crumbie confirmed that he is sending the XML in the body of his request. I told Cornhusker to introduce logging into his service. I want their XML string logged first thing, then he can do what he wants with it. After doing this, and Crumbie having another exception, we looked at the log. it looked like this:
<html>
<body>
<?xml version="1.0"?>
<QuoteRequest>
...
</QuoteRequest>
</body>
</html>
So the rockstar developer did as told…he put his XML in the <BODY> of the request (ROFLMAO x 10000). Mr. Bitterman quick shot him a lengthy email with links to w3schools.com and the W3C spec regarding XML. He also included references to XSD’s, as Crumbie was submitted XML that was invalid. The email was a masterpiece - it remained on my cube wall for weeks.
After months of this pain, we got to meet Crumbie face-to-face. I asked the begging question, “So how long have you been with SFDC?” The answer, “Oh, about four months now.” Excellent. Just excellent.
And the last pain that comes to mind is that another area of our company inherited a bunch of Java code for their integrations. They must have forgotten that we told them upfront we’re a .NET shop.
In summary, this is obviously a combination of being a smaller SFDC customer (hence the 4-month old developer), them getting too big, too fast and not being able to have quality architecture (i.e. the lack of ID fields), and terrible project management.
If you ever want other thoughts, check out thoughtsonsalesforce.com.
Good times, good times…