copyright (c) 2017 by R. Rodman
What is complexity? Complexity is how complicated something is. It can be exposed to the user, like rows of cryptically-labelled buttons on a ham radio, or it can be hidden, like a 9-speed automatic transmission in a modern car.
In computer programming, complexity can be measured by the number of decision points, functions and variables in a program. Programmers usually dislike complexity, because every decision point, function and variable is a place something could go wrong. In general, the more parts a thing has, the more things that can fail. Simpler things last longer and are more reliable, hence the oft-heard (but little-obeyed) KISS principle: "Keep it simple, stupid".
How does complexity come about? Over the life of a product or program, features get added, which increase its complexity. This is often referred to as "creeping featurism", because usually, beyond the initial design of a product or program, additional feature requests usually come from a very small percentage of users. At one job it was common to spend months of effort delivering a feature that had only one customer requesting it - and after deployment, they never used it. Yet, the code for the feature remained, and had to be maintained.
Another phrase you'll hear is "gratuitous complexity". This is where features are added, such as pretty graphics or other visual doodads, which are unnecessary but are considered by someone to add to the appeal of the product or program. In programming, sometimes a programmer will add functions that nobody requested simply because he feels he is being clever. This, of course, is contrary to the programming principle: "Never be Clever".
Is complexity always bad? Albert Einstein said "things should be as simple as possible, but no simpler." Sometimes there is no alternative to complexity. Living things are astonishingly complex. But, there is necessary complexity, and there is unnecessary complexity.
The Icom IC-2100 has two completely different user interfaces, one on the front panel, the other on the microphone. They use two completely different sets of instructions to control the same set of features. Both are very complicated and cryptic. Objectively, it is a terrible design. I prefer the Baofeng, which, altho difficult to use, actually makes a little sense.
Radio hams, though, are technology enthusiasts. Such people get really deeply into things and actually develop a liking for complexity in those particular things. This is what I refer to as "techno-narcissism", or "techno-masochism." Most normal people would assess the IC-2100 as unnecessarily complicated to use, as I do.
So, if you're a programmer or designer, strive to keep it simple. Avoid the siren song of complexity, and resist the urges of creeping featurism.