<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d13405220\x26blogName\x3dPavan+Podila\x27s+Blog\x26publishMode\x3dPUBLISH_MODE_BLOGSPOT\x26navbarType\x3dBLUE\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttps://pavanpodila.blogspot.com/search\x26blogLocale\x3den_US\x26v\x3d2\x26homepageUrl\x3dhttp://pavanpodila.blogspot.com/\x26vt\x3d-3240902251102105728', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe", messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER, messageHandlers: { 'blogger-ping': function() {} } }); } }); </script>

Tuesday, June 14, 2005

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.