Skip to main content

5 feedback loops that avoid software architecture chaos

Product development can be chaotic these days. Planning for these five challenges helps avoid them.
Black and white rollercoaster loops

The modern software delivery organization has a solid CI/CD infrastructure and can push an update to production in minutes. This same pipeline can take in upstream library updates and block zero-day exploits. At scale, delivery systems can simultaneously ingest and update software from the hundreds of projects typical to modern application architecture. The scale is incredible.

The challenge, however, is that you are now delivering and managing hundreds of times the amount of code you had a decade ago. There is more software to maintain than ever, and the code that verifies its production readiness also needs to be maintained. The scale of this all is also incredible.

The crux occurs at this point for the application architect: Human-centered research tells us our users no longer have the time to learn all the nuances of our interfaces and instead expect to figure features out in real-time during program use. Research on cognitive load points to the importance that software organizations acknowledging the complexity.

At the same time, the stakes are high for brands. 

According to PWC, one-third of users are unlikely to use any product from a company after one bad experience. That shift in bug tolerance by the developer and change in expectations from the user can lead to chaos.

This challenge of delivering technology-centered compelling experiences that do not require costly support while balancing the needs of past and future development is what I call the Software Chaos Loop, and it affects most software delivery organizations.

Here are five ways I teach software architects and developers alike to satisfy user requirements while avoiding the chaos that can ensue.

1. Focus the backlog on experiences

Social media gives your customers the ability to reach out to you in near real-time and can generate a nearly infinite backlog of requests and features. This deluge of requests will create an inventory in your bug tracking system that has to be triaged and assigned, or in far too many cases, ends up being ignored. In many organizations, this backlog becomes an insurmountable hill. There is neither enough budget to hire nor enough time to climb it.

The only way to shrink this hill is to limit what you ship and ensure you deliver complete, curated experiences. These experiences must survive real user testing with average users and not the expectations that exist in many development organizations of perfectly smart users with infinite training and practice around the products they are expected to use. Of course, all of this assumes that your users will reach out to you regarding their incomplete and incongruent experiences. However, multiple surveys and reports suggest that unhappy users will move on, and then you are left without the feedback or even any idea that your product or service has gaps and is not fulfilling its mission.

To prevent this chaotic pattern, listening to customers needs to be more than a strategy. It needs to be an essential practice of the software development and the greater product teams. You want to ensure your bug tracking system is not overwhelmed with future feature requests. Features belong in your agile sprint tracking and future backlog to provide a clear distinction between a missing experience and a net new experience.

2. Complete unit and integration testing

In order to address the potentially infinite feature backlog possible, your organization has to ensure that unit and integration testing encompasses the complete, curated experiences of your users. This will empower your organization to freely make changes and enhancements to your software without fearing the consequences of those changes.

Test cases should consider the entire experience of a user rather than just the happy path. Products need to be intentional around processing error messages and error states of typical user scenarios via observed testing. This qualitative observation is the only way to determine the necessary escape hatches to redirect the user's path toward a wonderful experience. Actual experiences far outweigh intended experiences and are essential for user satisfaction.

We are now beginning to build the foundations of the Software Chaos Loop by being without comprehensive testing while maintaining an increasingly large feature backlog. It becomes increasingly difficult to update the user experience for your end-users in a controlled and purposeful manner. A commitment to pruning, fiercely protecting, and managing your feature backlog will help your development teams to hold the complete cognitive load of the user experience. Too much backlog means too many optional paths and exponentially increases testing. Having features coupled with robust unit and integration testing ensures complete coverage to both typical and edge user experiences.

3. User research focused on users

Having comprehensive unit and integration testing, along with managing your feature backlog, gives you the baseline processes and methods to innovate and improve your customer's user experience. However, not having research to ground you with holistic portfolio planning is a common problem, and it's flying without a map. Ironically, most user research doesn't focus deeply on the user, but rather on a caricature of the user. How does one avoid this loop?

Being rooted in ethnography and research practices will drive your software delivery organization to a new height by reducing the risk of expensive, random software development investments. Focusing on the culture of the user instead shifts development to areas you know will improve your standing in the marketplace. You can eliminate waste by explicitly knowing where you want and need to go and then delivering customers' required experiences rather than disconnected features. In other words, you can prevent the problem of making and providing code that no one asked for and costs you time to maintain. Without having a dedicated practice around research, you will fall even further down into the rabbit hole of the Software Chaos Loop.

4. Focus on differentiation

Over the last several decades, the amount of open source software produced has exploded in ways that are hard to fathom from only a few years ago. Open source software is eating the world, and it certainly powers millions of applications worldwide. Standing on the shoulders of giants allows you to see very far, and many hands make light work of big problems.

However, a challenge in all of this common software comes in the form of differentiation. Your product offering or service is built on the same foundational technology as everyone else. In other words, by using undifferentiated open source project baselines for your innovation, you are doomed to have the same experiences as your competitors.

Your teams need to be purposeful about how you will deliver the differentiation you and customers crave while deciding how to participate in the upstream communities you are leveraging. Competitive product development and delivery ecosystems trend to the mean of average user experience and features. Finding correct and unique ways for your products and offerings to stand out allows them to differentiate themselves from others and shine in these overly crowded marketplaces. By ensuring you are different from your competitors, you prevent another step in the Software Chaos Loop.

5. Behavior economics, from adoption to end of life

All software must come to an end either in the micro or macro sense. In the micro sense, ending support for a particular individual feature is problematic as someone somewhere will be upset by its removal. Human behavioral economics tells us how loss averse we are by default. Humans fear loss more than gain[1], and the endowment effect defines losses as very painful. Humans, for millennia, have had the saying that a bird in the hand is worth two in the bush. In other words, when your favorite team loses a game, you will lament that loss for far longer than you will celebrate if it was a win. We, as humans, project a much greater value to the things created by or owned by us. When you combine these two things, research suggests that losing hurts three times more than winning, and what we own or create is very valuable.

Research studies show that we, the creator or owner of the technology, overvalue our products by at least three times what a consumer will value [1] . On the side of loss aversion, research suggests that removing a feature requires nine times better experience to consider it of neutral value to the user. Furthermore, in the macro sense, to remove or cancel an entire product, the same calculus of delivering nine times better experience applies. This level of emotional calculus is as real to the user as the software release itself and must be incorporated into product prioritization.

Defining the long-term lifetime journey for your product and its expected iterations helps you to rein in what you are providing in the near term but also gives you guidance for the ultimate destination for your product or service. Being deliberate and delivering complete curations for each stage gives your users positive emotional responses as you incorporate their expectations  (with the right multiplier) around what you are offering.

Putting it together

The Software Chaos Loop affects many software development organizations and prevents them from delivering better products. It also reduces the amount of rework and revisiting of past deliverables that are required. Managing the feature backlog explicitly and with purpose and limiting the blast radius of user-created bugs will speed up your development teams by freeing them of that bug tracking and management overhead. Having complete unit and integration testing around typical user journeys will enable you to make changes to the friction, toil, and invisible work that will occur when you do user research and ethnography around the use of your products. Limiting your portfolio to the requirements and needs of your users will reduce the number of items you need to deliver, and delivering differentiated products prevents the average and mediocre experiences intrinsic to providing solutions using open source software foundations. Lastly, planning for the long-term roadmap and success of your products, but also for the updates of individual features, in the context of always being nine times better, will ensure your users remain satisfied and don't look for replacements.

Stay conscious of these five loops to keep your product advantage over your competitors.

  1. Focus the backlog on experiences
  2. Complete testing unit and integration testing
  3. User research focused on users
  4. Focus on differentiation
  5. Behavior economics, from adoption to end of life


Author’s photo

Jim Tyrrell

Jim Tyrrell founded Design 4 Developers an Open Community that targets the intersection of Design and Software Development.  He is a 25 year Java veteran and holds a Masters of Design Methods degree from the Illinois Institute of Technolo More about me