Human being, by nature, learn by doing experiments. These experiments vary in size and magnitude, but it doesn’t mean that they are proportional to learning achieved. Sometimes experiments have an unexpected outcome and impact, many times irreversible. That’s why they are executed under controlled conditions.
If we think how we, human beings, learned all that we know today (including eating, nail cutting, medicine, software development) comes basically from an experiment that we did at some time. Then came knowledge from inside thanks to thinking and began a virtuous circle. Experiments can be simple, like filling a glass with water, or can be as complex as those made with LHC.
1. Experienced Professions
There are professions that have more time traveling the path of experiments, thinking and learning compared to software development. Some examples are: architecture, medicine, mining, among others. These professions already experimented some unexpected outcomes or undesirable impacts of learning, at least by thousand of years. In medicine many people suffered or died because experimenting and learning of medics. It continues experimenting but has a very large body of knowledge that supports its success today. Just new illnesses or very strange situations are challenges.
2. Software Development
Software development, as such has almost one hundred years of learning. Has evolved rapidly in a way that software products improve quality and satisfy customers. But still doesn’t have sufficient maturity to be stable in outcomes and not be mentioned as neccesary evil inside organizations. Also, unexpected outcomes or undesired impacts are mainly intangible, so they don’t generate consciousness immediatly. Developers are treated as machines being directed by analysts or project managers. This is inimaginable in medicine, being an analogy that a medic specify a clinical intervention then another professional do the work. Obviously, many people would die. Another example is a painter specifying a work of art and then doing handoff of those specifications to another painter and expect perfect results.
There are many so called anti-patterns in our industry. But they aren’t widely used, maybe because complementary professions (industrial engineering, commercial engineering and so on) are still managing the software development with “old-fashion way”. Lean and Agile software development have set the basis to change, they are being spreaded and adapted to another engineering disciplines. Interfaces between adaptations should not be forgotten. We have to continue working for a better discipline.
Your comments are important so we can share knowledge, ideas and thoughts about software development maturity.