How do we make decisions in software engineering?
Posted: Wed Feb 12, 2025 7:19 am
There is no single best documentation framework, but exposing development details is certainly crucial to addressing issues in the future.
Software engineering has been facing a crisis for over 50 years, first identified at the 1968 NATO Conference. Edsger Dijkstra described this crisis in his Turing Award speech, noting that the exponential growth of computing power has made programming increasingly complex and unwieldy.
Over time, we have created more code, more abstractions, and a growing number of systems that, far from being simplified, have become increasingly difficult to maintain and modernize. The software industry has prioritized the creation of new solutions, without an adequate focus on managing legacy software, leading us to a backlog of old systems that require significant effort to be understood, modified, or replaced.
The problem of legacy software affects not only denmark telegram data technology companies, but all industries that rely on technology. This book proposes a solution: rethink software engineering as an efficient and systematic decision-making process, rather than a process based on manually reading code.
The concept of documented development allows us to transform the way we explore systems, optimizing decision-making and allowing a clearer and more precise understanding of the architecture and operation of the software.
Why talk about decision making?
As developers, we spend more than 50% of our time trying to understand the systems we work on before we can make any changes or improvements. We analyze the impact of modifications, investigate errors, and design new features. However, we rarely reflect on the decision-making process itself.
In most cases, we focus on evaluating whether a decision was correct, but not on analyzing whether the way we made that decision was the best. To optimize our work, it is essential to improve the decision-making process itself.
The decision-making process in software engineering
In general terms, the decision-making process in software follows these steps:
We evaluate the problem: Before taking any action, we must understand the context of the problem.
We explore the system: We investigate the components of the system and how they interact with each other.
We talk to other people or the system: We gather information through documentation, customer information, peers, or direct testing in the code.
We share information: We organize what we have learned so that we can make informed decisions.
We synthesize the information obtained: We draw conclusions from the analyzed data.
We use development tools: We interact with the system through tools that allow us to verify and validate our hypotheses.
Software engineering has been facing a crisis for over 50 years, first identified at the 1968 NATO Conference. Edsger Dijkstra described this crisis in his Turing Award speech, noting that the exponential growth of computing power has made programming increasingly complex and unwieldy.
Over time, we have created more code, more abstractions, and a growing number of systems that, far from being simplified, have become increasingly difficult to maintain and modernize. The software industry has prioritized the creation of new solutions, without an adequate focus on managing legacy software, leading us to a backlog of old systems that require significant effort to be understood, modified, or replaced.
The problem of legacy software affects not only denmark telegram data technology companies, but all industries that rely on technology. This book proposes a solution: rethink software engineering as an efficient and systematic decision-making process, rather than a process based on manually reading code.
The concept of documented development allows us to transform the way we explore systems, optimizing decision-making and allowing a clearer and more precise understanding of the architecture and operation of the software.
Why talk about decision making?
As developers, we spend more than 50% of our time trying to understand the systems we work on before we can make any changes or improvements. We analyze the impact of modifications, investigate errors, and design new features. However, we rarely reflect on the decision-making process itself.
In most cases, we focus on evaluating whether a decision was correct, but not on analyzing whether the way we made that decision was the best. To optimize our work, it is essential to improve the decision-making process itself.
The decision-making process in software engineering
In general terms, the decision-making process in software follows these steps:
We evaluate the problem: Before taking any action, we must understand the context of the problem.
We explore the system: We investigate the components of the system and how they interact with each other.
We talk to other people or the system: We gather information through documentation, customer information, peers, or direct testing in the code.
We share information: We organize what we have learned so that we can make informed decisions.
We synthesize the information obtained: We draw conclusions from the analyzed data.
We use development tools: We interact with the system through tools that allow us to verify and validate our hypotheses.