Integration and Integrity – It’s about Ethics!

Several times in my career I was part of former start-ups transitioning to more stable enterprises with all of the pain, the pros and the cons associated with the process

One of these challenges was related to integration. How do you take smart people who are accustomed to writing code as well as delivering cutting edge technology, and explain to them that the old ways do not work anymore?

A start-up company can afford to have teams that are islands, each team with its own product, see Conways’ law. That works well when: the start-up is the forerunner in its field, the company can sell a set of products, or even when those products do not internally interact although they present themselves to the customer as a unit.

Over time, new companies appear that begin in a different, more integrated way. These companies are more agile, and nimble than their counterparts. They move faster, forcing the former start-up to lose market share.

Unfortunately the engineering seems to be disconnected from the reality. Our heads are too deep into technology and fail to understand that we cannot play with our techno toys if we do not have clients to pay our salaries.

I saw endless disagreement over which technology is “better,” or even which is the “best.” These arguments miss the point that the users of our apps do not care if the back end is C++, Java, .NET or NodeJS.

We do not understand that these endless arguments eat important time from business; time that the business needs to focus on transforming itself.

I was reading Doug Russell’s book “Succeeding in the Project Management Jungle: How to Manage the People Side of Projects” when I found this:

There is a second aspect to integrity. Yale Law professor Stephen L. Carter quotes from the Oxford English Dictionary in his book Integrity (HarperPerennial, 1997): Integrity is “the condition of having no part or element taken away or wanting; undivided or unbroken state, material wholeness, completeness, entirety.” This is why the final step in putting together complicated systems, like spacecraft or microprocessors, is called integration. Even the toughest no-nonsense data-only engineering manager appreciates the value of integrity in the sense of wholeness and purity of integration.

These two meanings of integrity— ethical/ moral rules to guide decisions and wholeness— taken together provide the glue that binds the previous four characteristics. You will fail if you try to implement the other characteristics without having thought out your own personal sense of integrity and without understanding that your job is the integration of individuals into a team. This is often why the introduction of new project management processes and tools fail to provide the desired results.

This reminded me of the Aristotle’s “Ethics”. In short, there are three kinds of interests:

  • The Individual – each of us wants to succeed as individuals and desires to be promoted
  • The Group – we are part of a team and the team has to succeed in order for us, as individuals, to succeed
  • The Society as a whole, which in our case is the company we work for, needs to succeed in order for individual success to be achieved.

This is where the ethics breaks in the case of a company who wants tighter integration. The individual and group ethics are too strong and they do not give in to the ethics and interests of the company. These holistic interests are more important in the grand scheme since teams cannot be successful and individuals cannot succeed in their careers if the company does not succeed.

To use another analogy, a company with teams that are too strong is like the European Union: strong countries with their own languages and cultures trying to become a federation much like the United States of America. Fortunately for the U.S.A. it started as a federation with a clear definition of Federal vs. States power. Unfortunately for the Europe Union it may be too late for a tighter integration. 200 years or so ago the educated people across Europe spoke Latin and individual nations were not that strong. Today after two World Wars, hate and killing, a strong nationalism has been created. It is hard to imagine that these countries can be brought together and have their local patriotism harmonized with the consciousness of being European.

While any analogy goes so far, a company that inside is like the European Union has to succeed or else it either becomes assimilated by a stronger company or it simply runs out of business due to strong competition.

Tagged with: , , , , , ,
Posted in Ethics, Philosophy, Software Architecture, Software Engineering, Software Philosophy, Wisdom

The Silent Heroes

You know when you have a good Software Architecture when you do not notice it, it is uneventful; it’s like running water or electricity: everyone is expecting it to be continuously and uninterruptedly there.

The analogy goes deeper: if a contractor builds a house and messes up the water pipes or the electric wires then no amount of hero work can fix that. The Software Architecture of a complex application is unfixable if it is done wrong.

IMHO there is no place for heroes in the Software Architecture field. A hero is the one who saves the day after a villain brought the reality to its knees.

That is why a good Software Architect needs to do his/her work well all the time, which is easier said than done.
Tagged with: , , , , , ,
Posted in Software Philosophy, Uncategorized

The only good is knowledge…

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.


Tagged with: , , , ,
Posted in Uncategorized

My idea or yours?

As software engineers we often get into arguments with our colleagues about how to solve a specific problem. Usually several people come up with different ideas. When the time comes to pick one we may get into a fight between “mine and yours”, whose idea is better?

At this point the best attitude is to step back and reflect a little. Is it really “my idea vs. your idea”? Or it is “mine and/or yours”? If we remove all the feelings and the “ownership” of the ideas we may discover that sometimes the solutions may complement each other, that they may not be contradictory, or that my idea may work in some cases and yours in others.

This leads to Aristotle and his Square of Oppositions.

Aristotle said that there are four categorical propositions:
• All S is P
• No S is P
• Some S is P
• Some S is not P

The first two are absolutes: they basically say in our case that every solution we can come up with is 100% right or 100% wrong. We all know that this is almost never the case. In the context of the problem some ideas may solve more or less but none are really 100% one way or the other.

We are left with the last two: which one of the ideas, mine or yours fits the given problem and its context more appropriately? Which one addresses the risks better? It is very well possible that, changing the priorities of the inputs, one idea ends up being more appropriate. That does not make the other idea bad. It is also possible that both ideas may work but in different situations.

Instead of spending time fighting each other, Aristotle gives us a way to accommodate our ideas and set them in the proper context. This helps our shareholders and stakeholders. It is not mine vs. your, it is mine and/or yours.

Here we need to stop a little and consider something else: if we use “versus” then we use the “exclusive or”, XOR, so it is mine vs. yours but not both. If we use the OR logical operator then it could be mine, yours or both.

Tagged with:
Posted in Philosophy, Software Architecture, Software Engineering, Software Philosophy, Wisdom

Knowledge and Wisdom

We’ve all heard that “knowledge is power”. We’ve been through job interviews where the questions focus on how a specific technology works, even questions about how a specific API is named. Is all of this enough to make us good software engineers?

The word Philosophy comes from Greek and it is composed of two other words: “philo” = <love of> and “sophia” = <wisdom>.

What would wisdom be? Isn’t it enough to learn yet another “cool” technology to do our job? When I was a young developer I loved intellectually challenged projects. I could not wait to work on one. I would just plunge into it, imagine the coolest possible solutions, write a lot of complex code, try to prove myself smarter and better than others around me. I would go that far as being blind to the needs of the business, milestones and schedules.

After years and with age different perspective arises. We are not in the business of writing software, we are in the business of making money. What matters is the outcome: software is a mean to an end, a tool we create for our clients and customers.

After being through many projects, some successful and some more or less failures, I learned something I haven’t found in any book so far, I learned to look for the answers to these questions: how can I use a specific technology in an efficient way? How can I design and write my code so in the future it will not be expensive to maintain? What is the bigger picture, can I see the forest or I’m blinded by the trees?

This attitude means that I need to understand more than just a simple API or the newest and the coolest technology. What I need is a new set of skills that makes us good software engineers; it is the wisdom of knowing the “patterns” of behaviors that could lead to success.

It is in fact what actually makes a good Software Architect. The smart developers who know the newest coolest technology have their place in a project; after all you do need someone to understand all the subtleties of a technology to do a good job. That’s not enough. You also need the Software Architect with the wisdom of seeing the bigger picture, someone to see how the pieces fold into each other to make a big project, otherwise a software application can end up being a pile of one million lines of code that does not scale, it is slow, is has memory leaks and in the end it is useless.

Knowledge may be enough and it could very well work for some small projects. When you spend tens of millions of dollars and years on a complex project, you cannot succeed without the wisdom of a good Software Architect.

Until that is well understood many projects will partially or totally fail while the Software Architects are caught between a rock and a hard place. To the business they are just brains on a stick: “yeah, we need you but we will make all the decisions without you”, to some developers they will seem useless because “this guy does not know all the subtleties of data binding in WPF”.

It is also said that normal people learn from their own mistakes while wise people learned from others’ mistakes. If you have a complex and an expensive project can you afford to make mistakes in order to learn from them?

Posted in Philosophy, Software Architecture, Software Engineering, Software Philosophy, Wisdom

Why Philosophy?

I only liked Math when I was a child and then Computers, nothing else. In school I always focused only on what I liked, I really did not care much about my grades in subjects I hated at that time. One of those non-philo classes was Philosophy. I could never wrap my head around what the teacher was talking about; I always fell asleep each time I tried to read one paragraph from any kind of philosophy book.

I’ve been a Software Engineer for more than 20 years, this has been not just my job but also only my passion (pst, don’t tell my wife!) and my hobby. I had great expectations, like many people in this field I’ve put a lot of energy and time trying to be the best, architect, design and implement software applications that help the users, help the business succeed.

But one day something clicked: the effort is not the same as the result! No man is an island, it does not matter how hard you work and how high your ethic is, you are nothing unless people around you support you, help you and share the same view and attitude.

Obviously I needed to cry on someone’s shoulder, my wife being tired of this, I kept talking to my friends. Until one day I discover that one of my friends not only knows a lot about philosophy and the 7 liberal arts but he is also willing to teach me that.

So the journey started in the fall of 2010 when, my friend – the teacher, I, and another friend started to study philosophy books.

This blog is about connecting Software Engineering with Philosophy.

Tagged with: , , ,
Posted in Philosophy, Software Architecture, Software Engineering