Off-the-Shelf vs. Custom-Developed Software

One of the topics that comes up in my line of work (line of business software) are the trade-offs between implementing off-the-shelf software solutions vs. developing customized solutions. I’ve been involved in a customized software platform for 17+ years now, and I sometimes lose sight on why anyone would want to dive in to an off-the-shelf solution, assuming you have the resources to support the development of a customized one. And let’s be honest, that’s a big assumption. Hence, why the off-the-shelf market exists.

I was discussing this with my DevOps team this Wednesday and it occurred to me why customized software can be so beneficial. And it all comes down to serving the users. Serving them where they are vs. forcing them to adapt to a system because the system doesn’t support the use case they need.

I’ll try to lay out an example:

We use a third-party phone system (the name of which is not important). It has a LOT of things going for it. The biggest one is that it’s fully implemented in software. It’s not based on a PBX backend. Hence, it’s configurable to the nth degree. At least it is to them. We, the customer, can only configure what they allow us. Not surprising, or even an issue, until it comes to serving a specific use case.

You see, our business services the 3 west coast states in the U.S. Not surprisingly, they are also 3 of the most litigious states in the country. They have very specific laws when it comes to interacting with customers on the phone. One of the laws that they (kind of) share states that both parties on a phone call have to consent to that phone call being recorded. Seems simple enough, right? Either the system or a human being simply states what we’ve all heard on the phone multiple thousands of times: “This call will be recorded for quality and training purposes.”

Except in this situation, the playing of that announcement has to be included in the recording of the phone call itself. By default, our system doesn’t support this. What the use case calls for is when the call begins, the automated announcement plays, and then is transferred to a call center agent. Technically speaking, our system doesn’t start the call recording until an agent is connected to the call. Meaning that the automated announcement is NOT included in that call recording. My team has gotten around this, and configured the system to support it, but it’s been…let’s go with…rigged.

But why?

The answer is simple. We are one of X customers that our phone service has to support. And if our concerns don’t come with supporting requests from other customers, their view (not unjustly) is “tough”. Rig it and move on.

This is where customized software comes in and shines. If I were designing this system, or implementing a change for a request like this, it would consist of three simple controls:

  • A checkbox specifying a recorded announcement to play when the call first connects
  • A file upload control to obtain said automated announcement file
  • A second checkbox asking if the user would like to include the automated announcement in the call recording.

How that happens behind the scenes is not the end customer’s concern. Nor should it be. It’s the system’s responsibility to make that simple for the customer. Not the other way around.

I’ve done things like the above hundreds of times for our business. And I take great pride in what I do, and what I (and many others) have developed. We strive to make our customers’ job as simple and straightforward as it can be. Our unofficial mantra is “if the system can do it, let it do it”. And leave the users to do what (human) users are uniquely qualified to do.

Many times, our peers have marveled at our system capabilities. Some have even remarked that they would love to have/use a system like ours. (Shhh: we’re actually in talks with several firms who would like to do just that.) I like being part of something like that. Something that helps people. Makes their day (and life) just a little easier.

Can’t say that feeling would exist if my job was to support yet another Salesforce implementation. (zing)

Lee Feagin @leefeagin