h3>Challenges on Understanding Ultra-Large Systems
Reuse was early considered the (only probable) way capable to reach levels of productivity and quality closer to the levels of market demand for software development.
Due to modularity and decoupling goals, reusing a piece of software requires much more than understanding that single piece of software, but also to understand the local context and the other parts where this piece is supposed and aimed to fit in, that is it requires more than local understanding of that piece, it requires decentralized understanding of the system.
The need for continuous evolution and maintenance of software seriously increases also the demand for building systems that are flexible to change, made by several competing but collaborating pieces, capable of self-organization, sensitive and adaptive to its work context, easy to learn and adapt, thus, a set of qualities that can only be achieved using simple and localized design rules, similar to the idea of ecosystems.This creates understanding problems that result in losses of productivity, due to more time to learn, adapt and integrate, and quality defects, due to partial, incomplete, or incorrect understanding.
The smaller and the more autonomous the piece of software, the better it would be to understand it.
Present software systems are very complex, not only due to the inherent complexity of its problem domain, but also due to the complex interactions required to integrate, coordinate and manage all the parts in a whole system. Present systems combine system-specific code with many different libraries, components and frameworks, produced by different vendors, which must be connected together using different technologies.The higher the scale of the system under development, the bigger the challenges of understanding the parts to be used to build that whole system, what are they good for, what to adapt, how to adapt them, how they work, and how to evolve and maintain them.
Therefore, due to their scale, ULS definitely pose significant challenges in all these kinds of techniques that aim at helping on improving software understanding, thus creating the need for more research on those fields.
The shift in scale of ULS will require more and more collaboration governed by simple rules and therefore the understanding of ULS would probably benefit with the use of techniques not exclusive of software engineering but also of psychological and social sciences as well.