Not all those decisions are ineffective, but they are all driven by Control.
TDD, refactoring, retrospectives, etc - will paradoxically start producing waste, increasing the complexity of our system, making it rigid, capricious, or even paranoid.
Waaaaaah! Our software is crying. It needs something and we don’t know what to do...
We do our best to take care of it by applying sound principles and advanced practices. We are committed to continually improving our process. Nonetheless, our software keeps crying. You might have experienced something like this when you’re looking after a baby and she starts crying: you rock the baby, you feed her, you follow all the good advice your doctor has given you; still, the baby’s cries get louder. And despite the fact that we’re trying our best to grow our software, we end up staring at the blinking cursor, feeling we have to do “something” but unsure what that could be.
“Why does this happen? Aren’t the principles and practices we use in software development good enough to grow a healthy software system?”
No, they are not enough. It is the way our mind “drives” values, principles and practices that can lead either to success, or failure and delusion.
At every Waaaaaah! our mind can only perform one of two teeny-tiny adaptive responses:
an effort to adapt the "other" in terms of what we already know
looks for structure, completeness, containers, classifications, categories, abstractions, substitution, perfection, separation, splitting, breaking. If necessary it favours exerting more force: accelerating.
applies force to protect
sees uncertainty as a risk. To protect us from risk, Control adapts towards known structures and patterns.
an effort to adapt our current knowledge in terms of the "other"
looks for concreteness, exchange, exploration, dialogue, new planes and channels of communication, new languages.
values trust and favours exchange with "the other"
sees uncertainty as an opportunity. Through dialogue it favours the "uncertainty of the answer" and allows "the other" to freely express itself.
Your next decision shapes your software's behaviour.
Relationship knows how to deal with complexity and change. Control knows how to deal with simple and stable, often urgent problems which require hard work to reach a solution.
Are you intrigued? Do you want to know more about Waaaaaah! Programming?