Embracing Conflict

We all think differently, and this is a good thing. And there’s definitely value for particular paradigms at different points in software lifecycle. When we use the wrong paradigm at the wrong time, we end up in situations less desirable.

Researching the anti-patterns related to abstracting too early, it becomes obvious that implementing an abstraction ahead of its time results in bad design. Apart from the complexities and maintenance, there are hidden dangers about the assumptions subclasses make when they override methods, particularly over time and changing development teams. Couple these and you can end up with a time bomb.

This [abstracting too early] particular concept has resulted in endless [moot?] discussions within Agile teams debating inter-alia, upfront design, YAGNI and simplest thing. These “discussions” have divisive power and can hinder progress if the fruit of the discussions is not managed appropriately.

Yet, there are definite advantages to thinking this way. Thinking in the abstract and seeing a bigger and more vague, yet determined way, can be useful in spotting potential problems down the line. Thinking in the abstract and visualising complex inheritance heirarchies and patterns upfront [so complicated its bound to impress the client :)] adds value to the discussions and directions by adding scope to thought.

It becomes a problem when one argument insists, dogmatically, that the ObviousImplementation is the only road to take and the psychic team insist, equally vehemently, that it is the only road to take. And don’t think that a public opinion poll is going to substitute for real thought.

Regardless of the judgements ultimately placed on any pattern, or anti-pattern, methodology or approach, a successful team can work productively within the apparent chaos and all it’s contradictions. Deciding when to use which paradigm is a critical decision. Deciding to dogmatically ban one undesirable paradigm, largely because it surfaces at the wrong time, is a shortcut to weaknening your team and disempowering your colleagues.

At each end of the contradiction is a powerful force that needs to be maintained in tension with it’s opposite. By harnessing this tension you can maintain a steady and powerful course, but be willing and prepared to use the opposing powers when the balance shifts unexpectedly. The degrees to which you need to harness are determined by the degree of imbalance. And if you don’t proactively manage these forces against one another, they will ultimately clash and spiral into destruction.