This post is about a thought I wanted to process and thus wrote it down.
At work I often find myself to be exhausted from dealing with intensive thinking patterns. In my definition intensive thinking patterns are caused by issues which occur often, cannot be solved easily and require a sustainable solution. This sounds very broad, let me give you an example.
I am currently working on a big software development project. As I joined the project only recently, I managed to grasp only a small part of the whole. While working on tasks I often have to navigate a huge file tree with complex dependencies. Doing so always requires a lot of attention and caution. Moreover, there a various build processes in place which make the project even more obfuscating. Inconsistent naming within files and code increases complexity and in result the chance of me doing mistakes. However, from experience I know, that a file or data structure with a strict syntax and taxonomy can be handled much easier. By defining naming conventions and providing a certain degree of predictability for naming concepts, complexity can be reduced drastically. On the opposite if a project has less restrictions on naming conventions, a long history of changes and dealt with various opinions, I find myself to struggle working with it.
A random encounter introduced to me to the term “arbitrary knowledge”. And I think this term describes the challenge I am facing very well. Arbitrary knowledge is knowledge which is difficult to acquire. It takes more time and effort to understand something or learn about a new topic. The unpredictability of arbitrary knowledge prevents your thought process from connecting the dots easier. So if you end up working on a complex project and find yourself struggling, it may may not be caused by a lack of effort or abilities, but on the very fact that you have to deal with arbitrary knowledge. But how can you deal with such a situation? I have thought about a few steps which help reducing the need for arbitrary knowledge and thus decrease complexity.
Simple steps to reduce arbitrary knowledge
Working with abbreviations increases productivity within a closed group, but makes it much harder for new members to tap in.
Generics are common in programming, but are also used in other disciplines. Generic terms are more likely used to describe something. We tend to abstract concepts and systems, especially in software development. But often for no obvious reason. Re-usability is not supposed be a first class-citizen when writing code.
Reuse Naming Concepts
On the other hand what should be reused are naming concepts. At best there are concepts in place at a corporate level and they do not have to be defined for each project.
No standard is worth something if people are not aware of it. Sounds obvious, doesn’t it? Often you build standards yourself while solving an issue, but never communicate these standards to your team members. Make sure they aware of them.