On Flexibility
This post is less technical/nerdy, but I just wanted to provide a general endorsement of something that I see becoming more and more common. Specifically, I’ve been dealing with complex systems, and along with the normal bevy of settings, there are also little places where educated administrators can write code to do something that the developers couldn’t originally anticipate.
I started designing systems with this sort of feature a number of years ago. We were building interfaces from a loan origination system to set up new loans on bank or credit union servicing systems. It seems easy to do and to replicate, but in reality, every company used both systems differently — sometimes radically differently.
So that we wouldn’t have to rewrite a specific interface from one client to another, we started making configuration items that implementation users could configure. Back then, it was often SQL statements that would get submitted to the server. The program could blindly submit whatever was in the box, and assume that the result that came back from the server was the desired result. We used settings like this to override default data mappings, and even to define process flow.
One of the projects I’ve worked on for the last couple of years is a system used to deploy quizzes and surveys on websites or as Facebook applications. I designed it with the same principals. Now, for any question, I can do calculations and make part of the question include information answered in prior questions. I can redefine multiple choice options on the fly, based on the user’s age, shoe size, or favorite flavor of ice cream (provided that those are questions that we asked or can glean from their social networking profile). Try to do that with Survey Monkey!
But I see this sort of design more and more, in any number of different kinds of systems. And I just want to tip my cap to all of the developers to make the extra effort to make their products so flexible.