Supply Chain and Development Expert, Steve Cutler
There is always some buzz or excitement around Profit Point. Some days, we are developing custom software for a customer or working on a Supply Chain Optimization solution. On other days, we are testing an unusual solution to an existing problem. Here’s one day that I’ll never forget!
7:00 AM
Got my first cup of Coffee and checked my e-mail. There’s been some conversations this morning but nothing urgent. I help get the kids up and ready for school. Everyone else runs out the door and I make the “long” commute to my down stairs office.
8:00 AM
I start responding to e-mail, and checking on different projects. I’m on to my second cup of coffee when I hear my phone ring. It’s a customer that I hadn’t expected to hear from today.
This customer works for a large school that is currently working on a major overhaul of their existing admissions system software to PeopleSoft. Profit Point is involved in a small but critical part of that project. We are working with the customer to write a Java module for PeopleSof. The module would be a wrapper for a 3rd party optimization engine and would be responsible for processing the data passed from PeopleSoft into a format the engine could understand, calling the engine and then returning the results from the engine in a format that PeopleSoft could understand.
I answered my phone “Profit Point, this is Steve”
“Hey Steve, I really need your help!”
He quickly explains the situation. When they try to run the module, it fails because it couldn’t find one of the libraries for the engine. The libraries allow the solver to use some additional resources and extended capabilities when solving problems with large numbers of variables.
“Do you have time for a screen share?” I ask.
“This is my top priority!” he replies.
I setup a GoTo Meeting, and start looking at the problem. The interface is all web based but something catches my eye in the output of a command.
“Hey, what OS are you running the module on?” I ask, “Some of that output looks like Linux.”
“It is hosted on Linux” he replies, “I’ve already swapped out Windows library files for the Linux equivalent”
“Hmmmm, that’s what I was going to ask next.” I respond. “Let me think about this some more and I’ll get back to you ok?”
Sounding a little desperate he says “Ok, if you can think of anything it might be let me know. I’ve been working on this for a couple of days now and I really want to figure this out!”
“Ok I understand.”
9:00 AM
I double check the code and verify that there’s no hard coded paths or anything else that might cause problems on a different OS. Not knowing what else to do I start putting in some debug statements in the code so that we can see where in the module the error is happening.
I compile the code, and send my customer an e-mail with the link.
10:00 AM
I catch up on some other e-mail all while the same question keeps tumbling through my head. “What else can I do to solve this problem?”
I start to wonder if I could setup a Linux environment and test on that. It seems like it might be worth a shoot, so I create a virtual machine and start installing Linux.
The customer calls to inform me that the new module is installed on the server. He sends me a copy of the output and I compare the debug output with the code and confirm what we already know. The error is occurring as soon as the module tries to load the optimizer with the extended engine.
“Could it be the way you are calling the optimizer?” he asks.
“Maybe, but I’m calling it the way I’m supposed to in the documentation. Have you talked to their tech support yet?”
“Yes, I’ve talked to them everything looks right but I’ll CC you into the conversation.”
11:00 AM
I run back upstairs and get some quick lunch and let the dog outside.
While eating I keep thinking about this problem. Not sure what else to try I decide my best bet is to try and replicate as many variables as possible on my side and start testing.
A little bit of digging through the logs that my customer sent earlier reveals the Java version they are using, it’s an older release, no big deal to setup.
12:00 PM
I scan through the previous e-mail chain to see what has been tried. There is a question about how the libraries are being loaded. I provide the needed information and ask if there are any special procedures required when working on Linux.
While I wait on a response, I load a demo version of the optimizer software. The demo programs all run but none of them use the same engine my customer is using. To be able to run that I would need a different license file.
I consider what my options are to get a trial license for the extended engines.
1:00 PM
I get a response back from tech support. The module is calling things right and everything should be working. They believe that the problem must be with PeopleSoft or the environment.
A few minutes later, my phone rings again. My customer is very frustrated with the response. I assure him that I’m still looking at the problem. I also tell him that I’ve been working on a Linux test environment and that I want to try and run the code locally. He seems a little interested but seems skeptical that I’ll find anything.
2:00 PM
I move the project over to the Linux test environment and get it to run after a fashion. The library we need to use extends the size of the problem that can be solved. I need the extra capacity to get a solution on the full data set. I can get a solution on a smaller dataset using the built-in libraries that come with my current license.
3:00 PM
An e-mail with an attached trial license for the extended engines pops up in my inbox! The moment of truth. I load up the module and run it against the full set of data. ERROR LOADING LIBRARY!!!!
I double check things just to make sure everything was setup right. It was, I run the test again. I get the same error!
Just to be thorough, I take one of the demo projects that came with the optimizer and modify it to use the extended library. When I try running that it also fails with the same error.
I call my customer back, “Hey, I don’t think that the issue is with your environment. I just replicated the issue.”
Stunned silence.
“REALLY”
He goes on in a voice thick with emotion “That is the best news I’ve had all day. Everyone here has started blaming me and thinks I don’t know what I’m doing…. Now, what is it you’ve done?”
I explain the setup, and the different tests I went through to get to this point and how I tested with the demo projects.
Now clearly relieved he asks me if I can send a response back to tech support with my findings. He’s heading home but he gives me his cell phone and asks me to call if I hear anything.
4:00 PM
I send an e-mail back to tech support with my findings. We go back and forth, I confirm that the error message was happening with one of their demo projects and include the code. Finally, they come back and confirm that they found a Linux specific bug in their software.
They suggest using a different library to see if that has the same problem. I change the module to use the new library and copy the compiled module over to Linux and run it there, it WORKS!
5:00 PM
I zip the module up and send to my customer.
I call my customer back and tell him the good news. He’s on a train and not home yet. I send him the file. He will try it when he gets home and has reliable internet.
6:00 PM
I get a call back. He has installed the module, and tested it. Everything works! He thanks me again for sticking with it and figuring it out and even offers to buy me a drink if I’m ever “in town”.
It’s days like these when I can help a customer get out of a crisis that I am extremely proud to be a Profit Pointer.