Should employees be promoted at random? Science says: “IDK, maybe?”

Should employees be promoted at random? Science says: “IDK, maybe?”

“In a hierarchy every employee tends to rise to his level of incompetence”

– Dr. Laurence J. Peter

The controversial quote above is from a semi-satirical book, by Dr. Peter and Raymond Hull, which since its release triggered quite a bit of research on the topic. The idea behind it is that, as promotions are typically assigned based on someone’s performance in their current role, people rise ranks of hierarchical organizations until they reach a position where they are relatively incompetent and not considered for promotions anymore.

This adverse selection effect can be intuitively expected when performance in a certain role is not a good predictor of performance at a higher role: a stellar programmer is not necessarily a good manager. Or, as Putt’s law states:

“Technology is dominated by two types of people, those who understand what they do not manage and those who manage what they do not understand.”

– Archibald Putt

I originally encountered the Peter principle because I am a big fan of the Ig Nobel prize, and in 2010 three Italians, Pluchino, Rapisarda, and Garofalo, were awarded the Ig Nobel Prize in management science for their computational research on the topic. I always found their result to be very thought-provoking, and since I wanted to try out the Mesa library for agent-based simulations, I could think of no better paper to try to reproduce! :-)

Pluchino-Rapisarda-Garofalo model

We shall now review the model introduced in “The Peter Principle Revisited: A Computational Study”. Let’s consider a hierarchical organization, where positions are distributed over some number of levels of fixed size; each position can be either vacant or occupied by an employee, who is characterized by two numbers: their age and a score which represents how competent they are in their current role. For the sake of definiteness, let’s assume that the score is a real number from 1 to 10.

Schematic representation of a hierarchical organization

The global efficiency of the company is defined as the sum of the competence scores for each employee, weighted by a level-dependent “factor of responsibility” which accounts for the idea that incompetency or unfulfilled roles occurring in the topmost levels are more harmful to the company as a whole with respect to them occurring in the lower levels. The efficiency is then normalized by the score the company would obtain if each employee had a competence score of 10.

Employees can only be promoted to the level immediately above their current one (provided that there are vacant positions in it) and enter the company only at the bottom-most level. How will we model then the competency an employee will show when they’re promoted to a higher level? The authors of this model suggest two possible mechanisms:

  • Common sense hypothesis: when an employee is promoted, their competence in their new role is roughly the same they had in their previous role, with some small random variation (say, uniformly distributed between -1 and 1).
  • Peter hypothesis: when an employee is promoted, their competence at their new role is completely independent with respect to the one they had at their previous role. Not completely unrealistic, if we imagine someone switching from a role where they need highly technical skills to a more managerial role.

Also, one can imagine a large number of strategies by which we choose an employee to promote at the next level; in the original model, the authors study three of them:

  • The Best strategy: for any vacant position, promote the most competent employee from the level immediately below. This is the strategy that is most commonsensical, and “in theory” the one people use in the real world.
  • The Worst strategy: rather than picking the best candidate from the level below, pick instead the worst one. Intuitively… WTF?
  • The Random strategy: whenever there is a vacant position, write down all the names of the employees that can be promoted to fill it, put them into a fish bowl, and extract one name at random: that guy gets a promotion! Would love to know if anyone uses it in the real world.

Lastly, employees leave the company only if they reach retirement age or if their competence score falls below a certain threshold.

With these rules in mind, let’s implement an agent-based simulation to see how a company, with random initial ages and competencies of employees at the start, evolves over time. If you are not interested in the details of the implementation, feel free to skip to the discussion of the original results section.

Implementing the PRG model with Python

As this is a very simple agent-based simulation, I think a natural choice for its implementation is the Mesa library, as it allows us not to write a lot of boilerplate code for our simulation while at the same time being much more easy to use with respect to some more sophisticated library (e.g., SimPy). The goal of this section is just to sketch how does the implementation of a simulation like this looks like; for more details, feel free to take a look at the full repo for this post and at the Mesa docs.

We can start by writing a fairly uninteresting Employee class as follows: