“Insanity: doing the same thing over and over again and expecting different results.” – Albert Einstein (image source)
I’ve been wondering why we do the same errors in software development over and over again and are expecting different results. It seems to me that we can’t see the fundamental issues that come with software development and thus aren’t learning that much in our guild. We are creating software professionally for half a century but still fail at completing projects on time, on budget and with suitable quality. We still think that the lack of the perfect technology is the problem and with the next “perfect” technology, we will solve all our problems at once. No chance!
There are other categories far away from technology that leads us into this situation we’re in now. They are political, psychological and philosophical. Each of these categories is so manifold, huge and abstract that it’s hard for us to address them and assess their impact in our daily software developer’s business. I think that the reason for this is the missing connection between these disciplines and ours. But the problems are all around us, and if we don’t see them – we aren’t learning that much in our guild, repeating the same errors over and over again. That’s insane!
I believe that if we break down the abstractness of the political, psychological and philosophical problems by enriching them with our concrete problems, we can bridge the gap between these disciplines.
Famous philosophers: Plato, Aristotle and Socrates (image source)
So let’s start with the most fundamental problems from the category “philosophy”. Philosophy? Infinite, useless discussions in the park on picnic blankets, drinking tea and hugging trees? There may be some prejudices regarding the normative part of philosophy but there are also very practical branches at hand. One is epistemology – the theory of knowledge. There are, of course, a lot of discussions and different views about that topic as well (why shouldn’t it? It’s philosophy after all). But if we break it down, epistemology tries to answer two central questions:
- What is knowledge?
- Is there something like knowledge?
These two questions are enough to keep a huge amount of philosophers busy. When is someone justified in his beliefs if there is no reason that one can believe something at all? When can you be really sure of something? Could it be, that you just remember it wrong or you dreamed it? Or do we live in a kind of “The Matrix”, that means, do we perceive the reality with our own senses or are our brains just stimulated by an electric signal produced by a supercomputer? When one first encounters books about epistemology, these questions among others will be asked and answered. The answers will then immediately be disproved by other thought experiments and so on – infinite discussions with no real ending nor definite answers.
But between all these discussions, there are some very important takeaways: Core problems or dilemmas that are always present when we do work based on knowledge. In this series, I want to show you some of those including examples from software development practice. I hope that this will lead to a more sensitive treatment of epistemology in your daily work. At this point, an appreciation: My content is based on the work of my former professor Dr. Alfred Holl, who researched the influence of epistemological dilemmas on requirements engineering. In one of his seminars, I assessed the agile methodology Extreme Programming and its treatments as well as violations of the epistemological dilemmas (paper in German). During this time, I could deeply dive into the fascinating field of epistemology and found very valuable insights. For me, these experiences lead to a better working life because I’m now more relaxed about all the weird things that we do in software development.
The typical pose of a software developer: Thinking (image source)
So, enough of all the preliminary skirmish. You may ask by now: Where is the connection between epistemology and software development? Well, think about it: What do we do all the day (beneath the mechanical thing of staring at the monitor and typing)? We are transferring knowledge into code. That’s the connection between epistemology (the theory of knowledge) and software development (the activity of producing code). Thus, we are heavily influenced by the dilemmas of epistemology every single day. So, I highly recommend that we get familiar with these dilemmas in the following blog posts.
In the meantime, a question for you: Have you ever heard of epistemology before?