|
|
Software now accounts for the lion's share of the cost of developing andusing computer systems. My long-term goal is to establish a genuineengineering discipline to support the design and development of softwaresystems. Currently I'm working on design methods and analytic techniques forbuilding complete software systems out of subsystems and their constituentmodules. This is the software architecture level of design. I amparticularly interested in value-based techniques for making good designchoices early in the design processMy current research investigates two aspects of architectural design forsoftware. Value-Driven Software Design. Current software design concepts largelyoverlook a simple but fundamental idea: the goal of software design decisionmaking is to create the maximum value added for any given investment ofvaluable resources. Businesses value profit, but also opportunities, as seenin valuations of profitless Internet companies. Philanthropic foundationsvalue solutions to social problems. Universities value creation anddissemination of knowledge. End users value hassle-free access toinformation and a sense of control over their applications. Software design decisions today are made in an economics-independentFlatland, where concerns for technical properties dominate. Past work onsoftware economics is relevant but it focuses on cost minimization, ratherthan value maximization. This research pursues scientific foundations forsoftware design decision-making approaches that are explicitly tied tovalue-maximization objectives. It explicitly balances costs and benefits asseen by particular stakeholders, and it emphasizes models, methods and toolsthat can be applied early in the design process, before code is availablefor analysis. Open Resource Coalitions. Widespread use of the Internet is enabling afundamentally new approach to software development: computing throughdynamically formed, task-specific, coalitions of distributed autonomousresources. The resources may be information, calculation, communication,control, or services. Unlike traditional software systems, which are atleast nominally under control of the designer, these coalitions are formedfrom autonomous network-based resources, and the developer lacks directcontrol over the incorporated resources. These autonomous resources areindependently created and managed. The resources may be transient, eitherbecause of the resource proprietors actions or because of serviceinterruptions; indeed, the proprietor of a resource may be unaware of theways the resource is used. Development tools for resource coalitions willrequire new degrees of autonomy and automation in order to identify,compose, and track the resources. Computing through resource coalitions willthus create novel architectural challenges and opportunities. Achieving useful results from such resources requires a new level ofopenness in the sense that responsibility for individual resources isdistributed much more widely than responsibility for the results. Theaggregations of resources are better treated as coalitions than as systems,because individual resources are operated under their own policies, and itmay be necessary to reconstitute the coalition when the selection ofavailable resources changes. This style of software creation is of particular significance for everydayusers who roll their own individually tailored applications from availableresources.
|
||||