Applying the cynefin framework in software engineering

I am constantly looking for ways to help me with decision-making, whether it involves a technical or non-technical decision. Many call these principles, while others refer to them as guidelines. I don’t think there is one magic way to help you solve everything, but there models that can guide you to a certain extend, at the end of the day every situation is different, every team is different, every project is different and the organisational context in which you operate is different.

I stumble upon the Cynefin Framework, the framework categories the situations in 5 domains and proposes different strategies to help you move forward.

Cynefin Framework

Clear domain

Clear Domain

The clear domain encompasses the “known knowns,” signifying that established rules or best practices are in place, the situation remains stable, and the relationship between cause and effect is well understood.

Example Implementing a Standard Login Feature

  • Task: Adding a login feature using a predefined authentication library.
  • Approach: Follow a clear set of steps from the library’s documentation.
  • Outcome: Predictable and consistent implementation of the login feature.


Complicated Domain

Example: Integrating a 3rd party payment gateway

  • Task: Integrating a payment gateway (e.g., Stripe or PayPal) into an e-commerce platform.
  • Approach: Involve an experienced developer to analyze the API documentation, configure settings, and ensure secure transactions.
  • Outcome: Functional payment integration after thorough testing and debugging.

Complex Domain

Complex Domain

Example: Developing a machine learning Recommendation System

  • Task: Creating a recommendation engine for an e-commerce platform to suggest products to users.
  • Approach: Iterate on models and experiment with different algorithms. Refine based on user feedback / KPI results.
  • Outcome: An evolving system that improves over time with data, feedback, and continuous iteration.

Chaotic Domain

Chaotic Domain

Example: Production server outage

  • Task: Addressing a critical server failure that has taken the application offline.
  • Approach: Act quickly to identify and fix the immediate issue. Communicate with stakeholders and customers to manage the crisis.
  • Outcome: Immediate stabilization of the system, followed by a post-mortem to prevent future outages.


Disorder Domain

Example: Navigating organizational change affecting a project

  • Task: Adjusting a project in response to a sudden change in company strategy or leadership priorities.
  • Approach: Engage in open dialogue with stakeholders to understand new priorities. Adjust project plans and team goals to align with the new direction.
  • Outcome: Realigned project objectives that fit within the new organizational context, maintaining team morale and focus.


My approach? Categorize the situation, problem, or project into one of the domains and try to bring it down. For example, if it’s Chaotic, reduce it to Complicated; if it’s Complicated, try to reduce it to Clear, etc. There is no silver bullet and no framework will give you the answer, the goal is to help you reach it by following some principles.

Published 26 Jun 2024

Tüftler (someone who enjoys working on and solving technical problems, often in a meticulous and innovative manner). Opinions are my own and not necessarily the views of my employer.
Avraam Mavridis on Twitter