Socrates is quoted to have said: “The only good is knowledge and the only evil is ignorance”.
The Oracle of Delphi said that Socrates was the wisest man alive. Why? Because his attitude towards knowledge was: “I know that I know nothing.”
The first step towards wisdom is to acknowledge to yourself that, no matter how much you learn, you still do not know enough, that there is something more to learn about a subject, that there are more subtleties to understand.
You may ask: What has that to do with Software Engineering and Software Architecture?
And I’ll answer: how many times haven’t each of us fallen into the trap of thinking that we know a certain subject? When we are asked during a job interview: “Are you an expert in …?” we answer: “Sure, I am an expert; I’ve been doing this for 10 years!” But what is an expert? Does it mean you know absolutely everything about that technology, programming language, process, etc.? How can you know everything? How can you know all the pros and cons?
As a software architect you also need to be the client’s advocate and help the business. Do you really know everything so you can choose the solution that uses the pros of a technology in the most optimal manner while minimizing the impact of the unwanted side effects?
Socrates knew that he did not know, thus his humbleness helped him learn more every day. The same way a good software architect needs to be honest and not jump into some new great technology just because it is cool and everyone, including the C-executives, is talking about it.
Since we cannot know everything then how can we do our job? The answer is tricky: we can do our job when we know “enough”. What is enough? Well, maybe it is the golden mean as defined by Aristotle, but now things are getting even more confused. How do we define that? What is the mathematical formula that can help us decide: “now I know enough therefore I can be efficient”.
There are two extremes. I’ve heard someone once saying: “I watched a 10 minute video of a technology so now I know how to use it. Let’s add it to the one million line of code application and all our problems will be solved.” Obviously this is the ignorant way. By the definition of the word, ignorant is not synonym with stupid, ignorant means someone who knows something but not enough to do a good job. That is why ignorants are the most dangerous people. They know enough to fool some managers with their fancy talk but they do not know enough do a good job. Someone who does not know enough and acknowledges is set on the right towards wisdom. Someone who knows a little and thinks about himself as an expert can be found in most of the projects that fail. They are usually the people who come up with silver bullet solutions. They read one article, they heard something and then they are set like a bull towards the red cloth in a corrida, no one can stop them.