Once again I have found myself really struggling with what seems to be conflicting requirements for an application currently being developed. I have blogged on more than one occasion here that to create an application which “hides” the complexity of its workings from its users is no trivial task, yet I believe, one that is truly worth the effort. Providing flexibility for users can also be a challenge during development if the developer is “looking ahead”.
By “looking ahead” what I mean is that the developer might be working on a custom application with a particularly narrow functionality focus, yet be very aware that the functionality desired now will probably NOT fit the needs in the future, perhaps as soon as a few months. While in the program where possible it may be desireable to build in the functionality desired for the future, but somehow “turn it off” for the current application iteration. Doing this of course assumes a long-term commitment to the application and maintenance of it.
A common way to create an application which can be “flexible” in this manner is through the use of what might be called “switches” — or another term I’ve seen used is “parameters”. These have proven to be quite effective — to a point at least. There does come a point in time I believe that the value of “switches” is no longer useful. I actually worked with some software where there were so many “switches” to be set (they bragged about having over 4000!), that a week of “training” in setup was required. Unless the application is going to be used in a large environment with a dedicated IT department that would be (IMO) excessive. Additionally this software had many dependencies built into those “switches” – i.e. if parameter 2003 is set to true, then 3014 and 4002 must be set to false.
As with so many things in software development, there are always tradeoffs, as well as a multitude of considerations. I believe that the more of these types of considerations that are taken into account throughout the entire development life cycle, the better will be the resultant software.