When developing any application, it’s important to ask oneself, “How much flexibility am I granting the end user?”
The programs that run on our computers are dynamic. Rather quickly, they can be shaped and formed to suit the needs of end users. As long as software bloat/feature creep is kept under control, customization and modification remain two critical ingredients in the evolution of any application. Who will make these changes, and how easy will it be? This is common sense stuff, but it’s a subject that doesn’t get discussed nearly enough, and is very often overlooked or ignored by choice.
Obviously, writing your application with this much flexibility takes more time and attention to detail, but your application will stand above the crowd as a result of your work. If I were to write a database application, I could hard-code the
SQL CREATE statements and all associated schema creation statements. No variables need be taken from the user aside from the location of the database server, and the database server login credentials. The point is, everything can be made transparent to the end user. This is good for 99% of users, and it’s good for support. You know what your database will be called, and you know exactly what tables, columns, data types are in your database.
What about your fellow programmers or systems administrators? These are the individuals who will be recommending your application to friends, family, and colleagues. They’ll want flexibility. They’ll want to put their stamp on things, and they might like their database to be called whatever they want to name it. To allow for this, you can permit advanced users to choose their own database name. In the main portion of your application, you can reference this database name as a variable (which it will likely now be anyway, by virtue of the fact that it can be changed by the user). The point is, by allowing the end user to choose the name of their database, you’ve just made your application a tiny bit more customizable. Is it a minor gift? Absolutely, but it’s better than nothing, and these small things add up to beautifully crafted software. You can build from here. What else can you allow the user to customize? Wouldn’t it be cool if they could their own add custom tables or columns? Make it so. Just remember to do so without allowing them to break anything or compromise the integrity of the application, because if there is a problem it will not be their fault. You as the application developer will ultimately be held accountable for the flaws in your application, and rightfully so.
So exercise moderation, don’t forget to have fun, and whether you’re writing a small script or an entire CMS, for the love of all that is good, test your application before rolling it out to users. Think of your applications as malleable, and you’ll be on the right track toward mastering the Art of Flexibility.