Software now accounts for the lion's share of the cost of developing and using computer systems. My long-term goal is to establish a genuine engineering discipline to support the design and development of software systems. Currently I'm working on design methods and analytic techniques for building complete software systems out of subsystems and their constituentmodules. This is the software architecture level of design. I am particularly interested in value-based techniques for making good design choices early in the design process. My current research investigates two aspects of architectural design for software.
Value-Driven Software Design. Current software design concepts largely overlook a simple but fundamental idea: the goal of software design decision making is to create the maximum value added for any given investment of valuable resources. Businesses value profit, but also opportunities, as seen in valuations of profitless Internet companies. Philanthropic foundationsvalue solutions to social problems. Universities value creation and dissemination of knowledge. End users value hassle-free access to information and a sense of control over their applications.
Software design decisions today are made in an economics-independent Flatland, where concerns for technical properties dominate. Past work on software economics is relevant but it focuses on cost minimization, rather than value maximization. This research pursues scientific foundations forsoftware design decision-making approaches that are explicitly tied to value-maximization objectives. It explicitly balances costs and benefits as seen by particular stakeholders, and it emphasizes models, methods and tools that can be applied early in the design process, before code is available for analysis.
Open Resource Coalitions. Widespread use of the Internet is enabling a fundamentally new approach to software development: computing through dynamically formed, task-specific, coalitions of distributed autonomous resources. The resources may be information, calculation, communication, control, or services. Unlike traditional software systems, which are at least nominally under control of the designer, these coalitions are formed from autonomous network-based resources, and the developer lacks direct control over the incorporated resources. These autonomous resources are independently created and managed. The resources may be transient, either because of the resource proprietors actions or because of service interruptions; indeed, the proprietor of a resource may be unaware of the ways the resource is used. Development tools for resource coalitions will require new degrees of autonomy and automation in order to identify,compose, and track the resources. Computing through resource coalitions will thus create novel architectural challenges and opportunities.
Achieving useful results from such resources requires a new level of openness in the sense that responsibility for individual resources is distributed much more widely than responsibility for the results. The aggregations of resources are better treated as coalitions than as systems, because individual resources are operated under their own policies, and it may be necessary to reconstitute the coalition when the selection of available resources changes. This style of software creation is of particular significance for everyday users who roll their own individually tailored applications from available resources.