“The users want some changes on the ticket form,” Bucky, the smiling intern said. “I was told I should talk to you.”
Jesse laughed. “Oh, I know that form well.”
Their company tried to give interns interesting projects. They didn’t simply use them as cheap labor for scut work, like cleaning up the documentation site or taking notes during meetings. No intern was ready to tackle anything complex without help, and that’s where their mentor came in. The mentor was an experienced developer who could provide guidance and sanity-check everything the intern did.
Years earlier, Jesse had been the intern. The service desk had just switched to a new ticket tracking system, “Ultra,” that the users hated. The ticket entry form required users to dig through acres of drop-down lists every time they used it. They wanted a simplified version that only prompted for their one required field.
Jesse did a little research with his mentor and learned the ticket system was supposed to be extensible via a web service. They decided the easiest solution would be to point an InfoPath form at that web service. It would make maintaining the form easy, and wouldn’t require any real code. The users also had experience with InfoPath, so once they heard Jesse mention it, they decided the UI must be in InfoPath.
Jesse began by calling the Ultra admins. “I was hoping you guys could tell me how to access the web service for our deployment.”
“Web service? There is no web service.”
Jesse assured them there was an API. After a long discussion that repeatedly included the question “What did you say you were trying to do?”, the admins vetoed his idea. “There is a web API,” they admitted. “Irregardless, you can’t use it. We can’t guarantee it won’t break between releases, so only one application may use it: UltraConnector.”
Not the answer Jesse wanted, but it gave him a starting point. He talked to his mentor and then found the dev behind the UltraConnector application. Where was it? What was it? How could he use it?
“You can’t.”
UltraConnector monitored an FTP site. When issues were detected on the mainframe, a suite of monitoring applications pushed a flat-file to that FTP site. UltraConnector processed the flat-file and created tickets based on its content. “But that share is used for a number of apps, and we don’t want any more accessing it.”
Jesse wasn’t ready to learn the mainframe’s non-standard COBOL dialect just to send tickets to Ultra. Taking his sanity into his own hands, he climbed the thousand steps to the offices of the Ancient Greybeards, the mainframe programmers who had worked for the company longer than he’d been alive.
One of the Greybeards pulled down a dusty binder of arcane knowledge. He flipped through it, nodding sagely at the cryptic scratchings. “Our failure monitor process can create tickets. It logs a ticket for any failed operation. If you were to attempt to write a file to a nonexistent directory, that would trigger an error.”
There was more to it than writing a file, because there was a lot of metadata they needed attached to the ticket. But the Greybeards were wise, subtle, and quick to anger. They knew how to make the monitor dance without changing a line of code. The only problem was that to write files from a custom application, one needed to use a proprietary socket library to talk to the mainframe. There was no way they could license it for every user, which meant Jesse was left to implement his final solution this way:
- The user fills out the SharePoint hosted InfoPath form and hits submit.
- The submit button posts the data to Jesse’s custom “TicketGenerator” web service, which references the socket library.
- TicketGenerator connects to the mainframe and attempts to write a file that can’t be created.
- The mainframe monitor detects the fault and sends a flat-file to the FTP site.
- UltraConnector checks the FTP site every 15 minutes, and converts unprocessed files to API calls on the Ultra system.
Jesse built the system, showed it to his mentor, and then released it to the users. To his shock, not only did it work, but the users loved it. Despite the fragile arrangement, it never dropped a ticket. Jesse had a job offer before his internship ended, and despite his experience as an intern, he accepted it.
Two years later, everything came full circle.
“I built that form,” Jesse told Bucky, “but when I show you how it works, don’t hold it against me.”