This means that two similar entities (for example CS VS in NetScaler) should not have any common configuration. This approach has following benefits
It enables repeatable entities scale design. For example, multiple CS VS config can happen in parallel
It helps in cleanup. Note that each a single entity lifetime can be managed independently
Design should depend on minimum possible number of movable parts
K8s controller has following dynamic parts
Ingress
Service
Endpoint
Secret
CRD
Any flow should reduce dependency on above whenever possible. Any change in dynamic part (for example, ADD/DELETE/MODIFY)results in
Extra processing
Config related change
Code complexity
Simplicity in design is one important criteria we value. Design simplicity helps in
Troubleshooting customer issues
Feature enhancement, as new developer will understand it well
Horizontal scale.
For completion, correctness can't be devalued over simplification (called as over-simplification)
Also, we understand that coding level simplicity as much important as simplistic design. It means that even if a simple design is not possible to implement in natural way and any hack is needed, then we need to revisit this design to arrive at right balance.
If user provides wrong input (for example, unexpected annotation in Ingress resource), then code will have default behaviour. Also, product logs the problem so that admin can take up necessary action. K8s environment is used for automation/Infra as code and so, default behaviour allows infra to run until admin corrects it
For example, if an admin can revert wrong ingress just by deleting it.
Logs should be good enough to
Troubleshoot config issue
Detect user misconfiguration as much as possible. For example, in case ingress is not applied due to absence of service, then using log, admin can understand and correct it.
Learning from WhatsApp/google talk history, we will value any feedback and evaluate them on user centric impact. This way, product will always be top solution meeting market need.