Clear-> Complicated -> Complex -> Chaos
I had a morning walk in todays sunny weather with with one of my friends today and while drinking our coffee after the walk, we started talking about staff and above level software engineer expectations. Two of them are staying calm during chaos and dealing with the unknown and complexities. Beyond senior the engineering levels are mostly defined by the behaviours shown rather than the technical level or project work. He explained the framework, later I learned that it has a name Cynefin framework, which is used in to bring a an understanding to the experienced situation to aid decision making.
Software Engineering & Decision Making
While working on projects as software engineers, we need to make decisions either to select which approach to select, how many engineers needed, to provide estimations, change architecture or product experience etc. The number of decisions and their complexity changes based on the project itself (technical complexity, product complexity, data, scale, XFN teams etc) or depending on your role and seniority. However, decision making is not easy. The first thing before making any decision is to understand the type of system you’re in. The systems are defined as below:
1. Clear
These systems consists of knowns only. They do act like a idempotent functions, where with the same input the output will always be the same. There are no unknows, no suprised no non linearities. There are also best practices in place where using them is the wise choice.
2. Complicated
These are the systems where the problem is hard but with enough knowledge or effort, things can be dealt with. In these systems, there are unknowns however the unknowns are known. The number of parameters (which is also a definition of complexity for systems) are high which requires a big effort to manage the system or make changes.
While making decision for the complicated systems, generally people who are specialized in specific areas play crucial roles. One example of these systems are jet engines. They are very complicated systems, however with enough specialized people from different fields, a jet engine can be made or improved. XFN teams and specialized people are the main drivers of the complicated projects.
3. Complex
In these systems, number of unknown parameters in the system is greater than the known parameters. Unknows are scary. Nobody knows what will happen if there are more unknowns in the system. Therefore, the most logical choice is to bring clarity to the system with closed feedback loops.
Importance of Agile is crucial to effectively be productive and make the right choices while working in complex environments. Experimentation, failing fast and learnings are important tools while making decisions.
4. Chaos
SEV’s, system downtimes and failures or any type of emergency events can be categorised as chaos. The initial and most logical reaction is to get rid of this state as quickly as possible, time is critical we should stop the bleeding! In these type of situations, people generally get together in a room (some call them war rooms) to collaborate and just act. Nobody has clear idea on the results of their affects since the but the only thing they can do is to try and see. Action is the only way to respond to chaos. Having top down directives can be useful to quickly act and respond in chaos.
The very quick summary and understanding of what I’ve learned today. Personally, i’ll look into the situations with this in mind from now on and try to help decision making process. Spending time to analyze the environment you’re working on and using the framework provided for each of them to simplify decision making would help for personal growth and influencing others.