DEV Community

Cover image for Human Factors in Software Production Part 2
Ourai L.
Ourai L.

Posted on • Originally published at ourai.pro

Human Factors in Software Production Part 2

In my previous post, Human Factors in Software Production Part 1, I briefly discussed the limitations of individuals and the main aspects of the organizational mindset. As the saying goes, "Thoughts determine actions", and the actual behavior of members in an organization is influenced by the mindset described in that article.

Communication and Collaboration

When we aim to accomplish "big things" together, collaboration and communication are inevitable. This part is essentially about personal cultivation. If everyone in an organization can improve just a little, the cumulative effect can be significant.

Let's take software development as an example to discuss my views on this topic—

In my earlier post, Rethink Software Production, I mentioned some of the divisions of labor in software production, and each of us will take on one or more of these roles. Once you are in a position, you need to first understand the boundaries of your responsibilities and the required qualifications, meet the relevant qualification standards, and perform your duties within those boundaries. You should be able to provide professional solutions or suggestions that reflect expertise in your area.

However, it's not enough to just do your own job well. You also need to be familiar with the upstream and downstream processes and even the entire workflow. This helps everyone to work towards the same goal, align and share context, reduce friction in communication, understand the direction of the project, and make decisions that are more practical and problem-solving.

Treat the people you communicate with as human beings and show them the basic respect they deserve. Everyone has their own stance and emotions. While it's acceptable to express your stance, emotions should be controlled. Focus on solving problems through rational communication and discussion.

When there is a conflict of stance, don't rush to think that the other person is stupid and ignorant. Instead, try to see yourself in that light. Instead of trying to "dominate the high ground", "lower your stance" and try to understand the reasons behind the other person's stance. Strive to reach a consensus that aligns with the common or organizational interests.

Although you shouldn't treat others as fools, you can consider them as novices, especially when communicating across different roles. What may seem obvious to you could be completely unfamiliar to others. When communicating, use simple and intuitive language and symbols that follow conventions and best practices. Avoid creating new concepts that are just old ideas in new bottles.

Take programming as an example. Some people, out of laziness or a desire to show off, write code that is hard to understand.

Programming languages are another form of communication among programmers. Keywords are like specific verbs in a language, variables/constants are nouns or adjectives, function calls are sentences, and the entire file is like an article.

Good code is like normal writing that doesn't require much thought to understand—it makes sense intuitively. Elegant code is like a well-written article that is not only easy to understand but also pleasant to read and from which you can learn something. Poor code is like something written by someone who has not mastered the language or is mentally confused—it's hard to understand.

Whether writing code or an article, consider the reader's experience.

From Ourai's thoughts

In summary, the two main factors that affect the smoothness of communication and collaboration are attitude and the information gap. The latter is discussed in more depth in my post, Communication in the Real World (written in Chinese).

Management Practices

Although we should "put people first" and respect individual will and needs, an organization will eventually collapse if it is left to its own devices. Everything tends to move towards chaos, and this is even more pronounced when it involves conscious human beings. In nature, there are laws that maintain order; in human organizations, management is needed to maintain order.

I believe that "management" is the regulation of resources to ensure the normal operation and reduction of entropy of a system. In the context of an "organization", it mainly involves regulating people, who can be both ordinary employees and managers. Therefore, in an organization, there is not only top-down management but also bottom-up feedback.

The power in the hands of managers represents responsibility, and the greater the power, the greater the responsibility. Power is a double-edged sword. Although it can be used to cut down on subordinates at any time, it is best not to use it unless absolutely necessary, as it can easily backfire. Given this, managers usually use various metrics and tools to control subordinates to meet their own interests.

The above expression may seem negative, but it is actually a neutral statement. The specific outcome depends on the actual intentions and degree to which managers use these metric tools. Results matter, but so do the methods; there should be strategies, but also integrity. Managers who focus only on performance and metrics are not qualified managers. To be in a position of authority without the corresponding virtues is insufficient.

The ideal management should be able to inspire the enthusiasm of subordinates, evoke a sense of shared mission and achievement, and make them feel that work is not just a means of survival or livelihood but also a way of self-actualization. Ultimately, this should lead to self-motivation, self-organization, and self-management. The ideal organizational form is a decentralized or weakly centralized organization based on a shared vision.

Struggles Over Interests

In law, there are "ideal" and "actual" states—what "should be" versus what "is". The content discussed in the above and the previous post falls into the category of "ideal". Now, let's briefly discuss what the "actual" state looks like.

Humans are selfish by nature, prioritizing their own interests in their actions. This is partly due to our genetic inheritance, a basic animal instinct for survival, and organizations composed of humans are no different.

However, organizational structures artificially and publicly divide people into different interest groups. Just as it is difficult to clearly define the boundaries of responsibilities in job divisions, there will also be overlapping responsibilities between departments and groups, leading to conflicts of interest.

"Honesty" is a rare and valuable quality. It is hard for a person to be truly pure, and the more they have to bear, the less pure they become. People often go to great lengths to find excuses for their own or their group's interests, pushing aside principles and truths.

Take technology selection, for example. Statements like "considering the long-term technological development of the department or company" or "to improve program performance and team efficiency and member skills" are just politically correct covers. In reality, the focus is on satisfying one's own interests. As long as the chosen option is not full of flaws, one can come up with a thousand reasons to justify it. When two equally strong opposing views exist, there is no way to convince each other unless one side uses power to suppress the other.

The reality is that whether it is between individuals, between individuals and organizations, or between organizations, the priority is usually one's own interests rather than the common or higher-level organizational interests. This leads to friction, reduced overall efficiency, and increased entropy.

Summary

The key to improving efficiency is for organizations to act in accordance with the principles of "putting people first" and "win-win cooperation" from top to bottom, forming a corresponding organizational culture. Focusing solely on methodologies and tools for efficiency improvement is like scratching through boots—it only addresses the symptoms, not the root cause, and will easily hit a bottleneck.

Top comments (0)