People

  1. Disclaimer
  2. Male pronouns and gender-specific nouns should represent both genders.

  3. Why bother with people?

The question in the title of this section may be answered in different ways:

{}

because:

  • There is no need in thinking about human factor in the IT since programmers are adults capable of solving their problems by themselves since programmers belong to the most intelligent part of the population.
  • Claim for human working conditions is not more than justification of laziness and attempt of trade unionists to bring the evil of inefficiency of workers upon the enterprises known from the socialist countries
  • By paying wages the enterprise buys the working power of an employee and therefore has the right to demand from him full devotion to the task he has to fulfil. If the working conditions or other issues (career development) do not satisfy him, he can choose another firm.
  • Real financial expenses cannot be justified by unclear, only potential improvements (productivity increase promise).

{Quality}

In software development/engineering quality of the product depends on the way it was created (thus the notion of "quality of software development process"). At present, most important - and subject to failure - decisions are made by humans. Improvement of this part of the software development process is not possible unless one understands the way people think and act.

{Productivity}

The excellent performance of some artists, writers, scientists and other intellectuals was often result of a hard and efficient work. In most cases however, they were not forced to work hard and efficient but have done so because they were motivated by themselves. If we understand what aspects of the work motivates and fills the people with enthusiasm, we perhaps can get a team of Visual Basic-Paganinis and C++-Schopenhauers even without the need to pay them better.

{Turnover reduction}

As stated in the first answer to the question why one has to think about people, if the working conditions do not satisfy a person, he can change the firm. And he does actually. Expenses due to turnover of staff are not only costly but also may cause serious problems since the greatest part of a company knowledge is stored in the brains of its employees. We could try to prevent them to leave if we know what they need. Perhaps it is cheaper to give them what they want than do without their experience or knowledge.

The advantages of a better understanding (and acting based using the knowledge gained) usually result in many improvements. So, if a person participates in production of software of high quality, then he is motivated by the work he does and puts all the creativity and energy into his work (productivity is increased) and it is less probable that he will leave the firm because there are few firms offering high-quality products and because his job-related self-satisfaction is maximised (turnover reduction).

Therefore the results of application of brain to social aspects of software development may yield results which can be described as

{Quality} È {Productivity} È {Turnover reduction}

  1. The nature of programming

To understand the problem of people in software development projects it may be helpful to examine the characteristic properties of the craft of programming. According to Brooks there are several joys of programming:

To my opinion the list omits one of the strongest sources of self-satisfaction of a good programmer, namely the solution of sophisticated problems. They occur relatively infrequently and usually require a high amount of concentration, communication abilities and broad technical knowledge.

Another joy of programming is a possibility to experiment with new functionality of some system. Often experimenting is the most efficient way to learn a new programming language. Like children playing with LEGO bricks, programmers play with functions, classes and interfaces.

The comparison of programming to poetry may seem inappropriate to person who never has programmed but programmers who work for a long time with a certain programming language or hardware platform develop an emotional relationship to it. That results in searching for solutions, which are most elegant with respect to that language. One experiences an enormous pleasure in creating code that performs complex tasks, yet works properly and looks quite simple, which is hard to describe with words…

On the other side this relationship results in a number of negative consequences, namely

a)

if ((a>x) && (b<y)) {

performCalculation(a, b);

printf("\n%s %d, %d\n", a, b, message);

}

else error();

 

if ( (nA > nX) && (nB < nY) )

{

performCalculation(nA, nB);

printf("\n%s %d, %d\n", nA, nB, szMessage);

}

else

{

error();

}

b)

function act($name,$pid,$s)

{

if ($s)

{

return;

}

else

{

$sql="insert into actions(name,project_id) values(" . $name . "," . $pid . ")";

mysql_query($sql);

return mysql_insert_id();

}

}

 

function createActionIfNecessary($name, $projectId, $isPresent)

{

if ($isPresent == true)

{

return;

}

else

{

$query="insert into actions(name,project_id) values(" . $name . "," . $pid . ")";

mysql_query($query);

$idOfNewRecord = mysql_insert_id();

return $idOfNewRecord;

}

}

Figure 1. Subjects of heated debates: This figure presents two pairs of pieces of code in the programming languages C and PHP. In a) and b) two different coding styles are used for implementing the same functionality: a) different bracketing styles, use of tabulator and use of Hungarian notation (C) b) different naming styles (PHP)

However, in practice some of the joys may not be present. One often has to create things of other person’s design, which may contradict with one’s own point of view. To my opinion, the view of a software product depends on the role of the viewer in the project. Programmer may look at the efficiency and elegance of the algorithms, designer at the ease of integration of other components into the system, manager at adherence to deadlines. Thus, not all wishes (of rational or emotional nature) of the programmer can be fulfilled.

Personal experience

(DP)

While working on a project during the last year of the higher school for EDP, I worked with my two friends who implemented the greatest part of the software. On the day of a regular meeting which included also a presentation of the software developed so far, one of them proposed to show to the customer a version of the software which included several serious improvement which he made during the last night (therefore I was not able to test the new version) instead of the tested and debugged version with less functionality. That was of course a completely impossible idea for me as a project leader (adherence to deadlines and some degree of quality assurance), but for him as programmer (implementation of new functions) it was logical that the customer will want the more useful version.

The joy of making things, which are useful for other people, is obviously not present if the product developed is not used for some non-technical reason. That is the fate of many information systems in enterprise Intranets. The success of them depends to a higher degree on organisational or administrative cleverness than on technical implementation. A perfectly programmed Intranet forum on quality assurance is not useful to anybody if the articles to be found therein date back some months because nobody is interested in that topic.

Brooks mentions following negative aspects of programming

I don’t agree with Brooks that perfection is the most difficult part of learning to program. I think this statement was right at times, which Brooks’ book relates to, but is obsolete now, because

To my opinion, the most difficult part of learning to program is the ability to generate not programs but tested products with useful comments, sufficient documentation and overall high quality.

The dependence upon other people is given by the fact that most systems interact with other system and/or must model processes of organisations, which often are not logical or comprehensible to the programmer.

Debugging is hard not only because of technical complexity of software systems, but also because of the obvious inability of programmers to regard their programs as programs and not as their brainchildren (which one doesn’t want to hurt). In fact, the practice shows that many programmers are not able to test their programs carefully so other persons must perform testing. This problem can also be diminished by collective code ownership where the code is declared to be property of all programmers and not only of the author. That often improves the ability to criticise and willingness to accept criticism.

One woe omitted by Brooks is the need to document one’s works and keep the documentation complete and up-to-date. In practice one is often forced to make a quick, little change to the program. If one does not have enough time (as it usually is), the change remains undocumented. The only solution for this problem known to me are automated documentation tools, which generate documentation from comments in the program (such as javadoc for Java). In this case, the documentation effort is small enough (one just has to write some text in the comments of the source code and run the documentation generation program).

Personal experience

(DP)

Sometimes the managers even state clearly that documentation has the least priority at a particular stage of the project. In this case, normal documentation procedures (review etc) are not feasible and the auto-documentation becomes the single option.

Writing maintenance manuals is also an inconvenient task. My personal experience is that I am much more productive in writing programs than in documenting them.

Documentation needs to be comprehensible by people whose skill level and mental ability is not known in advance, so the documentation must be written in a very clear manner. On the other side, different people learn differently.

Someone prefers a detailed explanation of principles of work of the program (e. g. by reading a book on databases) described, other persons learn better from examples (e. g. by typing in SQL statements and looking what happens).

Other issue is the presentation of information. In the craft of programming diagrams are widely used and can substitute dozens of pages (e. g. an entity-relationship diagram). The problem arises if one wants to describe a fact by a non-standardised diagram. How can one assure that the reader understands the diagram properly?

As can be seen from this text, the nature of programming is far more complex than just generating some source code.

  1. Ethics of software engineering
  2. As students of the UDA we are granted access to the luxury of higher education and therefore should not only consider benefits of this luxury but also take into account the responsibilities a deeper understanding of our profession obliges us to.

    1. Present

The ethics of programming may seem inappropriate since most of us are not working in nuclear power plants or developing software for defence organisations where an error of a programmer may have severe consequences or the very fact of working therein may be a "moral acrobatics". However, most programmer are faced with issues which are to more or less extent ethical issues (this is of course a partial list):

Many programmers get access to databases containing huge amount of personal data due to the requirements of their profession. It is obvious that one should deal with that data carefully. It means not only to not use it in an improper way intentionally, but also to prevent the misuse of data by accident. That could mean for example:

The second point of the list concerns passwords and login-names of the computers the programmer is working on. They may be a source of great danger if treated carelessly (e. g. using short passwords, speaking them out in presence of other people, writing them down etc).

The legality issue is the most painful one. Almost every person dealing with computers is to more or less extent a criminal – computers with no pirate copies of standard software are seldom. To my opinion the solution for this problem lies in the usage of freely available software that satisfies the needs of private users. The reality looks quite different, instead of acquiring free software or buying commercial, one simply "cracks" the security mechanisms of pirate software.

While developing a concept of the program to be created, software engineers need to analyse the business processes of the customer. In some cases, one detects failures, which arise from the organisation of them and cannot be solved just by automating them. In some cases, a complete automation may even be more a hindrance than a benefit since overautomatisation can make a system "non-self-healing" (DeMarco, Lister 1991). The customer should be notified of such discoveries.

The principle of non-deception of the customer can only be implemented in practice if one pays attention to proper communication with him, avoiding technical terms or thought constructs, which may be incomprehensible for him.

 

    1. ACM/IEEE Code of conduct
    2. ACM (Association of Computer Machinery) and IEEE publish a "Software Engineering Code of Ethics and Professional Practice". Short version is given below; full text may be viewed at http://www.acm.org/serving/se/code.htm.

      PREAMBLE

      The short version of the code summarizes aspirations at a high level of the abstraction; the clauses that are included in the full version give examples and details of how these aspirations change the way we act as software engineering professionals. Without the aspirations, the details can become legalistic and tedious; without the details, the aspirations can become high sounding but empty; together, the aspirations and the details form a cohesive code.

      Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight

      Principles:

      1. PUBLIC - Software engineers shall act consistently with the public interest.

      2. CLIENT AND EMPLOYER - Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.

      3. PRODUCT - Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.

      4. JUDGMENT - Software engineers shall maintain integrity and independence in their professional judgment.

      5. MANAGEMENT - Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.

      6. PROFESSION - Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.

      7. COLLEAGUES - Software engineers shall be fair to and supportive of their colleagues.

      8. SELF - Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession. (INET2001102704)

    3. Future

The role of ethics in the software industry will become more obvious in future, when computers will influence our lives in an even more intense way they do today. But the potential importance of ethics (lack of it) can be demonstrated on some examples from the past and present:

  1. "Do"s and "Don‘t"s of people management

People management in the IT deals with following issues (partial list):

In order to reach that some measures have to be taken and some others not:

"Do"s

"Don’t"s

People-oriented offices

This such an important issue that an entire section is devoted to it.

Methodologies

Methodologies such as RUP, SSADM and METHOD1 tell people what they have to do, thus degrading them to machines and suggesting them that the management doesn’t rely on their thinking abilities.

Quality cult

People are highly motivated if they are aware that they produce high-quality products and do not like to create lots of second-rate quality stuff. High quality does not always compromise with financial or temporal constraints.

Encourage workaholism

People working overtime usually work less afterwards in order to repair damages (e. g. to family life) caused by working overtime.

People suffering workaholism do so for a limited amount of time. As this is elapsed, they are usually lost for the project and the firm.

Use metrics

In order to analyse outcomes of managerial actions, important parameters of the software development process have to be measured, even if this is carried out imperfectly.

Fight laziness with more pressure

If an employee works inefficiently, one cannot force him to better work by more pressure since the laziness in most cases has quite understandable causes (too difficult or too simple work area, tensed relationships with the management, different kinds of misunderstanding). Often the person simply doesn't suit the enterprise philosophy and may be happier in another firm.

Innovate

People like to try out new methods or approaches. Thus, every project should be a pilot project in some sense. However, in every project there should be exactly one novelty.

Arbitrary/unrealistic deadlines

Some manager use to set unrealistic or arbitrary (e. g. date of delivery of interim version to customer minus two weeks) deadlines in order to motivate the staff to work more eagerly. However, the staff is intelligent enough to understand that. The distrust tenses the relationship to the management, on the other side the team does not work better.

Exploit self-control

People tend to control themselves better if they know that the manager trusts them. If not, they tend to devote less attention to checking their products since they know that the chief will control them anyway.

Fight individuality

Often obvious individuality (clothes, habits etc) frightens the management because it suggest a certain sort of loss of power. If the firm imposes too tight limitation of the expression of individuality, the top workers will leave the firm, because very often top people are individualistic and freedom-loving.

Assessment centers

Assessment centers are a useful means of human resources development and improve the team spirit.

Supervise permanently

Total supervision and overcontrolling suggests the people that the management doesn’t believe in them. Creative and devoted work is not to be expected from the employees under such circumstances.

  1. Working conditions

Tom DeMarco and Timothy Lister claim that their research results show a significant correlation between the productivity of programmers and their working conditions such as

    1. Structure of the office
    2. There are many issues concerning the structure of the office which affect the productivity of programmers:

      1. Size of the office

      Hereby one means the area of the office per worker. IBM studied the productivity of workers in different working conditions and came to the conclusion that minimal area per worker equals 9 m2 plus 2,7 m2 of desktop area. Under this conditions the staff can work more productively (DeMarco, Lister 1991).

      The results of DeMarco and Lister suggest similar conclusions: the best 25 % of programmers participating in a programming contest (performed in the office of the programmer at usual working time) had an average personal area of 7 m2, the worst 25 % of programmers only 4.1 m2 (DeMarco, Lister 1991).

    3. Open-plan offices versus rooms

Open-plan offices are big offices where many (more than four) persons are working. Usually, there is little or no separation between the areas of different workers. Personal offices are the privilege of managers.

The other alternative are rooms with no more than four persons working therein, one or more windows (the window issue is a contradictory one – on the one side one often wants to look at something different from source code, on the other side window can cause glare on monitor or glasses of the programmer (INET2001101702)) and a door.

This alternative offers several benefits:

If the project is planned to last for many months, the persons working on it can be located to adjacent rooms. There are two main objectives of project-oriented office design: to provide a place for individual and that for group work. McCue (1978) proposes following scheme:

 

Figure 2. Office and meeting room grouping (Sommerville, 2000)

Such an office provides private as well as group workplaces and room for informal communication ("Communal area"). Informal communication plays an important role since it provides an opportunity for exchange of experiences and specialist information (for example the usage of a sophisticated programming library).

The open-plan approach is used very often (at least in USA), although it is neither popular among the workers nor productive. The main advantage of open-plan offices is the ease of wiring the computers and phones as well as cheapness. The productivity increase by putting the workers into offices designed for humans is scientifically proven (for example by McCue). However, the working environment discussed here is often not possible in practice because the increase of productivity doesn’t outweigh the argument of higher costs. Costs are easily measurable, productivity is not.

    1. Disturbances

Since many activities in the IT branch are intellectual ones, their execution requires a certain degree of concentration. Concentrating requires a certain amount of time, after which one can work properly and put all the intellectual power into solving a certain problem. If a person is disturbed, the concentration process must start from the beginning. If a person is disturbed very often, productive work is not possible at all.

There are three major disturbance factors: noise, phone calls and other persons.

Noise is present if people work in open-plan offices or are not able to isolate themselves by the means of a door. To my opinion, in open-plan offices the noise is per definitionem high (the more people are in an office, the more they talk with each other) and often unbearable.

Personal experience

(DP)

During my internship in a company producing air traffic systems I had to work in an open-plan office which during that time was populated by me, two or three other programmers and a secretary. The acoustic characteristics of that room were such that one could hear almost everything spoken in either place of that room from every other place of the room. Unfortunately, the secretary was a very communicative person and used to make a lot of phone calls, many of them of personal nature. That was big disturbance since I was not able to perform even simple programming tasks due to the lack of concentration, which permanently was destroyed by phone calls of the secretary. However, I think that the problem could easily be solved by placing persons performing similar tasks into same room. A programmer has to concentrate and requires a silent place whereas a secretary must speak a lot due to the very nature of her job. Two years later that firm moved to another building where this problem was solved by placing persons into rooms with two workers per room and putting the secretary at entrances (receptions) of departments.

As already mentioned above, the means for prevention of disturbance by noise is the use of smaller rooms.

Phone calls also undermine the concentration. Nowadays, most enterprise phone systems have the option of call redirection and turning the telephone off. If these options are used or not is subject to the firm culture. Other possibility for avoiding the disturbance is the use of electronic mail since in this case one can answer a message when one has time for doing so. To my personal opinion, efficient use of electronic mail requires a certain degree of maturity and understanding that an e-mail is of no little importance than a phone call.

Personal experience

(DP)

Many people are not able to communicate via e-mail efficiently. While working on a project with some enterprise I waited for a long time for a meeting appointment and got it only after I started to communicate with the representatives of the firm exclusively using the telephone. In that case, the person was not able to ignore my call or to reply with a message containing no answer to (perhaps difficult) questions posed therein.

In some cases, technical advantages bring serious drawbacks with them. Some enterprise communication programs offer the possibility of sending a notification message to the sender of an e-mail message at the point in time when the message is displayed in the e-mail program of the recipient. In one of the firms using such a communication program, some employees did not even view the messages they received because in this case the sender would be notified of the reception of the message and expect the requested task to be done. The employees doing so claimed that they were too busy for responding to e-mails. My state of knowledge does not allow me to regard such behaviour purely as a result of immense laziness. On the other side I think that one in principle should answer e-mails from colleagues even if the answer is negative.

The way e-mail is used is part of the enterprise culture.

However, one should never forget that e-mail is not suitable for communication with more than one person if an immediate answer is important or it is important that a certain question is not ignored. Video and phone conferences as well as instant messaging systems provide such possibilities, but require again a certain discipline from participants. Efficient communication is not achieved by chance but has to be cultivated.

Last major source of disturbance is other people asking for help or demanding some tasks to be done. Contrary to the previous two points, there is no definitive means of attacking this problem but developing a culture, which respects the needs of other workers. DeMarco and Lister (1991) suggest placing little flags on the tables of persons who currently are working on a complex task and do not want to be disturbed. This method only can work if everybody knows of that "custom" and respects it.

  1. References

INET2001101702

Extreme Programming -- Supporting Ideas, http://www.charm.net/~jriley/xpart.html

Sommerville 2000

Ian Sommerville, Software Engineering, 6th Edition, Addison-Wesley, 2000

Brooks 2001

Frederick P. Brooks, The Mythical Man Month / Essays on Software Engineering, Addison-Wesley, 1995

Demarco, Lister 1991

Tom DeMarco, Timothy Lister; Wien wartet auf Dich! / Der Faktor Mensch im DV-Management, Carl Hanser Verlag München Wien, 1991