Sunday, August 3, 2014

Self-healing Systems


When we want to change something, should we do it in one fell swoop – or should we let it happen iteratively?  Should we build an elaborate mechanism of checks and balances that ensures that no mistakes are committed – or should we be lenient and let the system recover from mistakes?  These questions stem from one of the most fundamental challenges any designer encounters: should we design a complex system, or should we develop a simple system that grows organically?

Of course, the answer to this age old dilemma is KISS – Keep it Simple, Stupid!


Let me explain.  In one of our internal systems we keep the information of employees and their managers.  Our employees frequently move between projects.  It is necessary to keep track of who is managing whom in a timely fashion.  How do we do that? As the manager-direct relationship is not trivial, we had a process where the outgoing manager informs the HR department about release of their direct and the new manager requests that employee to be assigned to them.  Now the problem is that for the managers this is a chore.  And not one, but two managers need to synchronize their actions to make this happen.  The direct, for whom this change is very important – as her performance review is at stake – has no control over the process which routinely used to drag for days or even weeks.  The process had been designed to ensure that the changes, whenever they are effected, are always correct. But this process proved to be too painful for the key stakeholder, viz. the direct. 

We decided to invert the process completely. We now allow employees to change their managers by themselves.  The immediate reaction was of panic. Sacrilegious! How can you allow someone to arbitrarily change their own manager without any approvals? What if they play a mischief? If they mess it up what will be the consequences and who will clean the data? However, soon everyone reconciled to the simple “organic” nature of the change. Why would anyone play a mischief? If they do, won’t they get caught quickly? (We have notifications built in.) In case someone messes up – isn’t correcting it also simple?

The ability to spot an aberration quickly and letting it be corrected swiftly, as a part of the process itself, is the hallmark of a “self-healing system”. 

The celebrated Gall’s law (John Gall) states: A complex system that works is invariably found to have evolved from a simple system that worked.  To further quote Wikipedia, this law is essentially an argument in favor of underspecification: it can be used to explain the success of systems like the World Wide Web and Blogosphere, which grew from simple to complex systems incrementally, and the failure of systems like CORBA, which began with complex specifications. Gall's Law has strong affinities to the practice of agile software development.

Gall’s law, fundamental as it is, is applicable to any field you could think of.  In fact, chances are you may already have used it – or may have seen it being used - somewhere. If that’s the case, can you share your experience? In any case, why not put the Gall’s law to use in our everyday life?

- Abhay Patil

No comments:

Post a Comment