# A Note on Essential Complexity

## ๐ Abstract

The article discusses the role and responsibilities of software engineers, focusing on the concept of complexity management as the primary duty. It challenges the notion of "essential complexity" being irreducible and argues that software engineers can redefine the problem and shape user expectations to minimize complexity of any kind.

## ๐ Q&A

### [01] Complexity as the Main Duty of Software Engineers

**1. What is the main duty of a software engineer according to the article?**

- The article suggests that the main duty of a software engineer is to manage complexity, which includes minimizing accidental complexity and assisting with essential complexity.

**2. How does the article define essential and accidental complexity?**

- Essential complexity is the inherent complexity of a problem that cannot be simplified by changing the software alone. Accidental complexity is the unnecessary complexity introduced by the software implementation.
- The article argues that essential complexity is not necessarily irreducible, as software can potentially change user expectations and redefine the problem.

**3. What is the author's stance on the notion of essential complexity being irreducible?**

- The author challenges the idea that essential complexity is irreducible, suggesting that software engineers can redefine the problem and get the world to conform to the software, rather than just the other way around.

**4. How can software engineers minimize complexity according to the article?**

- The article suggests that software engineers can simplify the goal from minimizing accidental complexity and assisting with essential complexity, to minimizing complexity of any kind.
- This can be achieved by questioning assumptions, dissuading stakeholders, and redefining the problem specification to uncover the true essence of the problem.

### [02] Redefining the Problem and Organizational Complexity

**1. How can software engineers redefine the problem to minimize complexity?**

- The article suggests that software engineers can redefine the problem by getting users or customers to accept changes in requirements, implying that the removed complexity was not essential in the first place.
- This progress in uncovering the true essence of the problem requires engineers to question assumptions and dissuade stakeholders.

**2. What approach does the article describe for dealing with legacy software systems?**

- The article suggests a "reduce-complexity-at-all-costs" attitude, where anything is up for removal until proven otherwise. This involves turning off systems and waiting for someone to complain, which can provide more information about the system's functionality and reduce organizational complexity.

**3. What is the potential extreme consequence of software engineers solely focusing on minimizing complexity?**

- The article presents a reductio ad absurdum scenario where software engineers could envision simpler implementations and persuade organizations to align their processes with those implementations, effectively automating employees and simplifying systems out of existence.
- The article acknowledges that this extreme consequence results from taking the initial premise beyond reasonable limits and ignores other factors, such as economic interests, that determine the work of software engineers.