The 1981 book Simulacra and Simulation by Jean Baudrillard is widely read and cited within academic circles but also permeates popular culture, influencing films, literature, and art. His theories notably influenced the Wachowski siblings’ The Matrix series, bringing some of his ideas into mainstream awareness.
Core to Baudrillard’s work is the suggestion that in our modern society, we are increasingly detached from the “real” and authentic experiences, lost amidst symbols and signs that represent things rather than embody them. In the context of software development, particularly with observability 1.0’s favorite three buzzwords (logs, metrics, and traces), we can draw several analogies to understand software development and debugging.
The real vs. simulated systems
In Baudrillard’s terms, the authentic experiences and the real have been replaced by symbols and signs (logs, metrics, traces). In software development, the real can be seen as the initial design and requirement specifications—the ideal system as imagined by its creators. However, what gets developed (the code, the runtime behavior) is often a simulacrum, a representation of this reality, which may not perfectly capture the original intent due to misunderstandings, errors, or practical constraints.
Debugging and the remainder
Baudrillard talks about the remainder, the parts of our systems that escape definition and cannot be fully captured or explained by our symbols. In software, bugs and unforeseen issues represent this remainder. No matter how comprehensive the testing and development process is, there’s always something that defies categorization or prediction—edge cases, unexpected user behavior, and unknown-unknowns are never considered: “Don’t let perfect be the enemy of good.”
Observability as a bridge to the unconscious
Baudrillard suggests that we have lost touch with our unconscious, which holds repressed desires and unexplained phenomena. In software, this can be likened to the parts of the system we do not fully understand or monitor. This is where the concept of Service Level Objectives (SLOs) in software engineering is analogous to the remainder—the aspects of reality that cannot be fully captured, controlled, or represented by our symbolic systems.
SLOs are specific, measurable goals set to ensure that a service meets the desired operational performance and reliability level. However, like the remainder of Baudrillard’s theory, SLOs acknowledge upfront that no service can be perfect; there is an inherent acceptance of imperfection.
When implementing SLOs, organizations define not just the objectives but also the acceptable level of failure or imperfection, known as the error budget. This error budget is a quantification of how much imperfection is tolerable before the service is considered to be underperforming. It represents an understanding that achieving 100% uptime (or perfection) is neither feasible nor cost-effective, much like Baudrillard’s notion that the real (or in this case, the perfectly reliable service) can never be fully attained or replicated due to the inevitable presence of the remainder.
Thus, SLOs and their inherent imperfection tolerance can be seen as a practical implementation of acknowledging and managing the remainder in system performance and reliability. They represent a balance between the ideal (the service always performs perfectly) and the real (the service has acceptable levels of imperfection), facilitating a healthier, more realistic approach to system design and maintenance.
Observability tools like Honeycomb serve as a means to bridge this gap, providing insights into the unknown aspects of the software, making the invisible visible, and bringing the “unconscious” parts of the system to light.
Ignoring bugs as ignoring the self
Just as ignoring our unconscious can lead to personal issues, ignoring the remainder—or bugs in a software system—can lead to system failures and poor user experience. This disconnection mirrors the disconnection from our unconscious self—it leads to a system (or a self) that operates suboptimally, riddled with unresolved issues.
Baudrillard hints that the unconscious human mind is akin to a repository of repressed desires, forgotten memories, and the inexplicable—the remainder that resists assimilation into our conscious, ordered understanding of the world. This concept parallels the unnoticed or ignored bugs and system flaws in software development. Ignoring does not nullify the existence of these issues; instead, it grants them the power to disrupt and destabilize a system because they operate outside the boundaries of our conscious attention.
In essence, embracing imperfection through well-defined SLOs and observability practices is akin to engaging with our unconscious to understand ourselves better. It’s a process that does not eliminate the remainder but incorporates it into a broader understanding, reducing its disruptive potential and enabling more resilient, reliable, and user-centric software systems.
The process of debugging as self-exploration
Just as exploring our unconscious can lead to personal growth and understanding, the process of debugging—guided by observability tools—is akin to exploring the unknown parts of a software system. The unknown-unknowns, as we call them, involve acknowledging that the system, like the self, is never fully knowable.
Baudrillard’s concept of hyperreality is the condition in which what is real and what is fiction are seamlessly blended together—there is no clear distinction between where one ends and the other begins. This is akin to stories where developers spin cycles trying to diagnose an issue only to determine later that it was a false alarm that impacted very few users. Diving down the rabbit hole into hyperreality is not where you want to be when you’re trying to debug a production issue.
Hyperreality is characterized by a precession of simulacra, where representations precede and determine the real. It suggests a world where the distinction between reality and representation has broken down, and where the simulation is not just a copy of the real, but becomes truth in its own right.
Conclusion
This lens shows software development as an ongoing struggle between the real and the symbolic, the known and the unknown. Observability tools are a means to confront and explore the unconscious parts of systems, uncovering bugs and issues that elude initial understanding or categorization.
This philosophical approach underlines the importance of continuous monitoring, exploration, and adaptation in the face of inevitable imperfections and unknowns-unknowns in software systems. Stay curious, and don’t be afraid to test in production. Your users do.