the case for history

2 minute read

I came across this interesting blog post on second-order thinking as a means for good decision making. It begins with this:

understanding history

In it they mention Chesterton’s Fence:

chesterton fence

Spend enough time around tech circles and you’ll be quick to realise we’re often the “modern type of reformer”. I certainly was in my early career. Indeed, there is unlimited frustration when dealing with code patterns that do not make sense today, “ugly” code, code with “pointless” shortcuts and so on. However, those opinions are borne without understanding. They are reactions of the here and now with no consideration for the history of how we got here. The case for history is simple: it drives understanding — you know why the fence was built.

Back when I started learning about Linux, I was frequently frustrated by the names of constructs. Take for example, these Linux error names:

Error name Description
EACCES Access Error - Permission denied to the resource
EINVAL Invalid Argument - Argument passed is not valid
ENOENT No entity - The file or directory does not exist
EINTR Interrupted - The function call was interrupted

At face value, these error names seem arbitrarly constructed. Why not give them sane names: ErrorAccess, ErrorInvalid, ErrorNoEntity, ErrorInterrupted. Linux is based on UNIX, an operating system created in the 70s. At that moment in history, many C compilers had a character limit of 6 for external identifiers1. The error names are a direct consequence. EACCES left out the last S just to meet the 6 character limit. Within a moment, the frustration turned to understanding. Coming across other constructs, the functions creat and fcntl for example, became a frustration-free experience. I knew why the fence was built.

Software evolves, it’s an artifact with life. Design decisions made in the past were influenced by the context of the times. That it’s outdated but still in use is a testament to its staying power. Our responsibility is to interrogate the history of the work before our eyes, instead of lamenting on it’s supposedly unjustified lack of quality. And it may indeed be a lack of quality but more times than not, there will be a justification for its state.

The case for history is the case for understanding. The side-effect of understanding is peace.


  1. The C89/C90 standard required a minimum of 6 characters for an external identifier (e.g a function name or constants). Many compilers didn’t care to support more than the minimum. ↩︎