Software development (but also the development of Machine Learning and AI) is combat against chaos and complexity. It is bad enough when software becomes chaotic and does unexpected things, but it is even worse, when software becomes too complex to be fixed.
I created a model that illustrates both phenomena, because they need to be dealt with in different ways.
Two examples:
A function that randomly outputs 1’s and 0’s is:
- simple (because it is easy to understand) and
- chaotic (because the results are random).
If the function breaks (it’s not random anymore), then it easy to fix, because it is simple.
A chatbot is:
- complex (because nobody understands its neural configuration) and
- predictable (because we expect it to give specific answers to specific questions).
If the chatbot breaks (its not giving the expected answers), then it is almost impossible to fix it, because it is so complex. An example of this is Tay, the Microsoft chatbot that became racist.
The model
Software that is:
- Simple and predictable is good
- Simple but chaotic is usable in for example cryptography.
- Complex but predictable is not good, but necessary to solve complex problems (like winning Chess and Go). This is where AI and ML should be.
- Complex and chaotic – very bad. I have seen many IT-projects ending here to die. AI and ML should avoid this.
Measuring predictability and complexity
Predictability can be measured and controlled with functional- and operational-testing.
Complexity can be measured and controlled with developmental-testing. This is a key factor in the development of AI and ML.
To put it short:
- The predictability measures “if” something is predictable or chaotic.
- The complexity measures “how difficult something is to understand and therefore fix it”.