Typical project work in the IT industry sometimes looks like a giant amusement ride, for example, roller coaster. At first, it seems that we take off! Everything is fine and superhero programmers will find a solution for any kind of problem. But a little while later active project work often shows that even good ideas can fail. And we have to construct the whole project with the help of crutches. And then what seemed like a great idea is quickly turning into the invention of the wheel. We are rapidly falling. In the end, all the project developers no longer even dream about a normal solution but try to assemble at least some kind of wheel hoping it will work.
This ridiculous story lasts until a revolution happens. The current version of the project is abandoned and everything starts from scratch. Alas, no one can give a guarantee that the second attempt will not follow the first one's scenario.
The problem of the hundredth brick
The most important feature of IT is the problem of complexity. You can learn more about it, for example, in the book "Object-Oriented Analysis and Design with Applications" written by Grady Booch.
What do such ominous words mean? In fact, complexity means the following: the amount of resources, connections and components that are required to solve a task grows non-linearly as the size of the project increases.
Let's look at this statement by example: imagine the work of a bricklayer and a programmer. If a bricklayer builds a wall, we can expect that he will put the first brick, for example, in 2 minutes, the second in 2 minutes too, and the hundredth brick he will put faster, because he has developed the skill and got experience. By the thousandth brick, he may become a virtuoso and will do everything at lightning speed and with his eyes closed. And what about the programmer? All things are different. The programmer puts his first virtual brick in 2 minutes, the second in 2 minutes, the hundredth brick he puts for some reason in an hour, and the thousandth in three days ... Why? This is just an illustration of the problem of complexity: the project grows, needs change and, accordingly, the necessary effort, time and labor costs grow after it. Simply put, in IT we can start the project together in the garage, and in the future, thousands of people will be involved in it. More precisely than Grady Booch, the problem of complexity was formulated by Lewis Carroll in "Alice Through the Looking Glass", where the Black Queen says: "My dear, here we must run as fast as we can, just to stay in place. And if you wish to go anywhere you must run twice as fast as that." Unfortunately, this is the cause of other unpleasant things: the fact that programmers fail to meet all deadlines, the fact that everything is not going according to plan, that the industry is constantly suffering from staff shortage and so on.
Also, because of the problem of complexity, today everyone is interested in the philosophy of Agile: it is difficult or impossible to plan the work of programmers in the usual way, you just need to look what they do and find value in it. The reason for this is that costs will grow nonlinearly and it is necessary to have time to do at least something useful for the available money.
Agile is more and more like this today. We don't waste your money, we spend your money with benefit, don't plan anything beforehand, but fortunately, something good happens as a result.
Programming demonstrates several kinds of complexity problems.
In the next article, we will discuss directly 4 manifestations of the problem of software development: algorithmic complexity, development complexity, information complexity, and testing complexity.