
MMS • Ben Linders
Article originally posted on InfoQ. Visit InfoQ

Today’s software professionals navigate a maze of technical, business, and social complexity. According to Xin Yao, thriving in this environment requires more than just technical and business expertise. We need fluency in decoupling systems for maintainability, reconnecting them for business value, and working with the messiness of organizational dynamics. At the OOP Conference, Yao explored how sociotechnical design helps us deal with these challenges.
One of the biggest challenges in software is the need to decouple and connect at the same time, as Yao explained:
Developers are expected to break systems into modular, independent parts while also understanding how to reconnect them to create business value. A well-structured API, a message queue, or a data contract may work today, but as the business need evolves, so must those connections be revisited.
As software ages and business contexts evolve, the necessary changes – refactoring, re-architecting, or rethinking system boundaries – are often not held back by technical difficulty alone, but by the social complexity of teams, decision-making structures as well as role boundaries and organisational dynamics, Yao argued.
Software exists within human systems, and yet many development practices assume that the human aspects of software work, like communication, understanding, decision-making, and collaboration, can be neatly structured and controlled like code. But social complexity is emergent, unpredictable, and full of contradictions, Yao said.
Misaligned incentives, rigid team structures, power dynamics, and change fatigue often create barriers to sustainable architecture, Yao mentioned. Many teams lack the necessary conditions for open, reflective conversations, leading to superficial solutions that don’t address underlying social constraints, and thus brittle designs, she added.
Yao mentioned that beyond technical excellence, sociotechnical fitness is key. She mentioned the ability to engage in deep collaboration, reflective conversations, and participatory decision-making:
Skills like facilitation, surfacing questions, active listening, and collaborative modeling help teams navigate uncertainty and align software with human needs.
A prerequisite of sociotechnical fitness is sociotechnical awareness, to see our work with software as a system of systems. Yao argued that it’s essential to design relationships between software, business needs, and the humans behind both:
Developers and architects who recognize this aren’t just building software—they’re cultivating an environment where good software can emerge through trust, shared language, and continuous negotiation of meaning.
Software doesn’t exist alongside the social system, it is embedded within it, Yao said. Our work is a complex social system with complicated technical subsystems as parts. Being embedded, a technical subsystem isn’t an isolated machine we can optimize independently; it grows, shifts, and entangles itself with human decisions, workflows, and power structures:
Every piece of code carries traces of the conversations, misunderstandings, constraints, and compromises that shaped it.
This embeddedness makes software inherently more complex than just a collection of technical parts. The same piece of code can function differently depending on who is using it, how teams interpret requirements, or how decision-making authority is distributed, Yao said.
Software is not pure unpredictability. Practices like DDD, CI/CD, containerization, and TDD bring predictability to the technical realm, Yao said. But this predictability breaks down at the level of human interaction:
The challenge is knowing when to lean on predictability, and when to embrace emergence. That’s the shift from software design to sociotechnical design.
Instead of jumping to solutions, we need to engage with the deeper questions shaping our whole sociotechnical systems – questions of meaning, relationships, and power dynamics, Yao suggested. By doing so, we avoid premature convergence and create solutions that reflect the true complexity of the business domain and the human system.
InfoQ interviewed Xin Yao about dealing with sociotechnical complexity.
InfoQ: What are the key pitfalls to avoid when trying to align architecture with organizational structures?
Xin Yao: Many organizations aim to implement the Inverse Conway Maneuver but struggle in practice. A major pitfall is assuming that simply changing team structures will fix architectural issues. It’s more effective to iteratively adjust boundaries based on how teams naturally collaborate and evolve.
Complexity calls for collaboration. Big bang divide-and-conquer of social complexity (aka. reorganizations or transformation) is not a panacea to decoupling and connecting software.
InfoQ: What’s the role of storytelling in navigating sociotechnical complexity?
Yao: Stories help make abstract complexity tangible. They enable teams to surface assumptions, build shared understanding, foster psychological safety, and engage in productive dialogue.