Chaos and Order

Chaos is anything goes, to paraphrase Paul Feyerabend. Life, like science, is unpredictable, inherently non-deterministic. The same goes with coding. If you are a novice, you learn to write code, actually it is spaghetti code. HTML, JavaScript, PHP, whatever is your programming language of choice, your code is a pile of entanglement.

There is a description for it. It is Level 1 in Capability Maturity Model – chaotic and ad-hoc. When your code gets big, audacious and hairy, it is time to clean up the mess.

It is time to refactor.

Just as CSS can refactor your HTML, frameworks can tidy up your code. But beware of heavy-handed ones. For PHP, you may try CodeIgniter. For novices, the purpose is to learn the basics. Once you get the hang of it and you feel you want to step up to the next level, you may try the heavyweight frameworks like Zend or Symfony (or anything relevant to your code).

Well, that is as far as coding is concerned.

If you go up the stack, you may encounter the Agile and DevOps movements. The two are related: Agile refers to developers while DevOps refer to continuing the Agile Manifesto up to the operations side.

Einstein once said:

The mere formulation of a problem is far more often essential than its solution.

The Agile and DevOps have articulated a problem and there is no question about it. However, the problem lies with its implementation. Unlike in physics which have immutable laws of nature, the IT software industry is in a constant state of flux. There is no “one-size-fits-all” methodology that you can preach and expect to be followed. There is so much asymmetry in knowledge, training, skills and environment that it is virtually impossible to cover them all.

As Paul Feyerabend said, it is anything goes!

There are only two trends in IT:

  1. Manual – chaotic, ad-hoc, anything goes
  2. Automated – automated, patterns, order, frameworks

Novices in IT almost always take the manual route. After all, we are all beginners at some point in time. Regardless of experience, the manual fashion is prone to error, sleep-deprived, chaotic and bound to incur technical debt.  Manual is entropy unless you operate the simplest of development and operations.

On the other hand, the automated route is orderly, push-button, robotic, deterministic, stable. Regardless of experience, you may take the automated route but you have to pay the price: learning curve, skills transfer, training, unrealized full potential and sometimes, lost productivity.

But here’s the rub: Humans are not robots.

You cannot push down their throat your prized methodology, unless it is

  • it is an apt solution for the problem (context)
  • you have an experienced, battle-tested leader (leadership)
  • skills transfer to the inexperience (training)
  • time (a lot of precious time)

Unless you have those four factors, any Agile or DevOps training or presentation you have attended is bound to fail.

Manual is ad-hoc.
Automation is optimization.

It takes time to learn the business process. Once you get the business process, get it done, then get it right. There is no point in optimization if your business is a mess, if your business process is a mess and if your IT staff has no requisite training.

The wall of separation between manual and automation is simply experience. If you don’t know the basics, automation won’t help you; it will be more of a distraction since you will be forced to learn more of the automation tool rather than actually solving your problem.

The purpose of technology is to enable the business in a way your people already know how. It is a problem of wisdom.

It is not a question of whether to stick with manual or automation. It is how you manage technical debt.

In IT, premature optimization is the root of all evil.

Advertisements

One thought on “Chaos and Order

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s