Even though the benefits of component-based software development are widely accepted, they are easily overestimated. To provide a firmer basis for the general discussion we describe our real life experiences with a software component. Having a lifetime of a whole decade the component has evolved from a class library to an independent component. In this paper we focus on the major evolution steps, their rational, and their outcomes, hoping that this gives some relevant insight to the issues that are important for software component evolution and maintenance. Surprisingly often the lessons learned have little to do with the hot topics of software technology that are being marketed. We discuss the risks attached to component selection, the usage of a shared platform for a product family, and the strengths and weaknesses of application frameworks and components. We also comment practical issues in designing and implementing major architectural changes.
Jyrki Akkanen, Attila Kiss, Jukka K. Nurminen