FREE CONTINUOUS DELIVERY COURSE: Study the fundamentals of Continuous Delivery FOR FREE with my free course. Find out more HERE ➡ courses.cd.training/courses/cd-fundamentals
I love it when two important sets of ideas (and the people behind them) converge. Both Cynefin and Continuous Delivery have been points of light that have helped me orient my thinking and make forward progress. Great video!
❤ Complexity is something that software engineers, scientists, and artists all wrestle with. All of them work by experimentation. It is the nature of creativity in any field. Lovely and very interesting video!
Great video! I think this captures the problem with software engineering really well. Especially the part where you say that at any time, a change in requirement may mean our design doesnt work any more or is now a poor choice even though moments before the design was fine.
Nice to hear someone discuss constraints in the context of software development! This feels like a convergence of ideas. Love the videos. My go-to resource for development ideas. BTW: nice attempt at pronouncing Cynefin, boyo. :)
Outstanding presentation that every software architect should know. And even software project manager with the occasional dedicated executive who wants to support his company more through his engineering team. Understanding the differences and the trade-offs with each type of system could help temper expectations with customers and other stakeholders. I'm going to watch this video a couple more times and take notes. Excellent content as always
THANK YOU - This is Terrific. All of your presentations are great, but this is uniquely important .. and the cnyefin concept you connect to connects to so many domains that are important right now. I had not considered this in terms of the process of developing software, but it makes so much sense.
Wow this is really really cool to learn about, and so helpful for those of us that are converting traditional businesses to more software aware and software production friendly businesses. Thank you as always!!!
Brillant explanation of the non linearity of software development. Thanks a lot. In addition, software development does not happen in a vacuum. The business environment, unexpected and uncontrollable exogenous factors, continuously affects the development, the direction of the software. This is a dynamic world not a static one. A business is a complex adaptive system, an organism… not a machine.
Very helpful. Great to have such a good explanation in this context. I often use the Staci Matrix as a gateway drug to Cynefin in fear going down a rabbit hole. I'll just send a link to this vid from now on.
Thank-you so much Dave. 🙏This is one of the most important videos (and concepts) I've seen in my 35 years in software. I'd argue that the problem of trying to solve non-linear problems with linear solutions is the single biggest contributor to both inefficiencies and ineffectiveness in virtually anything that involves living creatures and self-organization. I've taken a decade-long detour away from code and into movement skill training for pain, rehab, and performance (for both horse and human athletes), and the shift toward a non-linear pedagogy / approach has lit a fire in THAT space, turning classical/traditional practices inside out. Also wondering if you've read the book from AI folks Ken Stanley and Joel Lehman on "Why Greatness Can't Be Planned", inspired by their findings when developing novelty search algorithms. Or my favorite example where my two worlds of movement science and computer science collide: the 2015 Nature paper (Cully, et al.) "Robots that can adapt like animals" (featuring the MAP-Elites algo). So many beautiful examples are... emerging... 😉 for what happens when we let go of trying to solve complex problems as if they were linear/simple/"clear".
Chaotic Act-Sense-Respond reminds me of the OODA loop. Just starting at A, doesn’t matter since it’s a loop. Hmm, that might apply to other categories too, like Complex.
Great stuff, as usual, Dave. At a couple of points in the video, you say "A follows B", but the example you cited, with "A" being sensing, *followed by* a response which you defined as "B". Did you mean "A followed by B"?
I did mean "A follows B", I didn't mean that "A" was "Sense" and "B" was "Response" though. "A" and "B" were meant to be anything as in "Outcome A" resulted from "Action A"
Could it be that most software alternates between complex and chaotic? In my experience, even just talking to users about possibilities changes their expectations and constraints - before you even make a real change! But feature implementation can still be approached in a "complex" mindset, while the project/epic needs an incremental, hypothesis-driven mindset? Software solves human problems and is fundamentally a human-oriented activity; (even internal design/architecture is about maintainability *by humans*). E.g. when you deliver software, people have to change their workflow, and may eventually demand new features they hadn't thought of before. ("now that I can see each item in my order has different status, I need to be able to track and cancel just one item on my order please"). Users who dislike change or anticipate changes that they fear... might pull out of a system and use workarounds (excel, etc). It's almost like fog-of-war, where just trying to anticipate what the other general is doing changes everything. I think. From a project/epic/sprint level perspective, we have to deliver in increments and accept risk by making risk small and incremental and experimental.
I think everyone can be a 10x developer. It depends on the day you measure it. If you're feeling off, you might be a 0.1 from your best capability. People are stressed, there are deadlines, domestic issues, bad sleep, all sorts of things. The greatest leadership should take care of the workforce at a deep level. That would be the only way to truly reduce stress, and therefore 10x productivity, by improving the workers' lives.
You appear to have made a mistake when describing Chaotic. Here is a quote from Snowden, “too confusing to wait for a knowledge-based response.” The connection between the input and output of the system regular meaning the same input produces the same output. The problem is that small and even tiny changes to the input can have sometimes huge, sometimes small, and sometimes no effect on the output. This is what makes a chaotic system “confusing.” As you state in other places, complex systems differ from this in that the infinitely stateful (every input modifies the system by adding to the state) complex system is never the same twice when given the same input and therefore the same input can and often does produce different output .
To argue that software development is not Simple and not merely Complicated, Dave points to the human aspect of software engineering, the engineers themselves (sick on day, Neo-like flow the next day, with no cause-and-effect). Then when arguing that software dev is not Chaotic, he insists we talk only about the machine aspects of software engineering: that computer execution is deterministic, and that non-deterministic aspects like concurrency are parameters under our control. This thought process is schizophrenic. If we conceptualize software development as creative and dependent on humans, then it is a chaotic system as a whole. Software systems themselves at a static moment in time in a particular context are merely complex: hard to predict, but still deterministic and can be understood in hindsight. But software development as a practice is not about one individual software system at a static moment in time. Software development as a whole is most certainly in the chaotic realm. Dave named one example that he should have followed to its conclusion: that software engineers are human. But the chaotic nature of software development is not just about the human performance of software engineers, but also about the context in which software systems are deployed: software will be constantly used in different, unanticipated ways. Markets will change and the software will have to adapt, etc. Dave is simply wrong that software should follow a scientific Baconian process: probe-sense-respond. It is a chaotic realm and companies would do better to follow the chaotic path: act-sense-respond. Follow your intuition to release small increments, put in monitoring and observability so you will be able to understand the result of your actions, then respond to the results with more action. Largely I think this is because Dave doesn't actually understand the scientific process and what probe-sense-respond actually means. It doesn't mean "let's release version 1 and then measure how people respond", that would bet he chaotic realm as I've mentioned. Probing means constructing specific experiments that are meant to probe and ascertain certain parameters of a formal scientific model of the system. This is not a good idea, because software engineering is chaotic: there is no fixed model that we can probe to discover the parameters of.
Problem is, after learning about cynefin, I find a number of people fall for the allure of complexity and begin to strive for it. They want something to be complex, when some analysis or known practice would do. It falls in the same trap as the original "pattern envy" did for design. Stay flexible and be curious
Cynefin is a useful framework, but some of the details are giving me a mental itch... The reference to loose/tight coupling seems the wrong way around, at least in the context of software development. Why would decoupled components be chaotic? If I can change a module without worrying about the effect it has on other modules - that is much clearer. We're *aiming* for decoupled code. Also, what does "lacking constraint" mean? If it means "moving constraints", then sure - that's hard to deal with. But it implies "no constraints" - which is impossible. BTW: I'm using this diagram as a reference (en.wikipedia.org/wiki/Cynefin_framework#/media/File:Cynefin_framework_2022.jpg)
Forgive me, but I think that you are being a bit over literal in ascribing this to technical uses of words like coupled in this context, this is not about components of a software system, but is much more general than that, it is talking about "systems" in the broadest sense... "A system is a group of interacting or interrelated elements" So in a coupled "system" is if I do X and Y then Z ALWAYS results in a decoupled system if I do X and Y then that has no bearing on whether to not Z happens. In a chaotic system (meaning broader than a software system) then the parts of that system *are* de-coupled and lack constraint and means they don't interact and so don't work together and so behaviour is chaotic. At least that is my reasoning of this diagram.
@@ContinuousDelivery Thanks for the explanation. That does help to clarify a few things. Yes, maybe I'm being too literal, and I didn't intend to criticize. The Cynefin framework is very useful and intuitive. That said, terminology can be tricky, especially with systems terms. For example, it seems "chaotic" is used here when it perhaps should be "disordered". And "constraint" seems to mean "dependency". On its own, not a big deal. But when terms clash with other ways of describing systems, it creates confusion. But I think I've got it now. Thanks again.
Dave, I hate to be "that guy"... But I'm gonna do it anyway. The "Enroll" button on the free course is spelled "Enrol". You might want to deliver an update.
None of these are my words, these are the words that Cynefin uses. The only divergence is that I, and quite a few other people it seems, prefer the earlier version of "Simple" rather than the more aliteration inspired "Clear"
@@ContinuousDelivery Dave renamed Disordered to Aporetic a couple years back. No worries, as Dave has been tweaking the language a bit lately. Just thought I'd point it out :). This is an excellent video btw!
How is any of this a GAMECHANGER for software developers? What would we, software developers, start doing differently, after being introduced to the Cynefin model? Also, what is the difference between "Act-Sense-Respond" and "Probe-Sense-Respond"? How is "probe" different from "act"?
The description does describe it as a Framework first, it later mentions that it is a "model" which I think it clearly is, and since that addition improves the search-ability, Sorry to disagree, but I think it is ok for it to stand.
I am not really sure what you expect from a RUclips channel? It takes a lot of time, effort, and a fair amount of money to produce videos like these. So sure we try to sell some things to make up those costs. That isn't our only motivation, I take a lot of pride in trying to help people to improve their approach to software development, and we get a lot of feedback that we do that. But I have bills to pay too. So no! it is not 17 minutes of marketing it is about 1 minute of marketing and 16 minutes of what I hope is useful, educational content. If you'd like to see less advertising, you could watch on Patreon and support the channel that way, but good luck finding content online that isn't funded by marketing in some way.
FREE CONTINUOUS DELIVERY COURSE: Study the fundamentals of Continuous Delivery FOR FREE with my free course. Find out more HERE ➡ courses.cd.training/courses/cd-fundamentals
I love it when two important sets of ideas (and the people behind them) converge. Both Cynefin and Continuous Delivery have been points of light that have helped me orient my thinking and make forward progress. Great video!
❤ Complexity is something that software engineers, scientists, and artists all wrestle with. All of them work by experimentation. It is the nature of creativity in any field. Lovely and very interesting video!
Great video! I think this captures the problem with software engineering really well. Especially the part where you say that at any time, a change in requirement may mean our design doesnt work any more or is now a poor choice even though moments before the design was fine.
Nice to hear someone discuss constraints in the context of software development! This feels like a convergence of ideas.
Love the videos. My go-to resource for development ideas.
BTW: nice attempt at pronouncing Cynefin, boyo. :)
Outstanding presentation that every software architect should know. And even software project manager with the occasional dedicated executive who wants to support his company more through his engineering team. Understanding the differences and the trade-offs with each type of system could help temper expectations with customers and other stakeholders. I'm going to watch this video a couple more times and take notes. Excellent content as always
THANK YOU - This is Terrific.
All of your presentations are great, but this is uniquely important .. and the cnyefin concept you connect to connects to so many domains that are important right now. I had not considered this in terms of the process of developing software, but it makes so much sense.
Very good take on Cynefin! Kudos!
Wow this is really really cool to learn about, and so helpful for those of us that are converting traditional businesses to more software aware and software production friendly businesses. Thank you as always!!!
Glad it was helpful!
Brillant explanation of the non linearity of software development. Thanks a lot. In addition, software development does not happen in a vacuum. The business environment, unexpected and uncontrollable exogenous factors, continuously affects the development, the direction of the software. This is a dynamic world not a static one. A business is a complex adaptive system, an organism… not a machine.
Very helpful. Great to have such a good explanation in this context. I often use the Staci Matrix as a gateway drug to Cynefin in fear going down a rabbit hole. I'll just send a link to this vid from now on.
Thank-you so much Dave. 🙏This is one of the most important videos (and concepts) I've seen in my 35 years in software. I'd argue that the problem of trying to solve non-linear problems with linear solutions is the single biggest contributor to both inefficiencies and ineffectiveness in virtually anything that involves living creatures and self-organization. I've taken a decade-long detour away from code and into movement skill training for pain, rehab, and performance (for both horse and human athletes), and the shift toward a non-linear pedagogy / approach has lit a fire in THAT space, turning classical/traditional practices inside out. Also wondering if you've read the book from AI folks Ken Stanley and Joel Lehman on "Why Greatness Can't Be Planned", inspired by their findings when developing novelty search algorithms. Or my favorite example where my two worlds of movement science and computer science collide: the 2015 Nature paper (Cully, et al.) "Robots that can adapt like animals" (featuring the MAP-Elites algo). So many beautiful examples are... emerging... 😉 for what happens when we let go of trying to solve complex problems as if they were linear/simple/"clear".
Definitely check the wiki page then for the guide image, and Dave Snowden has a few long format workshop videos online where it is put in practice.
The best thing I heard all week!
Best explanation of Cynefin I've seen.
Dave, do you mind if I play this video in some of my Agile training? Obviously credit will be given.
Andy, please do feel free to use this in your training, but I would be grateful for the reference. Thanks.
Yay! Cynefin FTW! ❤
Chaotic Act-Sense-Respond reminds me of the OODA loop. Just starting at A, doesn’t matter since it’s a loop. Hmm, that might apply to other categories too, like Complex.
This video could be a good explanation of why agile approach is usually better than waterfall when it comes to software engineering.
But everyone learned that already decades ago!
You'd think! But that's not my experience of most "agile orgs" in practice.
Almost 200k subscribers 🎉🎉🎉
Great stuff, as usual, Dave. At a couple of points in the video, you say "A follows B", but the example you cited, with "A" being sensing, *followed by* a response which you defined as "B". Did you mean "A followed by B"?
I did mean "A follows B", I didn't mean that "A" was "Sense" and "B" was "Response" though. "A" and "B" were meant to be anything as in "Outcome A" resulted from "Action A"
Could it be that most software alternates between complex and chaotic? In my experience, even just talking to users about possibilities changes their expectations and constraints - before you even make a real change! But feature implementation can still be approached in a "complex" mindset, while the project/epic needs an incremental, hypothesis-driven mindset? Software solves human problems and is fundamentally a human-oriented activity; (even internal design/architecture is about maintainability *by humans*). E.g. when you deliver software, people have to change their workflow, and may eventually demand new features they hadn't thought of before. ("now that I can see each item in my order has different status, I need to be able to track and cancel just one item on my order please"). Users who dislike change or anticipate changes that they fear... might pull out of a system and use workarounds (excel, etc). It's almost like fog-of-war, where just trying to anticipate what the other general is doing changes everything. I think. From a project/epic/sprint level perspective, we have to deliver in increments and accept risk by making risk small and incremental and experimental.
The word "cynefin" reminds me of hearing Dan North talking about "habitability".
I think everyone can be a 10x developer. It depends on the day you measure it. If you're feeling off, you might be a 0.1 from your best capability. People are stressed, there are deadlines, domestic issues, bad sleep, all sorts of things. The greatest leadership should take care of the workforce at a deep level. That would be the only way to truly reduce stress, and therefore 10x productivity, by improving the workers' lives.
Ok it is time to ask can microsoft autodev handle these complexities or where do we place it?
Not yet, and when it can we will have bigger concerns than loosing our jobs.
You appear to have made a mistake when describing Chaotic. Here is a quote from Snowden, “too confusing to wait for a knowledge-based response.” The connection between the input and output of the system regular meaning the same input produces the same output. The problem is that small and even tiny changes to the input can have sometimes huge, sometimes small, and sometimes no effect on the output. This is what makes a chaotic system “confusing.”
As you state in other places, complex systems differ from this in that the infinitely stateful (every input modifies the system by adding to the state) complex system is never the same twice when given the same input and therefore the same input can and often does produce different output .
To argue that software development is not Simple and not merely Complicated, Dave points to the human aspect of software engineering, the engineers themselves (sick on day, Neo-like flow the next day, with no cause-and-effect). Then when arguing that software dev is not Chaotic, he insists we talk only about the machine aspects of software engineering: that computer execution is deterministic, and that non-deterministic aspects like concurrency are parameters under our control.
This thought process is schizophrenic.
If we conceptualize software development as creative and dependent on humans, then it is a chaotic system as a whole. Software systems themselves at a static moment in time in a particular context are merely complex: hard to predict, but still deterministic and can be understood in hindsight. But software development as a practice is not about one individual software system at a static moment in time. Software development as a whole is most certainly in the chaotic realm. Dave named one example that he should have followed to its conclusion: that software engineers are human. But the chaotic nature of software development is not just about the human performance of software engineers, but also about the context in which software systems are deployed: software will be constantly used in different, unanticipated ways. Markets will change and the software will have to adapt, etc.
Dave is simply wrong that software should follow a scientific Baconian process: probe-sense-respond. It is a chaotic realm and companies would do better to follow the chaotic path: act-sense-respond. Follow your intuition to release small increments, put in monitoring and observability so you will be able to understand the result of your actions, then respond to the results with more action.
Largely I think this is because Dave doesn't actually understand the scientific process and what probe-sense-respond actually means. It doesn't mean "let's release version 1 and then measure how people respond", that would bet he chaotic realm as I've mentioned. Probing means constructing specific experiments that are meant to probe and ascertain certain parameters of a formal scientific model of the system. This is not a good idea, because software engineering is chaotic: there is no fixed model that we can probe to discover the parameters of.
Is that a Gource render in the background?
Not sure to be honest, it was a stock background.
Problem is, after learning about cynefin, I find a number of people fall for the allure of complexity and begin to strive for it. They want something to be complex, when some analysis or known practice would do. It falls in the same trap as the original "pattern envy" did for design. Stay flexible and be curious
Cynefin is a useful framework, but some of the details are giving me a mental itch...
The reference to loose/tight coupling seems the wrong way around, at least in the context of software development. Why would decoupled components be chaotic? If I can change a module without worrying about the effect it has on other modules - that is much clearer. We're *aiming* for decoupled code.
Also, what does "lacking constraint" mean? If it means "moving constraints", then sure - that's hard to deal with. But it implies "no constraints" - which is impossible.
BTW: I'm using this diagram as a reference (en.wikipedia.org/wiki/Cynefin_framework#/media/File:Cynefin_framework_2022.jpg)
Forgive me, but I think that you are being a bit over literal in ascribing this to technical uses of words like coupled in this context, this is not about components of a software system, but is much more general than that, it is talking about "systems" in the broadest sense...
"A system is a group of interacting or interrelated elements"
So in a coupled "system" is if I do X and Y then Z ALWAYS results in a decoupled system if I do X and Y then that has no bearing on whether to not Z happens.
In a chaotic system (meaning broader than a software system) then the parts of that system *are* de-coupled and lack constraint and means they don't interact and so don't work together and so behaviour is chaotic. At least that is my reasoning of this diagram.
@@ContinuousDelivery Thanks for the explanation. That does help to clarify a few things. Yes, maybe I'm being too literal, and I didn't intend to criticize. The Cynefin framework is very useful and intuitive.
That said, terminology can be tricky, especially with systems terms. For example, it seems "chaotic" is used here when it perhaps should be "disordered". And "constraint" seems to mean "dependency".
On its own, not a big deal. But when terms clash with other ways of describing systems, it creates confusion. But I think I've got it now.
Thanks again.
TC 13:50 Twitter - BAM!
Felt personally attacked with that chaotic bug fixing comment😂
Dave, I hate to be "that guy"... But I'm gonna do it anyway. The "Enroll" button on the free course is spelled "Enrol". You might want to deliver an update.
I love a pedant (being a programmer:-) But in British English it is definitely spelled "enrol".
@@ContinuousDelivery TIL
I think using twitter as an example and then trying to argue it's no chaotic is pretty funny
It was meant to be "tongue in cheek" 😉
Poke and feel your way through
12:19 Disordered? If you mean unknown, there's a better word for that.
The better word is "aporetic"
None of these are my words, these are the words that Cynefin uses. The only divergence is that I, and quite a few other people it seems, prefer the earlier version of "Simple" rather than the more aliteration inspired "Clear"
@@ContinuousDelivery Dave renamed Disordered to Aporetic a couple years back. No worries, as Dave has been tweaking the language a bit lately. Just thought I'd point it out :). This is an excellent video btw!
How is any of this a GAMECHANGER for software developers? What would we, software developers, start doing differently, after being introduced to the Cynefin model?
Also, what is the difference between "Act-Sense-Respond" and "Probe-Sense-Respond"? How is "probe" different from "act"?
Hi Dave, please update your description of a video. Cynefin is not a "model" it's a framework.
The description does describe it as a Framework first, it later mentions that it is a "model" which I think it clearly is, and since that addition improves the search-ability, Sorry to disagree, but I think it is ok for it to stand.
Refer to the butt-cheek matrix.
Every river have different fish, so every computer have different software.
lol, took you long enough to get here :D
Both Scrum and SAFe re-enforce the nonsense to management.
So, as humans are not perfectly consistent no system involving humans could be clear? Meh.
Is it just me or does that image look like a neuron?
"we can't write automated tests because it's non-deterministic"... OK fix it then!
So it's a 17 minutes marketing video.
Is there a product that this is promoting for anybody to buy? I just see typical channel self-promotion and link to their own free course.
And how is that not marketing?
I am not really sure what you expect from a RUclips channel? It takes a lot of time, effort, and a fair amount of money to produce videos like these. So sure we try to sell some things to make up those costs. That isn't our only motivation, I take a lot of pride in trying to help people to improve their approach to software development, and we get a lot of feedback that we do that. But I have bills to pay too. So no! it is not 17 minutes of marketing it is about 1 minute of marketing and 16 minutes of what I hope is useful, educational content.
If you'd like to see less advertising, you could watch on Patreon and support the channel that way, but good luck finding content online that isn't funded by marketing in some way.
@@ContinuousDelivery Too right....
@@ContinuousDelivery some people have their brains inside their asses. It is the case of that person.