I had a conversation with a customer in Pennsylvania this morning. He asked if we could provide an additional feature in Xwire (what he wanted is irrelevant to this post).
I explained that we had deliberately kept Xwire conceptually simple and uncluttered, effectively foregoing possible features, in order to make it accessible to our users. Xwire simple allows a block of memory in one board to be automatically copied into another board, and vice-versa. It is very easy to configure, with little more to specify than the memory ranges and slave board address. Once started it runs itself automatically. It is (was) easy to document.
I doubt if very many users will have problems understanding that concept, especially if they can see a use for it. That means the feature is accessible to many users.
As it happens, it is possible, using this fairly simple mechanism, to implement more elaborate schemes on top of the basic facility. I believe, chances are that a user who needs something more elaborate has a good chance of looking at Xwire and saying "Ah! I can see how I can achieve so-and-so using that basic building block".
If OTOH we had included a whole bunch of "advanced" capabilities, say transaction based messaging, variable length data transfers etc., it would have become a lot harder to explain and learn, so fewer people would be able to take advantage of it.
I think there is a general principle here: Something that is kept simple and easy to start using, i.e. is "accessible", will return more value to the user and be useful to more people, than a much more elaborate alternative.
