The 80-20 rule of Software design
My Manager at the company where I intern was just back from TechEd 2005. We had a long discussion about the various tools, technologies that were introduced and some of the sessions that he attended. I particularly liked one of the comments that he made about software design. This was something he picked up in one of the Cabana sessions. A Cabana session is gathering of small group of people who discuss/debate on a particular topic.He pointed out that no one should strive to design with a goal to meet 100% of the needs. This is particularly true when one is developing a framework/ platform/ library for general use. It is just not possible to encompass all possible cases. There is a balance that has to be maintained about the extensibility/scalability of the design and the needs of the customer. This balance is 80-20, where 80% of the cases can be handled and rest 20% is left untouched.
Extensibility is good to a certain extent but cannot be stretched to any extent. Beyond a certain point it is upto to the customer to probably redesign/rethink the approach to accommodate within the confines of the software design. If the needs are such that the design cannot handle, it only shows that the library/tool is not fit for the requirements at hand. It is a sign of looking at other possibilities. But this will get handled anyway during the prototyping stage. Hopefully.