Suppose you follow all the style guides, you are a “clean,” careful, faithful follower of TDD, and you know your platform, … but, even so, for some strange reason, over time, your system wobbles, or you must lose a lot time to refactor. Or the number of tests make your deployments take hours. Or you find it more and more confusing to see the best way to introduce improvements. What has gone wrong?
I am not talking about when things remain wrong (in which it is more or less evident that control is lost sooner or later). I am talking about when things are done well or, at least, the canons set by the industry. Losing control of a project is not uncommon and occurs in various settings, teams large and small. Companies large and small, with resources and without resources.
What Is Software Fragility?
The fragility of the software represents a global property of a (software) system, but not of in what way well or poorly it works. Nevertheless of the capacity of the same to adapt to some change. Thus, a system can be very robust, fault-tolerant, fast. And yet be highly fragile. If when a system that works well (reasonably, well, or very well) says “better not to touch it,” it is because that system is fragile.
The fragility of the software gives an idea of the ability of a software system to adapt to approximately change
If defining the fragility of the software is quite simple (tolerance to change), determining and identifying its causes is tremendously complicated since there are innumerable reasons why a system becomes fragile. Still, these reasons remain often interrelated (convoluted somewhat) so that, for example. Someone might think that a system is more fragile the longer it goes without maintenance (for example, because the development platform evolves and a version according to the said system must remain saved, recovered. Or reinstalled). Still, the converse is no less true: a system is more fragile the more modifications it undergoes (for example, if we do not maintain the probability of detecting and correcting above that of introducing errors, errors can only increase with time).
For the first example. It is clear that it is not enough to “do not touch anything” so that the fragility of our software does not increase (it will increase even if we do not modify anything!) And for the second that the fragility will increase or decrease according to a highly complex game juggling an apparent infinity of interrelated (convoluted) factors.
Software Fragility And Entropy
If you are aware of the second law of thermodynamics. You will have noticed that the evolution of a software system and its fragility has a lot to do with the entropy of a system. Lehman indicates that when software remains modified, its complexity always increases. But I (daring of me) do not agree because our software system remains not closed and in the same way that our entropy decreases with our life cycle (eating and. See the road to reality by Roger Penrose ) can reduce the entropy of our software at the expense of increase (for example) our own.
A demonstration (by force informal) is that starting from an empty code. We can go through the infinite graph of edits that we can do on it (for example, “v”, “vo”, “voi”, “void” “voidm” , “voidma”, “voidm”, “void”, “void”, “void m”, “void ma”, “void may”, “void main”, …). Therefore it is obvious that we can move to will throughout the graph. Where each node corresponds to a state of our codebase (some will compile and others will not. Some will have more fragility and others less, etc.). Let’s say that we can reduce (or increase!) The complexity (brittleness and entropy) of our software by flushing it down the toilet …
This result was obvious. The more resources we dedicate, the more likely it is (not sure!) The fragility of our system will remain reduced (moving through the state graph of our code). The question is. What are the minimum resources necessary and how to use them so that the fragility of my systems is within a certain margin ?.
Inside Look at the New Snapdragon Smartphone: 144Hz Lowengadget
Introduction The “Smartphone for Snapdragon Insiders” is meant to showcase all of Qualcomm’s software features that integrate with Qualcomm’s hardware….