DEV Community

Nathan Kallman
Nathan Kallman

Posted on • Edited on • Originally published at kallmanation.com

There are 10 types of software

Those that are executed from binary and those that are not.

Okay, corny tech jokes aside (I know those kernels are hard to swallow ;), personally I have seen software only follow one of two paths with very little falling in the middle.


Type zero

The software's only usage is testing by the developer. The problem it solves doesn't actually exist; or maybe it doesn't actually solve the problem it's supposed to; or maybe it's too buggy, or cumbersome, or .... Whatever the reason, no one uses the software. Eventually the developer abandons it and no one mourns the end.

Type one

The users of the software almost immediately become critically dependent upon its operation. Any other solution either cannot do what this software does or is too costly in time, expertise, and money to be a viable replacement. Any interruption of service would be viewed as a severe situation; the users cannot realistically accomplish their goals in any other way, without the software it simply is not done. The only scenario this software stops being needed and used happens when the software is superseded by strictly superior software.

It does not matter how poorly written, poorly supported, or outdated the software is or becomes, once set upon this path, there is no getting off of it.


Now, I'm not saying that software either has 0 users or global adoption. The software on path two may very well have only a single user. The point is that to that one user, the software absolutely, positively, needs to work.

Don't believe me? Feast your eyes upon New Jersey's call for COBOL programmers or how long Windows XP has been lurking. Or an anecdote from a professor, asked by a colleague how to resolve an error in a software package they had never heard of... The professor had written that software 30 years ago and their colleague had depended upon it every month since it went into operation.

Ah but all those examples were important software; foundational. What about things that aren't as important as operating systems and unemployment benefit applications? Facebook is just for keeping up with friends, right? What about all the schools/churches/organizations using it to announce closures for inclement weather and other time critical information. Youtube is used by local cities to post instructions on how to file taxes. StackOverflow anybody?


So what's the point?

I don't know; maybe this is just a cautionary tale. We sling code left and right; ripping new software into existence from the void every day. We do it carelessly; we do it for fun; we do it without a second though. After all, software is "easy" to change; just write some new text into the editor. But it's also like concrete, flowing, molding, changing to our every whim. Until it sets and then it's just there. It is forever in the shape it was left in. For better or worse, we leave our legacy every day. So, are you leaving stumbling blocks or are you setting up cornerstones?


What do you think? Have you observed this pattern or do you think there's a third path?

Top comments (0)