Jun 19th, 2007 | People
Software development occurs in the heads of the people – Pete McBreen
No matter what the problem is, it’s always a people problem. – Gerald M. Weinberg
Who does create software?
At this time, people are the only creators of the software. I don’t see how it could be changed in the near future. This is not a bad news if people were predictable, logical and rational. But they are not.
There are few issues with the fact that humans create software.
Evolution didn’t create humans perfectly suited for developing software.
1. Humans have imperfect brains (more about brain and mind contradictions)
- Humans brains cannot hold a lot of information, which is necessary for building complex programs. Also humans could easily forget what they knew before.
- Our brain is specialized on specific information processing, which is critical for our survival and life. We could quickly recognize other people faces, dangers or orient our bodies in space (unless we had a lot of booze). But it takes a lot of time to understand what is going in this damn system and why we have this bug.
- Humans have difficulty to mentally manipulate complex program models and concepts, quickly understand them and find proper solution.
- Human needs a lot of time to learn new things and become an expert, many cannot reach mastery level at all. And software development need a lot of learning and expertise.
2. Humans are inconsistent , irrational and make mistakes
If people could just act consistently, they could keep their desks clean, avoid cavities, lose weight, give up smoking, play a musical instrument, and possibly even produce software on a regular and timely basis. – Alistair Cockburn
3. Humans have difficulty to communicate ideas and understand each other
People have different ways to express and understand ideas, they need many non-verbal clues and a lot of information (which they have difficulty to absorb). In addition they have different backgrounds, experiences and knowledge. It is a real challenge to understand each other, but it is very important in software development.
4. Humans have emotions, psychology and attitudes
And these quirky traits affect our productivity, creativity and quality of work, that in turn directly affect results of software development.
5. Humans expose complex social and group psychology
Humans are social and cooperative creatures and it became our evolutionary advantage. We care about our social status, what other people think about us and our personal relations. Therefore, we show complex and sometimes not optimal behavior for creating software in teams.
6. Users are humans too
I want to add to this mix of challenges that in the most cases the end-users of software are humans too. And they have all these qualities above and, in addition, much less patience and completely opposite demands to each other.
What are the human forces?
- Productivity and motivation
- Skills and talent
- Experience and mastery, ability to learn, comprehension
- Personality, morale, attitude, emotions, mistakes
Team - long-term work relationships
- Relations, sympathies and antipathies
- Norms – formal and informal
- Leaders and followers
- Communication and shared knowledge
- Decision making
Social - organization and outside
- Social complexity
We are Software Creators
We are different from linear, powerful and still predictable computer systems. We often cannot be rational as economic forces demand. We bring a lot of inconsistency, irrationality and complexity in the Software Creation. But humans are still the most important factor in the development, simply because they are Creators.
Therefore, while we, humans, are complex and imperfect beings for Software Creation, there is no way how we can build good software without accounting and adjusting this process to our nature.
What could be done?
- Establish processes and practices adjusted to the way how human brains work.
- Provide empathy and acceptance for people mistakes, irrationality and emotions.
- Encourage and support rich communication.
- Actively facilitate group behavior and social interactions. Deal with problems early.
- Consider end-user needs at each stage of the software creation.
But even if we have excellent people, teams and end-users, there are other serious forces that affect our main goal of the Software Creation. These are Economic Forces that are driving the system and System Forces that are responsible for the system quality, structure, behavior and evolution.
Question: Do you see any way to reduce effect of the human nature on creation of a software and make it more rational?