I used to do a lot of work for a small company with an over-inflated concept of the value of their proprietary “trade secrets”. This was a marginally profitable twenty-person company providing standard CRM capabilities that at least three other companies offer, and it was not exactly rocket science. Yet they maintained that the details of the implementation — the “secret sauce” as they liked to call it — was so revolutionary that there just had to be sabateurs from their competitors lurking in the bushes just outside their office windows in hopes of getting a glimpse of it.
Predictably, I was obliged to sign a non-compete / NDA about five miles long in order to implement and enhance their “secret sauce”. I usually don’t pay much attention to such things since (1) as an ethical person I wouldn’t even consider selling their Trade Secrets, valuable or not; and (2) in practice such agreements are largely unenforceable anyway (which covers the case where they might imagine a breach on my part and thus attempt to prevent me from earning a livelihood).
The third and most important reason why I didn’t feel the need to play so “close to the vest” with their code was because by any objective measure, the code was virtually worthless to anyone but my client.
One reason my client’s code is worthless is explained by Sturgeon’s Law, which states that “Ninety percent of everything is crap”. One company’s treasures are inherently another company’s crap, which is why the companies bother to compete with each other at all. If Company A ever decides that Company B’s “secret sauce” is valuable, they will seek to acquire or merge with Company B, rather than compete with them.
Paradoxically, another reason code can be worthless to anyone but its owner is because it’s actually good code. Most developers by definition are average or below average, so if you have an above average architecture and implementation, it may be impossible for the Morts at some other company to comprehend it, much less get any actual use out of it.
But the main reason the code has value only to the client is beautifully explained by Dennis Forbes in this provocative post. The short version: due in part to the pressures of deadlines and budget constraints, most custom code is not designed for reuse, is not documented, and over time becomes barnacled with cruft that makes it difficult or impossible to be used outside the context of that company’s projects, practices, and development teams.
Any developer who has been around for a few years has seen more than one code base that is so difficult to learn and work with that they would just as soon throw it away and rewrite it from scratch. Frequently, they do just that — sometimes without bothering to ask for permission. Most clients just want results and don’t care how they are acheived.
All of this is not to say that the original authors of that code are idiots. Just the opposite. While idiocy is a possible influence, the code most likely got the way it is because of expediencies forced on the developers, and by failure of the client to commit sufficient resources to keep the code base up with technological advances.
As an example, the code base of my secretive client reflects the design trade-offs imposed by what was available in terms of tools, technologies and resources in 1995. To their credit, the client recognized a desperate need to update the technology. I was then given a budget and a deadline and did the best I could with those trade-offs based on what was available to me in 2002. But the company fell on hard times and sidelined the project about halfway through.
I’m sure they are thinking that this code can be resurrected and finished at any time, when the truth is it has been slowly decomposing to the point where I would likely start over almost from scratch, were they to hire me to “finish” it today. We are two, going on three, framework versions beyond what I was working with in 2002, there are large parts of the project that can now be bought rather than built, and frankly, after this length of time I’d have to spend time learning the code base, as if someone else wrote it.
In short, it’s worthless even to my client, much less to anyone else. Most intellectual property is like this; its value exists largely in the owner’s mind, due to their ego investment; and any actual value it has is not very transferrable anyplace else.
{ 1 comment… read it below or add one }
I gotta hand it to you this time, Bob. You took the cake. Truer words have probably never ( or at least close to ) never been spoken about software development. Code is just putty. Ideas are what’s valuable, possibly even the algorithms. But even those have “Best if used by” date attached to them. That’s because just like in 2001, after the monkey picked up the first bone and used it as a tool, it didn’t take much for another to say “Hey, I can do that ! And I can swing it faster and straighter!”.
All code should carry a “freshness” sticker.