The Virtue of Software

Originally posted on April 25 2011,

One of the worst flaws a piece of business software can have is not being “flexible”. What exactly means that in plain English?
It means that it can’t be adapted to a business process.
Even simpler, there is something that you need to do but you can't do by the software. An example? The shipping module of an ERP which can’t build a single packing list for two different orders, issued by the same customer, going to the same place, shipping the same day. Another example BI related? A system that does not let you define a security such that a user that can’t schedule a report can’t receive the same report, with her own profiling, scheduled from another user.

This scarce flexibility derives from the architecture of the system we are using. It was designed with some use cases in mind (often implicit) and not others. With some systems, all you can do is giving up, in other cases a workaround is found.

The system which you find a workaround for, usually have an often overlooked quality: they can be disassembled. 

With this term I mean that the system is not a collection of black boxes, tied with unknown linkages but it exposes its internals. These give you a chance to find a creative solution. I came across BI applications which made their being a black-box their unique selling proposition. “Do not worry of the internals”, yes, until something goes wrong and then you are toast.

If the system has a database, it must be fully documented. Tools must be provided to work on it directly. If more than an executable file is at work, its functioning must be fully explained, its relations and behavior must be available on documentation and all the parameters must be available to be changed. Accessing parameters and eventually changing them must be done at application level, not in any obscure configuration file, prone to break if a coma is misplaced.

The highest level, to this respect, appears to be Open Source Software, but it is not. Working directly on the code is often beyond the ability of those who must fix the issues talked above. Changing the code voids every kind of guarantee, even minimal, issued by the authors. Finally OSS if often poorly documented and changing configuration is not necessarily easy.

I see this “Ease of disassembling” as the other side of the coin of  “Ease of use”.

What do you think about?