Showing posts with label complexity. Show all posts
Showing posts with label complexity. Show all posts

Sunday, March 30, 2025

Instability: Causing searches for simple answers

     The world is complex. We have a lot of people cohabiting the planet. Everyone has legitimate concerns about having enough food, potable water, shelter, clothing, and that bit extra that makes life enjoyable to keep struggling with the challenges. Everywhere there is change and change is typically scary and a lot of it is not expected to move in an easy direction. It doesn’t appear that there is anyone trying to pave the road ahead before we start moving along.

     This — and a whole lot more — makes the world a stressful place in which to be. It also seems that there are those whose primary motivations are to make things harder and worse. So, it isn’t unreasonable that most of us are frustrated and many of us are angry. How to make things better? How do we keep our families sheltered, fed, clothed, and able to live to our potential?

     Wouldn’t it be lovely if there was a button over on the wall that will cure all problems and make the world a better place? Wouldn’t it be nice if there were simple solutions to our complex problems?

     But yes! There is a magician that exists who can do just that. Problems? Why sure, but they are caused by this group or that group — just get rid of them or severely restrict them and the problems will disappear. Problems with changes to the environment, technology, or work procedure and educational needs? Broadcast (or stream) funny programs, interviews, and programs that will make the magician seem to be the person to be able to easily address such. Better yet, make them all disappear! There are no problems with climate change because the magician says they no longer exist. There is no shift in automation and technology and all existing jobs will forever exist. Existing fossil fuel use does not affect the environment and it will last forever which means we don’t have to find other supplies. A wave of the magician’s wand and you can relax. Just hand over control and she or he, will handle everything. Worries are all gone.

     Doesn’t everyone feel better? And an awful lot of people do feel better — they have handed off responsibility and all will get better and — if it doesn’t — it certainly isn’t their fault. It is certainly tempting. I often spend a few minutes just sitting back and pondering how much easier it would be to hand my conscience and my morals and my general decisions over to another person. (And it is easier — it is just almost never “better”.)

     But, don’t look “behind the curtain”. You don’t want to know what the magician is really doing. You want to believe information that is issued that indicates everything is great again — and those potholes you encountered while driving no longer exist. And mostly — you do NOT want to know what directions the magician is taking things because, unless you are among the lucky and privileged few, things are going to get a lot worse.

     I love democracy but it is a pain in the rear. It takes time to listen to everyone and sit down and decide what meets almost everyone’s needs and, for those whose needs it does not meet, minimizes the negative effects. And, being aware of potential problems, the “Founding Fathers” knew that active participation in democracy requires education and the ability, and urge, to investigate things for oneself. Change is fast. Democracy, and group leadership, is slow.

     If part of the group is working hard to prevent working together, it becomes even slower — too slow. Things will keep getting worse faster than they can be addressed. Yet, there is no way to force those who want to obstruct discussion and avoid decisions to cooperate — that is not the way democracy works. So the magician looks better and better to the general public — and the groups who are obstructing tend to pick the magician that they want you to choose. This is called “populism”. It works well for them. They prevent democracy from working in its normal stumbling fashion and it makes people want the magic solution more and more. It can’t happen here? Unfortunately, it can, and it is happening in many places throughout the world.

     Is there a solution? Keep looking behind the curtain. Keep all the mess and process visible. Keep checking on what is said — especially if it reinforces “what you suspected was true” as it is so much easier to reinforce preconceptions. And be patient with each other and the process. Yes, it is a mess. Yes, it is slow. But yes, it really does have much better long-term results than placing the power in the hands of a magician who has to stay behind the curtain to fool you as to what is happening.

Ideas & Interpretations is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.

Tuesday, April 12, 2022

Simplicity: the benefits of lack of complexity

 

     I have been around computers a long time. Long enough to remember when 64K of memory (in total -- not RAM) was considered a large system. Long enough to have to toggle in a boot program for the paper tape reader to allow the main program to be run. Long enough that, between queuing up for the card punch, waiting for your program to be executed by the mainframe, and then getting the printouts from the run -- you might be only able to run your program three times in an eight hour period.

    (Not as long as the true pioneers like Ada Lovelace, Alan Turing, Kathleen Booth, Wang An, Grace Hopper and such. Please forgive me if I left out your own favorites.)

     Now, I'm not going to say those days were "better". I like getting streaming videos (though I will never be in favor of the many meetings that could have been done with a few memos and emails). I like reliable email networks, transmission, and reception. I like online shopping. I like having much of the transcribable data of the world available with searches and networked museums, libraries, and academies.

     But there were some advantages arising from the lack of options and complex systems.

  • With very limited memory, it was necessary to write efficient code.

  • With slow turnaround, it was necessary to try to anticipate every problem, and edge condition, that your program might encounter -- in advance as part of the design.

  • It was relatively easy -- and usually necessary -- to understand the basics of the entire system from the power that entered the hardware to the hardware components to the initial boot program, the peripherals, and the way the operating system works.

     I am a generalist because I WANT to continue to be a generalist. There are rarely paid positions posted for generalists. So, it was necessary to focus on some area. I became a telecom/datacom specialist. As I continued my career, I found that people interactions became more and more interesting and so I started to try to become the best servant leader that I could be -- a goal that I will never reach but which will continue to be out there as a target.

     But, at heart, I am still a generalist -- now extended to include the people (people's actions and interactions, UI, UX, etc.) Being such is conceptually very useful -- but job listings are virtually non-existent. Creation of new types of products usually requires knowledge of multiple areas (and, often, sciences) brought together. Generalists can be of great use in such.

     Nevertheless, the economy continues to move towards complexity and specialization.

     Within a computer app that faces a human user, a goal is to present a simple, intuitive, interface. Complexity of possibilities makes that much harder and, in part because of legal issues, every version of a particular program (word processing, spreadsheets, voice apps, video apps, ...) has to have a different interface (sometimes just a bit of a diversion, sometimes completely different).

     The goal is still to make it simple for the user to use without sacrificing flexibility and functionality. When that is achieved, it is almost definitely a balancing act with extreme complexity "under the hood". One could say the complexity is of the system as a whole. When the user-side becomes simpler, the provider-side becomes more complex. This often applies to mechanical objects, and other systems, as well.

     But what about those advantages of a simple program? They move from necessities to desirabilities. I would say that it is STILL useful to write efficient code. It is DEFINITELY (especially in terms of security in our current world) useful to anticipate problems, edge conditions, and vulnerabilities as part of the design. And, in order to create new types of programs, I am of the opinion that knowledge of the complete system is of considerable usefulness.

     Most examples have been concerning computer systems since that is my field. But such can be applied to civil engineering, mechanical engineering, business structuring, and so forth. There will be advantages with simple systems and complexity will involve trade-offs between various components.

Sunday, March 3, 2019

The KISS philosophy: Forgotten but still needed.


     As an engineering executive/manager, I had a developer once come to me and say "here it is. I have fixed the last bug". I smiled and said "well, I can't wait for the next-to-last bug" recognizing that, if we counted that way, we would never reach the first bug.
     All software has problems (not isolated only to software -- but it is particularly prevalent in software). Even if somehow the program was simple enough and used for a long enough period that all of the problems within the program were fixed, a program does not exist in isolation. It will interact with other programs and the hardware. Change those and problems may easily surface.
     The primary criterion that creates the situation where software always has problems (or "bugs") is complexity. A five line program may eventually get all possible interactions tested and all known problems fixed. A 200,000 line set of programs (or processes) has little chance of even having all the problems known.
     There is an anecdote about Bill Gates talking to a developer at Microsoft. He is said to have said "Don't worry about the size or the amount of memory needed. By the time it is finished, we will have faster processors with greater amounts of memory." A side effect of this (loved by sales, disliked by consumers) is that new programs usually require new software and hardware to perform at their best.
     On the flip side of this issue, Soviet developers used to have a reputation as being very good programmers. They were required to use older computers with much less memory and they had to share equipment such that they had only certain time slots in which they could compile and test their programs. These constraints in equipment forced them to be much more careful in their programming as well as making the programs small and efficient.
     In the world of programming and marketing, complexity is also sometimes referred to as "Creeping Featurism". Marketing and Sales demand new features that can be used to distinguish a program from that of the competition. However, each new feature increases the complexity of the program and the system -- and the complexity does NOT go up linearly -- an increase of 5% in the number of lines of code may double the number of initial problems to debug.
     This might eventually be of general benefit if it wasn't for the fact that many features go unused by most people. They may not even know they exist -- or, if they do know about existence, they don't know how to use it. If this is so, why add the extra features? The answer to this is that word "most".
     Assume that a program has 200 features. Twenty of those features are used by almost everyone. One user makes use of 40 features. Another user makes use of 50 features. But only 1 of the 20 "extra" features of the first user is the same as user 2's 30 "extra" features. The others are used only be the particular user.
     When I was a beginning programmer in the 1970s, all of our courses emphasized using the KISS philosophy. The acronym KISS stood for "Keep It Simple S_____" (substitute your own favorite S-word). It was a reminder of the discipline that was expected (and that the Soviet programmers had to have as a requirement). 100 lines of code that did a function was much better than 300 lines of code that performed the same function. It was easier to debug (and usually had fewer bugs in the first place), faster, and required fewer system resources. KISS fell victim to the expectation that Moore's Law would always hold -- that processor power WOULD continue to increase and that memory would be cheaper and cheaper. But being ABLE to function does not imply that is was written as well as it could have been.
     Although the KISS principle was created in connection with software development, the same holds true for other complicated, interconnected things -- such as laws and regulations or industrial factory processes.
     Do you work with the KISS principle? If so, why? If not, why not?

Capitalism: There are variants of all economic systems

     I tried to find a “neutral” depiction of capitalism as an image to associate with capitalism. I was unsuccessful. Yet, the reality is t...