1

It always seemed normal to me that the larger a company gets the less amount of work is put by its employees into making the company profitable.

There are obviously no clear marks for this, but I don't think anyone will argue that joe working for IBM has the interested of IBM in mind the same way bil, co-founder of StartupX has the interested of StartupX in mind.

One completely baseless theory that came to my mind based on this reasoning is the idea that outside of an environment where artificial complexity will outright kill the company, artificial complexity is bound to grow.

It seems natural that people who do not care at all about the company they work for would mostly care about wasting as little time as possible to keep their job (or at least that seems to be the most common attitude adopted by people)... which could often be achieved by adding some arcane layers in the system that only they understand that have little or no actual usefulness.

Are there any works that have ever been developed around the idea of programmers adding artificial complexity ? Any studies that gather data about the use of various 'pointless' libraries and how that % increases as company sizes grows ? When companies get to the point where they have dozens of thousands of employees, how bad can artificial complexity get ? How much of this gets leaked into the community via OSS (see leftpad... or the whole of the javascript community in general) ? Are there initiatives to discover and single out this type of OSS in order to stop it from polluting various ecosystems ?

George
  • 119
  • 3
  • 1
    Why assume the complexity of large organizations is artificial? See "The Mythical Man Month" for a classic discussion of how simply having a larger task and a larger team leads to communication complexity. – joshp Jun 17 '17 at 03:37
  • 2
    Don't compare Joe to Bill, compare Joe to Brian, a non-founder of StartupX. You might find both care the same amount of each company (often 0). – whatsisname Jun 17 '17 at 03:47

2 Answers2

2

I'm a consultant working with the IT department of a large financial institution whose culture, IT practices, management practices, and carpets are stuck in the 1980s.

Artificial complexity manifests both in the software and the organizational hierarchy of large companies. The companies with good values and adaptive practices have an easier time identifying and eliminating these complexities than those who have bad values and do things because "it's the way it's always been done." The difference is mindset.

There is an adage called Conway's Law which states

organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations

From this, it follows that companies with high amounts of artificial complexity in their people organization are bound to create software with high amounts of artificial complexity.

Unfortunately, I do not know of any research that exists around the psychology of programmers creating artificial complexity and arcane implementations for job security and self importance and how that culture festers as a company grows, but the field of systems thinking may be of interest to you. There's a book that recently came out using systems thinking and how it applies to transforming the culture of large companies. It's called The Journey to Enterprise Agility: Systems Thinking and Organizational Legacy. It may be of interest to you.

binskits
  • 119
  • 4
1

I don't think anyone will argue that joe working for IBM has the interested of IBM in mind the same way bil, co-founder of StartupX has the interested of StartupX in mind.

Challenge accepted. Software engineers are a strange, nerdy bunch, and for the most part they care less about the business objectives and more about the elegance of their code. The idea that an engineer would purposefully introduce needless complexity runs counter to my 20 years' experience working with these people. They want their code to be beautiful and their software to be "clean," more than anything. Many developers will actually prioritize this over any business objectives, sometimes to the detriment of the team.

It seems natural that people who do not care at all about the company they work for would mostly care about wasting as little time as possible to keep their job (or at least that seems to be the most common attitude adopted by people)... which could often be achieved by adding some arcane layers in the system that only they understand that have little or no actual usefulness.

Ridiculous. Engineers, and people in general, do not like to work on things that are worthless. In fact, they hate it. Most programmers I know would love to take some time to rip out the code they see as useless-- you often have to practice a great deal of team discipline to stop them.

Are there any works that have ever been developed around the idea of programmers adding artificial complexity ?

Not "artifical" complexity. But here is a Turing-award winning paper on accidental complexity, and here is a bit of writing on incidental versus inherent complexity.

Is artifical complexity commonplace the larger a company or community gets?

I have no doubt that total complexity tends to increase as company size increases. This may be because

  1. The problem domain becomes more complex as more features are added

  2. The problem of technical debt becomes larger as code bases age.

  3. As technology changes over time, and engineers use the latest technology, you end up with a more and more diverse mixture of solutions and approaches, which some might call the Lava Layer anti-pattern.

  4. As software grows, and market share grows, there is more and more risk of changing and refactoring things, so there is less likelihood of these issues being addressed. Product owners won't allow it.

  5. As companies get larger, upper management tries to extract more and more profit out of it, and developers are given less time to work on cleaning up things, which (contrary to your thesis) they will typically beg to do.

  6. As companies get larger, they will tend to employ more outsourced resources, or will acquire companies/buy the rights to software that has already been written rather than grow it in-house. Integrating these various sources together tends to make a bit of a mess.

  7. As companies get larger, it seems like they hire more and more ignorant managers, who may push a prototype that was never meant for release into production, or may attempt to extract unreasonable amounts of work, or will care more about features and marketing than about quality.

  8. It's possible that engineers' attitudes get worse and worse as they feel more and more distanced from their work and have a weaker sense of ownership. That doesn't mean they will add junk just for the hell of it, but it does mean they may not go the extra mile to clean up someone else's mess.

John Wu
  • 26,032
  • 10
  • 63
  • 84
  • 1
    Counterpoint to your opening paragraph, "Elegance" does not necessarily result in less artificial complexity, and can often create it. Developers fascinations with "rules engines" is often a good example of introducing massive complexity as a result of an ill-conceived attempt at achieving "elegance" or "generality" – whatsisname Jun 17 '17 at 03:53
  • Not sure I agree ("complexity" is not the same as "something I don't think is necessary"), but it's beside the point. The point is that they do not create random complexity out of a need to seem busy to protect their jobs. – John Wu Jun 17 '17 at 04:40