Introduction
Have you ever felt that software is becoming unnecessarily complex? Many developers and users alike are noticing a trend towards increased complexity in software development, a phenomenon some call “enshittification.” Understanding why this happens is crucial if we want to build more efficient, maintainable, and user-friendly applications. This article dives into the reasons behind this trend, examining perspectives from various experts and offering potential solutions for a simpler, more sustainable future of software. We will explore the arguments for software simplicity and how we can actively resist the pull toward unnecessary complexity.
The Rising Tide of Software Complexity
Why Do Developers Embrace Complexity?
Ukrainian developer Kyrylo Silin raises a critical question: “Why do software developers love complexity?” He argues that multiple factors contribute to this tendency. Marketing often prioritizes flashy features over user-friendly design. Programming can become a creative outlet where developers are more focused on crafting intricate solutions rather than practical ones. The pressure to innovate also contributes to software bloat. Silin doesn’t shy away from pointing fingers, even calling out React, a popular JavaScript library, for contributing to the problem, suggesting developers should “just fucking use HTML.” Silin compares software to the building of the pyramids. Complexity is meant to amaze while simplicity is understated.
Here are some of the reasons why complexity is embraced:
- Marketing pressures: The need to showcase advanced features, even if unnecessary, to attract customers.
- Creative expression: The satisfaction developers derive from solving problems with elegant, albeit complex, code.
- Legacy systems and technical debt: Existing codebases can be difficult to modify, leading to complex workarounds.
- Team and collaboration dynamics: Large teams can introduce complexity due to communication overhead and differing opinions.
- Competitive innovation: The drive to constantly add new features, often at the expense of usability and maintainability.
The Grug Brained Approach: A Call for Software Simplicity
In contrast to the trend towards complexity, the “Grug Brained Developer” offers a refreshing perspective. Written in a humorous, caveman-like style, Grug (grugbrain.dev) champions simplicity in software design. The core principle is to use the simplest possible solution that gets the job done. The project’s open-source nature is reflected in its minimalist license: “do what want.” This has inspired adaptations like “The Grug Brained Data Scientist.” While the latest release “Grug.Design” doesn’t follow the “use HTML” approach, the overall movement highlights the value of reducing unnecessary abstraction and complexity.
Kernighan’s Law: A Timeless Principle
The core philosophy of Grug and other advocates for simplicity resonates with Kernighan’s Law: “Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?” This principle, articulated by Brian Kernighan, the co-creator of UNIX and inventor of “Hello, world,” emphasizes the importance of writing code that is easy to understand and maintain. If even Kernighan, a renowned computer scientist, advises against overly clever code, it’s a warning we should all heed.
The XZ Backdoor: A Case Study in Complexity and Security Risks
The 2016 article “Xz format inadequate for general use” (originally titled “Xz format inadequate for long-term archiving”) highlights the risks associated with complex software. The author, Antonio Diaz Diaz, criticized the XZ compression tool for its intricate and potentially insecure code. Unfortunately, these warnings went largely unheeded until the 2024 XZ backdoor incident, which impacted numerous Linux distributions. This incident serves as a stark reminder that complexity can obscure vulnerabilities and make software more susceptible to attacks. By adding layers to code it becomes easier to add or hide malicous lines.
Lessons From Retro Tech and the Limits of Growth
The Allure of Simpler Systems
There’s a growing nostalgia for “retro tech,” and one of the main reasons is its relative simplicity. Older 8-bit and 16-bit computers were far easier to understand and work with compared to today’s complex systems. The rise of 32-bit architectures, which enabled innovations like Linux and Windows NT, also introduced a new era of complexity, but even those are being longed for now in the face of the rising complexities of software.
The Limits of Moore’s Law and the “Worse is Better” Philosophy
For decades, increasing computing power has masked the negative effects of software complexity. The “Worse is Better” philosophy, which prioritizes rapid development and broad adoption over elegant design, has thrived in this environment. However, with the slowing of Dennard scaling and the limitations imposed by Amdahl’s Law, this approach is becoming less sustainable. Adding more programmers to a project doesn’t necessarily make it faster, as highlighted in Fred Brooks’s “The Mythical Man-Month.”
A Looming Crisis and the Need for Sustainable Software
Our reliance on complex software is becoming increasingly precarious. Global events like the war in Ukraine and potential conflicts in Taiwan pose significant risks to the supply chain of advanced chips. Climate change also threatens to disrupt our technological infrastructure. In the face of these challenges, we need to move towards more sustainable software development practices, focusing on simplicity, maintainability, and resilience. This likely means a move to artisanal software that can be maintained by hand.
Conclusion
The trend towards increased software complexity presents significant challenges, from security vulnerabilities to sustainability concerns. By understanding the root causes of this trend and embracing principles of simplicity, we can create more robust, maintainable, and user-friendly software. This requires a conscious effort to prioritize simplicity over flashy features, to heed Kernighan’s Law, and to learn from the lessons of retro tech. The future of software may depend on our ability to resist the allure of complexity and embrace a more sustainable approach to development. What do you think? Comment below!
Sources & Further Reading:
Original article at go.theregister.com


