Wednesday, 28 November 2007

Programming Weapons

In a recent email conversation with Rick Mugridge the topic of Agile tools came up.... Which got me thinking about what tools we make use of as software creators. And possibly more interesting, what the tools of the future might look like.

So anyways I came up with a number of categories of tools.

1. Composition
2. Transformation
3. Validation
4. Thinking
5. Collaboration
6. Ergonomic

Which I will talk more about soon....

Part of my thinking process was that there are some interesting correlations between software development and martial arts.

I see martial arts and software development made of the following

Weaponary - Tools we have at our disposal
Tactics - the coordinated and organised application of weapons
Strategy - A plan to achieve a goal using a set of tactics (including adaptable plans that change tactics)
Philosophy - A system of rational thinking based around what one believes to be true.

Being able to fight or create software comes from a holistic application of all these things.

In the world of "Agile" there are some shared "values" of software development. They feed in at the level of "Philosophy" giving some sense of the epistemology ( what knowledge is thought to be "true" ). However that is about it. From there Agile is expressed with many different Philosophies / Strategies / Tactics and Weapons. Some things get shared ( especially the more effective weapons and tactics )

Choosing to be "Agile" really doesn't mean a lot. Choosing to do Scrum or Extreme Programming is more useful. Often choosing to be "Agile" results in making choices similar to....

"Punching? yep sounds good, we'll do some of that"
"Kicking? well, that sounds a bit difficult, perhaps we'll do that later"
"Throws and Takedowns? Seem to be a waste of time"
"Grappling? Supposedly that's good, we'll do a bit of that"

Now we end up with a system where there is no guiding philosophy, strategies that are not cohesive, tactics and weapons that sometime work and sometime don't without much clue as to why.

I think it pays to gain mastery in one holistic system then learn to create (or adapt) holistic systems that tie everything together in some cohesive and coherent way.

Having said this, a holistic system isn't a foolproof plan for winning. It might fail badly in certain contexts. However, once you have mastered one system you can "train" in various contexts and learn and adapt and incorporate new things based on your experience.

Also depending on what your fighting/creating depends on what kinds of strategies/tactics/weapons you apply to the situation.

What I have seen is if you don't have a guiding philosophy for adapting and changing things then you can actually create situations where your strategies and tactics end up fighting themselves.

Over the next few blogs I'll try and flesh out some of what that all means to me and how these categories of tools come together and get applied to create various tactics.

No comments: