I used to feel that way (Too Many Options is intuitively dangerous,
because you believe some of your end-to-end integration will be lost if
you can't guarantee one of the components). I've found that it isn't
the truism I thought it was. I recently put a lot of work into CherryPy
and Dejavu (to name a couple of my larger projects), allowing options
where there used to be One Way. I've found time and again that if I
rephrase the issue from "I'm going to lose functionality if I break
this up" to "those users who choose a different component will pay the
[performance|development|maintenance] penalty for their own choice", I
sleep much better at night.

For example, I support using "shelve" as a data store with Dejavu. For
simple queries and small stores, it beats the pants off RDBMS's. But
because it is a builtin StorageManager, it has to support the full
interface, including multirecall (both INNER and OUTER JOINs). Now that
part is SO much slower than with DB's, that it's only usable with toy,
demo datasets. But I have no problem with that, because it's a choice I
leave to the deployer; they may decide their app has few enough
multirecall's to make the tradeoff worthwhile.

Perhaps it's something about Python itself, or perhaps my design skills
have improved, or my sensibilities changed. But I should think you
could find a way to say, "fine, use Cheetah; if you don't use Kid, you
don't get this nice i18n tool (unless you port it! ;). Your choice."

My 2 cents.


Robert Brewer
System Architect
Amor Ministries
[EMAIL PROTECTED]

Reply via email to