CHAPTER

3

Improving Software Economics
mprovements in the economics of software Key Points development have been not only difficult to • Modern software technology is achieve but also difficult to measure and subenabling systemsto be built with fewer human-generated source lines. stantiate. In software textbooks, trade jour• Modern software processesare nals, and product literature, the treatment of iterative. this topic is plagued by inconsistent jargon, • Modern software development inconsistent units of measure, disagreement and maintenance environments are among experts, and unending hyperbole. If we the delivery mechanism for process examine anyone aspect of improving software automation. economics, we end up with fairly narrow conclusions and an observation of limited value. Similarly, if an organization focuses too much on improving only one aspect of its software development process, it will not realize any significant economic improvement even though it improves this one aspect spectacularly. The key to substantial improvement is a balanced attack across several interrelated dimensions. I have structured the presentation of the important dimensions around the five basic parameters of the software cost model presented in Chapter 2.
I

I

1. Reducing the size or complexity of what needs to be developed 2. Improving the development process 3. Using more-skilled personnel and better teams (not necessarily the same thing) 4. Using better environments (tools to automate the process)

5. Trading off or backing off on quality thresholds

~1

32

IMPROVING SOFTWARE ECONOMICS

These parameters are given in priority order for most software domains. Table 3-1 lists some of the technology developments, process improvement efforts, and management approaches targeted at improving the economics of software development and integration. Most software experts would also stress the significant dependencies among these trends. For example, tools enable size reduction and process improvements, size-reduction approaches lead to process changes, and process improvements drive tool requirements. Consider the domain of user interface software. Two decades ago, teams developing a user interface would spend extensive time analyzing operations, human factors, screen layout, and screen dynamics. All this would be done on paper because it was extremely expensive to commit designs, even informal prototypes, to executable code. Therefore, the process emphasized a fairly heavyweight set of early paper artifacts and user concurrence so that these "requirements" could be frozen and the high construction costs could be minimized.
3-1. Important trends in improving software economics
TRENDS Higher order languages etc.) Object-oriented Reuse Commercial Process Methods and techniques components (C++, Ada 95, Java, Visual Basic,

TABLE

COST MODEL PARAMETERS Size Abstraction and component-based development technologies

(analysis, design, programming)

Iterative development Process maturity Architecture-first Acquisition models development

reform skill development

Personnel People factors

Training and personnel Teamwork Win-win cultures

Environment Automation technologies and tools

Integrated tools (visual modeling, compiler, editor, debugger, change management, etc.) Open systems Hardware Automation platform performance testing, analyses

of coding, documents, platform performance assessment

Quality Performance, reliability, accuracy

Hardware Statistical

Demonstration-based

quality control

incorporating user feedback all along the way. windowing environments. but these . architecture frameworks). automatic code production. nor are they independent of one another. and achieving a stable understanding of the requirements and the design issues in balance with one another. in fact. networks). automatic code generators (CASE tools. because the project could afford only one construction cycle. GUI builders). the conventional user interface process became obsolete. brute-force solutions are now possible. and more bandwidth has eliminatedrnany sources of software implementation complexity. GUI builder tools permitted engineering teams to construct an executable user interface faster and at less cost.activities could now be done in a realistic target environment using existing primitives and building blocks.3. The availability of more cycles. visual modeling tools. visual modeling tools. they were an obstacle to the efficiency of the process. The old process was geared toward ensuring that the user interface was completely analyzed and designed. database management systems. As GUI technology matured. Ada 95. They are interrelated. The new process was geared toward taking the user interface through a few realistic versions. . Operations analysis and human factors analysis were still important. Another important factor that has influenced software technology improvements across the board is the ever-increasing advances in hardware performance. or that the technology advances drove the process change. It could be argued that the process advances (such as the need for iteration and experimentation in defining user interfaces) drove the development of the tools. This size reduction is the primary motivation behind improvements in higher order languages (such as C++. Engineering and feedback cycles that used to take months could now be done in days or weeks. and higher order programming languages are all focused on achieving a given system with fewer lines of human-specified source directives (statements). Reuse. Reality is probably a mixture of both. 3. Java.1 REDUCING SOFTWARE PRODUCT SIZE The most significant way to improve affordability and return on investment (ROI) is usually to produce a product that achieves the design goals with the minimum amount of human-generated source material. and fourth-generation languages). The paper descriptions were now unnecessary. object-oriented technology. Component-based development is introduced here as the general term for reducing the "source" language size necessary to achieve a software solution. and object-oriented technologies (Unified Modeling Language.1 REDUCING SOFTWARE PRODUCT SIZE 33 Graphical user interface (GUI) technology is a good example of tools enabling a new and different process. The point is that the five basic parameters of the cost estimation equation are not mutually exclusive. Visual Basic. reuse of commercial components (operating systems. Simpler. more memory. and hardware improvements are probably the enabling advance behind most software technology improvements of substance. middleware.

is that mature and reliable size reduction technologies are extremely powerful at producing economic benefits. Substantial data have been documented relating SLOC to function points [jones. The bottom line. this recommendation stems from a simple observation: Code that isn't there doesn't need to be developed and can't break. early life-cycle estimates. Immature size reduction technologies may reduce the development size but require so much more investment in achieving the necessary levels of quality and performance that they have a negative impact on overall project performance. and Visual Basic: The level of expressibility is very attractive. The data in the table illustrate why people are interested in modern languages such as C++. In general.1 LANGUAGES Universal function points (UFPs) are useful estimators for language-independent. On the surface. But this is not entirely the case. and external inquiries. Language expressiveness of some of today's popular languages SLOe PER UFP TABLE LANGUAGE Assembly C FORTRAN 77 COBOL 85 Ada 83 C++ Ada 95 Java Visual Basic 320 128 105 91 71 56 55 55 35 . However. but the second part is not necessarily true. 3. when size-reducing technologies are used. care must be taken in applying these data because of numerous possible 3-2. Some of these results are shown in Table 3-2. external outputs. they reduce the number of human-generated source lines. all of them tend to increase the amount of computer-processable executable code. external data interfaces. So the first part of the observation is true.34 IMPROVING SOFTWARE ECONOMICS One caveat is warranted when discussing a reduction in product size. Java. However.1. The basic units of function points are external user inputs. as experienced by many project teams. 1995]. SLOC metrics are useful estimators for software after a candidate solution is formulated and an implementation language is known. Ada 95. internal logical data groups. The reduction is defined in terms of human-generated source material.

1 REDUCING SOFTWARE PRODUCT SIZE 35 misuses. (Other reasons included reliability. Ada 95 represented a well-planned language upgrade to accommodate new technology and incorporate lessons learned in field applications. but it would not be the best choice 'for a highly parallel. the numbers are far too precise. and many others. and improved ROJ through language standardization. Similarly. but it would not be a wise choice for a real-time. encapsulation. Visual Basic is very expressive and powerful in building simple interactive applications. must be interpreted and used with great care. (They are undoubtedly the precise average of several imprecise numbers. the C compatibility made it very easy for C programmers to transition to C++. The difference between C and C++ is even more profound. number-crunching program running on a supercomputer. The interest of the Department of Defense (DOD) in developing Ada 83 was due in part to the increase it would provide in expressiveness. one noticeable trend in the industry is a significant population of programmers using a C++ compiler but programming with a C mind set. a first-order estimation of the value of object-oriented programming is that it allows programs to be written in 30% fewer source lines. COBOL. concurrency support. support for realtime programming. Ada 95 might be the best language for a catastrophic cost-of-failure system that controls a nuclear power plant. embedded. scientific. architectural control primitives. This requirement has its pros and cons. corporations. one of the following program sizes would be required: . Thus. and between C and c++. Embodied in the Ada language are numerous software engineering technology advances. and technology generations. Two interesting observations within the data concern the differences and relationships between Ada 83 and Ada 95. The difference in expressibility between Ada 83 and Ada 95 is mainly due to the features added to support objectoriented programming. including language-enforced configuration control. C++ was also developed to support C as a subset.3. On the downside. The evolution of Java has eliminated many of the problems in the C++ language (particularly the native support for C. maintainability.) Each language has a domain of usage. to achieve a given application with a fixed number of function points. therefore failing to achieve the expressibility of object-oriented C++. avionics program. On one hand. However. which span application domains. Software industry data such as these. For example. C. C++ incorporated several (although not all) of the advances within Ada as well as advanced support for object-oriented programming. and assembly.) A significant economic motivation was the ability to develop a program in substantially fewer lines of code than were required in the traditional language alternatives of FORTRAN. separation of interface and implementation. While J believe that the data accurately represent an important relationship. Universal function points can be used to indicate the relative program sizes required to implement a given functionality. which encourages several dangerous programming practices) while conserving the objectoriented features and adding further support for portability and distribution.

but an economic benefit has yet to be demonstrated because of the steep cost of training in object-oriented design methods such as the Unified Modeling Language (UML). adding a commercial database management system (DBMS). changeability. I spend very little time on this topic because object-oriented technology is not germane to most of the software management topics discussed here. 3. memory.000. Furthermore. commercial GUI builder. One typical negative side effect is that the higher level abstraction technologies tend to degrade performance. simpler is generally better: Reducing size usually increases understandability. Most of these drawbacks have been overcome by hardware performance improvements and optimizations. the use of the highest level language and appropriate commercial components has a large potential impact on cost. Extending this example. Booch has described three other reasons . Some studies have concluded that object-oriented programming languages appear to benefit both software productivity and software quality [jones.000 lines of Ada 95 or C++ plus integration components of several commercial Because the difference between large and small projects has a greater than linear impact on the life-cycle cost. the fundamental impact of object-oriented technology is in reducing the overall size of what needs to be developed. and books on object-oriented technology abound. which in turn reduces the size of the team and the time needed for development. By providing more-formalized notations for capturing and visualizing software abstractions. and communications bandwidth. Commercial components and automatic code generators (such as CASE tools and GUI builders) can further reduce the size of human-generated source code. increasing consumption of resources such as processorcycles. 1994]. and reliability.36 IMPROVING SOFIW ARE ECONOMICS 1.000 lines of Ada 83 175.000 lines of Ada 95 or C++ The values indicate the relative expressiveness provided by various languages.1.2 OBJECT-ORIENTED METHODS AND VISUAL MODELING There has been a widespread movement in the 1990s toward object-oriented technology.000 lines of assembly language 400. and commercial middleware could reduce the effective size of development to the following final size: 75. These improvements are far less effective in embedded platforms.000 lines of C 220.

notations. A This aspect of object-oriented technology enables an architecture-first life-cycle activity. The use of continuous integration creates opportunities to recognize risk early and make incremental corrections without destabilizing the entire development effort. The existence of a culture that is centered on results. The existence of a strong architectural vision S. in which integration is an early and continuous 3. encourages communication. thus creating a shared understanding of the problem being solved. 1996]. objectoriented methods.3. (Quotations are presented in italics. A ruthless focus on the development of a system that provides a wellunderstood collection of essential minimal characteristics 2. and visual modeling provide strong technology support for the process framework.1 REDUCING SOFTWARE PRODUCT SIZE 37 that certain object-oriented projects succeed [Booch. A Here is an example of how object-oriented and interpersonal technology permits corresponding improvements in teamwork communications. process. and yet is not afraid to fail 3. The application of a well-managed life cycle iterative and incremental development These characteristics have little to do with object orientation. 1. The effective use of object-oriented modeling 4. However. An object-oriented model of the problem and its solution encourages a common vocabulary between the end users of a system and its developers. languages and environments available to implement object-oriented Booch also summarized five characteristics of a successful object-oriented project. 2. An object-oriented architecture provides a clear separation of concerns among disparate elements of a system. creating firewalls that prevent a change in one part of the system from rending the fabric of the entire architecture.) 1. A This feature of object-oriented technology is crucial to the supporting architectures. These are interesting examples of the interrelationships among the dimensions of improving software economics. .

• They have a sufficiently broad customer base to be profitable. In all other engineering and manufacturing disciplines. Most organizations cannot compete economically with established commercial organizations whose investments are broadly amortized across the user base. They lack economic motivation. an organization needs three enduring elements: a development group. and transitioning to new technologies. • They take ownership of improving product quality. Positive business cases rarely occur in software development organizations that are not focused on selling commercial components as their main line of business. It is difficult to develop a convincing business case for development unless the objective is to support reuse across many projects. Reuse achieves undeserved importance within the software engineering community only because we don't do it as well as we should. Software design methods have always dealt implicitly with reuse in order to minimize development costs while achieving all the other required attributes of performance. common processes. and a product-oriented sales and mar- . reusable components are rare. Common architectures. In general. To succeed in the marketplace for commercial components. the level of reuse made possible by Microsoft's success on the PC platform has been immense. tools. Without this economic motive. Beware of "open" reuse libraries sponsored by nonprofit organizations." As a counterexample. not some necessary technological breakthrough. adding new features. Figure 3-1 examines the economic trade-offs. notations. The steep initial curve illustrates the economic obstacle to developing reusable components. trustworthiness. Most truly reusable components of value are transitioned to commercial products supported by organizations with the following characteristics: • They have an economic motivation for continued support. machine architectures. or a commercial product) is truly reusable is to see whether some organization is making money on it. improvement. One of the biggest obstacles to reuse has been fragmentation of languages.3 REUSE Reusing existing components and building reusable components have been natural software engineering activities since the earliest improvements in programming languages. reuse is more or less an underlying assumption. and accountability for quality. and quality. and common environments are all instances of reuse. the key metric in identifying whether a component (or a class of components. things get reused for economic reasons. precedent experience. The cost of developing a reusable component is not trivial. operating systems. feature set.38 IMPROVING SOFTWARE ECONOMICS 3. I try to treat reuse as a mundane part of achieving a return on investment. a support infrastructure. support. and even "standards.1. Therefore. and usability.

it has not proven to be straightforward in practice. GUI builders. and supportability. database management systems. I think of it as a synonym for return on investment. networking. Cost and schedule investments necessary to achieve reusable components keting infrastructure. . typical of I commercial products • ~~ lIlal 85l c£ -~ ~::J ----------~---125% more cost and 150% more time alE al c. every software success story has probably exploited some key avenues of reuse (without calling it that) to achieve results efficiently. the selection of commercial components over development of custom components has significant impact on a project's overall architecture. (These trade-offs are particularly acute in mission-critical domains. I have never been a fan of identifying reuse as a separate "technology.1 REDUCING SOFTWARE PRODUCT SIZE 39 Many-project solution: Operating with high value per unit investment. and office applications.:. While the use of commercial components is certainly desirable as a means of reducing custom development. The paramount message here (discussed further in Chapter 7) is that these decisions must be made early in the life cycle as part of the architectural design. middleware. Table 3-3 identifies some of the advantages and disadvantages of using commercial components. . which should be a consideration in almost every activity and decision.Q al s: ~ bl -g i i 5 project solution: 2 project solution: 50% more cost and 100% more time 1 project solution: $N and M months Number of Projects Using Reusable Components FIGURE 3-1.1. Another consideration is that the complexity and cost of developing reusable components are often naively underestimated. cost. There have been very few success stories in software component reuse except for commercial products such as operating systems.) Because the trade-offs frequently have global effects on quality. 3.4 COMMERCIAL COMPONENTS A common approach being pursued today in many domains is to maximize integration of commercial components and off-the-shelf products. Although the value of reuse can be immense. On the other hand.3." Reuse is an important discipline! that has an impact on the efficiency of all workflows and the quality of most artifacts.

and a software ROI. The focus of this process is on organizational economics. procedures.2 IMPROVING SOFTWARE PROCESSES Process is an overloaded term. there are many processes and subprocesses. schedule. Undefined and reliability and incompatibilities development date model unpredictable availability maintenance Smaller. and practices for producing a complete software product within certain cost. . Advantages and disadvantages of commercial components versus custom software ADVANTAGES Predictable license costs DISADVANTAGES Frequent Up-front Recurring organization independence Dependency Run-time Integration Functionality upgrades license fees maintenance on vendor constraints not always trivial and fees APPROACH Commercial components Broadly used. and quality constraints. I use three distinct process perspectives. and practices for achieving an artifact of the software process. For software-oriented organizations. • Metaprocess: an organization'S policies. The focus of the macroprocess is on creating an adequate instance of the meta process for a specific set of constraints. procedures. • Microprocess: a project team's policies. procedures.40 IMPROVING SOFTWARE ECONOMICS TABLE 3-3. The focus of the microprocess is on achieving an intermediate product baseline with adequate quality and adequate functionality as economically and rapidly as practical. often simpler implementations Often better performance Control of development enhancement Unpredictable Often immature Single-platform and fragile dependency Drain on expert resources 3. • Macroprocess: a project's policies. and practices for pursuing a software-intensive line of business. mature technology Available now Dedicated support Hardware/software Rich in functionality efficiency sacrifices No control over upgrades maintenance Unnecessary features that consume extra resources Often inadequate stability Multiple-vendor Custom development Complete change freedom Expensive. long-term strategies.

metrics. . Productive activities result in tangible progress toward the end product. personnel training. ATTRIBUTES Subject Objectives Three levels of process and their attributes METAPROCESS Line of business Line-of-business profita bil ity Com petitiveness MACRO PROCESS Project Project profitability Risk management Project budget. more overhead steps must be included just to manage the complexity of this web. on schedule Major milestone success Project scrap and rework On budget. and other tasks. The objective of process improvement is to maximize the allocation of resources to productive activities and minimize the impact of overhead activities on resources such as personnel. computers. and schedule. schedule 1 to 6 months Although these three levels of process overlap somewhat. financia I performance 1 to many years Content vs. standardization 6 to 12 months Quality vs. financial assessment. Overhead activities include many value-added efforts. in general. as shown in Table 3-4. and time scales. management. Overhead activities that have an intangible impact on the end product are required in plan preparation. debugging. As the scale of a project increases. documentation. quality Subproject managers Audience Acquisition authorities.3. on schedule Major milestone Release/iteration and rework progress scrap MICROPROCESS Iteration Resource management Risk resolution Milestone budget. the more effort that can be expended in productive activities. All project processes consist of productive activities and overhead activities. customers Organizational management Software engineers Metrics Project predictability Revenue. these activities include proto typing.2 IMPROVING SOFTWARE PROCESSES 41 TABLE 3-4. concerns. modeling. risk assessment. business administration. the less effort devoted to these activities. testing. quality assessment. they have different objectives. but. progress monitoring. coding. The macroprocess is the project-level process that affects the cost estimation model discussed in this chapter. To achieve success. and user documentation. configuration control. For software efforts. integration. schedule. schedule. audiences. late scrap and rework. quality Software project managers Software engineers On budget. share market Concerns Time scales Bureaucracy vs. most software projects require an incredibly complex web of sequential and parallel steps.

then uncovers a design flaw in testing. Furthermore. coding. suppose that a team completes the sequential steps of analysis. Any project manager who bears the burden of training people in processes. technologies. Early scrap and rework is a productive necessity for most projects to resolve the innumerable unknowns in the solution space. 2. not a project responsibility. The quality of the software process strongly affects the required effort and therefore the schedule for producing the software product. it is clearly unnecessary. Staffing every project with a fully trained work force may not be possible. I have modified scrap and rework with late to differentiate it from the sort of scrap and rework that is a natural by-product of prototyping efforts. Notwithstanding technological breakthroughs that . We could take an N-step process and eliminate some steps so that. However. Many organizational time-to-market improvement strategies emphasize the first dimension. Now a sequence of redesign. In particular. the difference between a good process and a bad one will affect overall cost estimates by 50% to 100%. the primary focus of process improvement should be on achieving an adequate solution in the minimum number of iterations and eliminating as much downstream scrap and rework as possible. a better process can have an even greater effect in reducing the time it will take for the team to achieve the product vision with the required quality. training is not considered a value-added activity. but it is clearly undesirable in the later phases of the life cycle. the focus of most process improvements described in this book is on achieving the second and third dimensions.it is now only an M-step process. Every instance of rework introduces a sequential set of tasks that must be redone. design. but it is for a project. For example.42 IMPROVING SOFTWARE ECONOMICS Some people may be offended by my categorization of late scrap and rework and personnel training as overhead activities that need to be minimized. With a good process. These task sequences are the primary obstacle to schedule compression. In this sense. 3. We could take an N-step process and improve the efficiency of each step. 1. other things being equal. and testing of a feature. where there is greater potential. In practice. or tools is far worse off than a project manager who has a fully trained work force. recode. People will argue that personnel training cannot be a bad thing. and retest is required. Training is an organizational responsibility. We could take an N-step process and use more concurrency in the activities being performed or the resources being applied. but employing trained people is always better than employing untrained people. Why is this true? Schedule improvement has at least three dimensions. and the reduction in effort will improve the overall schedule.

for example. the primary impact of process improvement should be the reduction of scrap and rework in late life-cycle phases. all striving to set individual records and competing to be the team leader. and special teams.3 IMPROVING TEAM EFFECTIVENESS 43 can eliminate complete process steps. however. With software teams. Some maxims of team management include the following: • A well-managed project can succeed with a nominal engineering team. a football team has a need for diverse skills. 50 people or more. If you did pull this off. passing and running." Balance and coverage are two of the most important aspects of excellent teams. a development team of experienced geniuses. This is the difference between an unskilled team of amateurs and a veteran team of experts. . suggests that the combined effects of personnel skill and experience can have an impact on productivity of as much as a factor of four. very much like a software development team. To use a sports analogy. So the old "Just hire good people" approach needs to be applied carefully. the team would likely be dysfunctional. you almost always end up with nominal people and experience. say. It is impossible to staff a nontrivial project with personnel who all have optimal experience. it is vulnerable. we could execute a software development process in one iteration with almost no scrap and rework. There has rarely been a great football team that didn't have great coverage: offense.3 IMPROVING lEAM EFFECTIVENESS It has long been understood that differences in personnel account for the greatest swings in productivity. 3. In a perfect software engineering world with an immaculate problem description. For a large team of. But a team loaded with superstars. The original COCOMO model. and stakeholders with common goals. an obvious solution space. it is risky to assess a given team as being off-scale in either direction. A better way to state this is "Just formulate a good team. can be embarrassed by a balanced team of solid players with a few leaders focused on the team result of winning the game. In practice. first stringers and reserve players. adequate resources.3. defense. are fully trained in the tools and technologies. a project manager needs to configure a balance of solid talent with highly skilled people in the leverage positions. we need to manage engineering activities so that scrap and rework profiles do not have an impact on the win conditions of any stakeholder. coaching and personnel. Because we work in an imperfect world. Whenever a team is out of balance. Great teams need coverage across key positions with strong individual players. Teamwork is much more important than the sum of the individuals. This should be the underlying premise for most process improvements. and possess IQs greater than 130.

In football. the 300-pound lineman would never think about being promoted to quarterback. but it can be applied only so far. This makes a B player out of an A player. Personal agendas also complicate assignments. On a football team you use a good leader as your coach. a superfast runner as a wide receiver.Thereare countless casesof great software engineers being promoted prematurely into positions for which they were unskilled and unqualified.&. and being grossly over or under this size is bad for team dynamics because it results in too little or too much pressure on individuals to perform. 1981]. The principle of job matching: Fit the tasks to the skills and motivation the people available . a good passeras the quarterback. I think the skill sets are equally different. 3. system can be built by a nominal team of software system will flounder even with an expert team of ' • A poorly architected builders. In examining how to staff a software project. but organizational energy will benefit average and below-average performers the most. There is a natural team size for most jobs. even with an expert team of engineers.to high-leverage position and putting a B player in a higher leverage position. The principle of career progression: An organization does best in the long run by helping its people to self-actualize . Organizational training programs . Organizations can help and hinder employee self-actualization. (Quotations are presented in italics. U U 2. . it is more difficult to discriminate the mostly intangible personnel skills and optimal task allocations. . however.&.&.) 1. Good performers usually self-actualize in any environment. With software engineers. On software teams. It's a double whammy. the skill sets are too obviously different. • A well-architected builders. Boehm offered the following five staffing principles [Boehm. The principle of top talent: Use better and fewer people . This principle seems obvious. it is common for talented programmers to seek promotions to architects and managers.44 IMPROVING SOFTWARE ECONOMICS • A mismanaged project will almost never succeed. of . because most superstar programmers are innately unqualified to be architects and managers. and vice versa. Yet individuals and even their organizations often view such promotions as desirable. taking an A player out of a moderate. This tenet is fundamental.and a 300-pound bruiser as a lineman.

Avoiding adversarial relationships holders is a prerequisite for success. The principle of phaseout: Keeping a misfit on the team doesn't benefit anyone .3 IMPROVING TEAM EFFECTIVENESS 45 are typically strategic undertakings with educational value. The following are some crucial attributes of successful software project managers that deserve much more attention: 1. quality. These dimen- risk takers visionaries and nitpickers. The principle of team balance: Select people who will complement and harmonize with one another . Customer-interface skill. its spirit is the paramount in anyone factor in good teamwork. A misfit gives you a reason to find a other team memMisand disrupts the team balance in some dimension. 2. • Although this principle sounds a little drippy. among stake- . will not self-actualize. I would be remiss if I didn't mention them. Software project managers need many leadership qualities in order to enhance team effectiveness. Placing the right person in the right job seems obvious but is surprisingly hard to achieve. Of the five principles. intended to be useful and applied the day after training ends. Project training programs are purely tactical. analytical thinking and conservatives. Software team balance has many dimensions. organization. timeliness 5. a project becomes seriously at risk.3. The top talent and phaseout principles are secondary objectives because they must be applied within the context of team balance. A misfit demotivates bers. better person or to live with fewer people. Managers must nurture a culture of teamwork and results rather than individual accomplishment. team balance and job matching should be the primary objectives. and when a team is of them. individuals or organizations that stress it over the success of the team will not last long in the marketplace. Psychological makeup: objectivity. creativity. • This is really a subprinciple of the other four. Few decisions are as important as hiring decisions. feature set. Finally. cynics and optimists Objectives: financial. 4. weeding them out. Hiring skills. leaders and followers. although career progression needs to be addressed as an employment practice. unbalanced sions include: Raw skills: intelligence. fits are obvious. and it is almost never right to procrastinate Software development is a team sport. Although these qualities are intangible and outside the scope of this book.

Project experience has shown that a highly integrated environment is necessary both to facilitate and to enforce management control of the process. de buggers. tools and environments must be viewed as the primary delivery vehicle for process automation and improvement. so their impact can be much higher. The other form of process improvement is to increase the efficiency of certain steps. Successful project managers must sell all stakeholders (including themselves) on decisions and priorities. visual modeling tools. This is one of the primary contributions of the environment: to automate manual tasks that are inefficient or error-prone. At first order. eliminate misfits. requirements management tools. In practice. and consolidate diverse opinions into a team direction. selling requires continuous negotiation. quality assurance analysis tools. sell changes to the status quo in the face of resistance. exploit eccentric prima donnas. test tools. 5. and empathy. thereby eliminating steps and minimizing the number of iterations in the process. Above all.4 IMPROVING AUTOMATION THROUGH SOFTWARE ENVIRONMENTS The tools and environment used in the software process generally have a linear effect on the productivity of the process. motivate progress. automated system builds. An environment that provides semantic integration (in which the environment understands the detailed meaning of the development artifacts) and process automation can improve productivity. and user interfaces provide crucial automation support for evolving the software engineering artifacts. and decision-making skill seems obvious despite its intangible definition. compilers. transition average people into top performers. The jillion books written about management have failed to provide a clear definition of this attribute. However. and accelerate the adoption of modern techniques. Decision-making skill. Section 3. Planning tools. Selling skill. 4. 3. Teamwork requires that a manager establish trust.46 IMPROVING SOFTWARE ECONOMICS 3. Team-building skill. An environment that supports incremental compilation. editors. improve software quality. and sell achievements against objectives. compromise. The transition to a mature software process introduces new challenges and opportunities for management control of concurrent activities and for tangible progress and quality assessment. sell candidates on job positions. the isolated impact of tools and automation generally allows improvements of 20% to 40% in effort. configuration management environments provide the foundation for executing and instrumenting the process. and integrated regression testing .2 focused on process improvements that reduce scrap and rework. We all know a good leader when we run into one.

continuous and integrated change management. integrated development environment must support the automation of the development process.3. it is easy to find statements such as the following from companies in a particular tool niche: . However. and languages. Round-trip engineering is a term used to describe the key capability of environments that support iterative development. and deployment artifacts. platforms. design. Forward engineering is the automation of one engineering artifact from another. automated test case construction from use case and scenario descriptions has not yet evolved to support anything beyond the most trivial cases. we need automation support to ensure efficient and error-free transition of data from one artifact to another. This environment should include requirements management. the ability to estimate costs and schedules.4 IMPROVING AUTOMATION THROUGH SOFrWARE ENVIRONMENTS 47 can provide rapid turnaround for iterative development and allow development teams to iterate more freely. A common thread in successful software projects is that they hire good people and provide them with good tools to accomplish their jobs. host/target programming tools. Reverse engineering is the generation or modification of a more abstract representation from an existing artifact (for example. compilers and linkers have provided automated transition of source code into executable code. As we have moved into maintaining different information repositories for the engineering artifacts. Automation of the design process provides payback in quality. An important emphasis of a modern approach is to define the development and maintenance environment as a first-class artifact of the process. document automation. creating a visual design model from a source code representation). today's environments do not come close to supporting automation to the extent possible. For example. such as unit test scenarios. For example. automated regression testing. A robust. It is common for tool vendors to make relatively accurate individual assessments of life-cycle activities to support claims about the potential economic impact of their tools. the complexity of building. Integrated toolsets play an increasingly important role in incremental/iterative development by allowing the designers to traverse quickly among development artifacts and keep them up-to-date. more abstract representation. and feature/defect tracking. One word of caution is necessary in describing the economic improvements associated with tools and environments. and overall productivity using a smaller team. This concept is developed more fully in Chapter 12. implementation. For example. and maintaining large-scale webs of components introduced new needs for configuration control and automation of build management. controlling. Round-trip engineering describes the environment support needed to change an artifact freely and have other artifacts automatically changed so that consistency is maintained among the entire set of requirements. As architectures started using heterogeneous components.

• Coding and unit testing activities consume about 50% of software development effort and schedule. In my experience. none of these claims is really wrong. the combined effect of all tools tends to be less than about 40%. In general. Because test activities consume 50% of the life cycle. consume as much as 30% of project budgets.48 IMPROVING SOFTWARE ECONOMICS • Requirements costs. no wonder it takes 275% of budget and schedule resources to complete most projects!) When taken together. . (Given these claims. • Configuration control and change management are critical activities that can consume as much as 25% of resources on a large-scale project. The interrelationships of all the software development activities and tools are far too complex for such simple assertions to be reasonable. they are just too simplistic. It is unlikely that any individual tool will improve a project's productivity by more than 5%. Table 3-5 summarizes some dimensions of quality improvement. analysis and evolution activities consume 40% of life-cycle • Software design activities have an impact on more than 50% of the resources. Taken individually.5 ACHIEVING REQUIRED QUALITY Many of what are accepted today as software best practices are derived from the development process and technologies summarized in this chapter. and most of this benefit is not realized without some corresponding change in process. business administration. These practices have impact in addition to improving cost efficiency. Beware of this type of conclusion: This testing tool will improve your testing productivity by 20%. activities can consume more than 30% of project engineerand progress assessment can • Project management. • Test activities can consume as much as 50% of a project's resources. • Documentation mg resources. the claims can be very misleading. there will be a 10% net productivity gain to the entire project. you are better off normalizing most vendor claims to the virtual 275% total than the 100% total you must deal with in the real world. 3. you can afford to spend $100. With a $1 million budget. Many of them also permit improvements in quality for the same cost.000 on test tools.

performance. measured. and self-documentation . General quality improvements with a modern process MODERN ITERATIVE PROCESSES QUALITY DRIVER CONVENTIONAL PROCESS Requirements misunderstanding Development risk Commercial components Discovered late Unknown until late Mostly unavailable Resolved early Understood and resolved early Still a qualiry driver. and focusing throughout the life cycle on a balance between requirements evolution. rigorous design methods. focusing on requirements completeness and traceability late in the life cycle. and toolsupported Change management Design errors Automation Resource adequacy Schedules Target performance Late in the life cycle.3. but tradeoffs must be resolved early in the life cycle Early in the life cycle. chaotic and malignant Discovered late Mostly error-prone manual procedures Unpredictable Overconstrained Paper-based analysis or separate simulation Document-based Software process rigor Key practices that improve overall software quality include the following: • Focusing on driving requirements and critical use cases early in the life cycle. reliable programming. reuse. change management. abstraction. quantitative understanding Managed. error-free evolution of artifacts Predictable Tunable to quality.5 ACHIEVING REQUIRED QUALITY 49 TABLE 3-5. and regression test automation • Using visual modeling and higher level languages that support architectural control. early performance feedback. document automation. and plan evolution • Using metrics and indicators to measure the progress and quality of an architecture as it evolves from a high-level prototype into a fully compliant product • Providing integrated life-cycle environments that support early and continuous configuration control. design evolution. straightforward and benign Resolved early Mostly automated. and technology Executing prototypes.

These early demonstrations may be on host or target platforms or partial network configurations. the infrastructure-including the operating system overhead. This sequence occurred because early performance insight was based solely on naive engineering judgment of innumerable criteria. but the real culprit was immature use of the infrastructure. • Integration and test. However. Early performance issues are typical. However. • Initial design review. . • Mid-life-cycle design review. The assessments started whittling away at the margin. The underlying infrastructure was usually the scapegoat. Conventional development processes stressed early sizing and timing estimates of computer program resource utilization. and the interprocess and network communications overhead-and all the secondary threads were typically misunderstood. the typical chronology of events in performance assessment was as follows: • Project inception. In most cases. the database management overhead. They may even be healthy. as early benchmarks and initial tests began exposing the optimism inherent in earlier estimates. immature architectural solutions. or poorly understood early design trade-offs. because they tend to expose architectural flaws or weaknesses in commercial components early in the life cycle when the right trade-offs can be made. Serious performance problems were uncovered. they can be planned and managed to provide a fruitful engineering exercise. a demonstration-based approach can provide significantly more-accurate assessments of performance issues.50 IMPROVING SOFTWARE ECONOMICS • Early and continuous insight into performance issues through demonstration-based evaluations Improved insight into run-time performance issues is even more important as projects incorporate mixtures of commercial components and custom-developed components. The proposed design was asserted to be low risk with adequate performance margin. the actual application algorithms and database sizes were fairly well understood. In most large-scale distributed systems composed of many interacting components. In any case. Optimistic assessments of adequate design margin were based mostly on paper analysis or rough simulation of the critical threads. necessitating fundamental changes in the architecture.

feasibility. but they are rarely significant contributors to quality compared with the following primary quality mechanisms and indicators. Inspections are also a good vehicle for holding authors accountable for quality products. and during testing by independent test teams. and they can learn by inspecting the products of senior authors. completeness. understandability. This is one of the best ways for junior software engineers to learn. Gross blunders can be caught and feedback can be appropriately channeled. analyzers. automated test suites) that ensure representation rigor. thereby assessing the consistency. this "inspection" is much more tangibly focused on integrated and executable aspects of the overall system. All authors of software and documentation should have their products scrutinized as a natural by-product of the process. and change control • Life-cycle testing for detailed insight into critical trade-offs. acceptance criteria. . and requirements compliance • Change management metrics for objective insight into multiple-perspective change trends and convergence or divergence from quality and progress goals Although I believe that inspections are overemphasized. so that bad practices are not perpetuated. In my experience. Putting the products of amateurs into the hands of experts and vice versa is a good mechanism for accelerating the acquisition of knowledge and skill in new personnel. Therefore. the coverage of inspections should be across all authors rather than across all components. One value of inspections is in the professional development of a team.6 PEER INSPECTIONS: A PRAGMATIC VIEW 51 3.6 PEER INSPECTIONS: A PRAGMATIC VIEW Peer inspections are frequently overhyped as the key aspect of a quality system. consistency. Varying levels of informal inspection are performed continuously when developers are reading or integrating software with another author's software. peer reviews are valuable as secondary mechanisms. in certain cases they provide a significant return. Junior authors need to have a random component inspected periodically.3. However. and technology constraints inherent in the engineering artifacts • Major milestone demonstrations that force the artifacts to be assessed against tangible criteria in the context of relevant use cases • Environment tools (compilers. It is generally useful to have the products of junior team members reviewed by senior mentors. which should be emphasized in the management process: • Transitioning engineering information from one artifact set to another. debuggers.

or interoperability). This approach can be extremely counterproductive. Notwithstanding these benefits of inspections. A process whose primary quality assurance emphasis is on inspections will not be cost-effective. prototyping. more useful quality assurance activities. and other equally demanding dimensions of complexity. distributed resources. including . They rarely result in the discovery of real performance bottlenecks. Several published studies emphasize the importance and high ROI of inspections. many organizations overemphasize meetings and formal inspections. and test cases) deserve such detailed scrutiny when compared with other. or resource contention). but here is my rationale. Significant or substantial design errors or architecture issues are rarely obvious from a superficial review unless the inspection is narrowly focused on a particular issue. It would take human intellects similar to those of world-class chess players to comprehend the dynamic interactions within some simple software systems under some simple use cases. source code. In all but trivial cases. Only 20% of the technical artifacts (such as use cases. with innumerable components. I am frequently a lone voice on this topic. races. or architectural weaknesses (such as flaws in scalability. An inspection focused on resolving an existing issue can be an effective way to determine cause or arrive at a resolution once the cause is understood. preferably those who have a stake in its quality. a critical component deserves to be inspected by several people. or experimentation • Constructing design models • Committing the current state of the design model to an executable implementation • Demonstrating the current implementation strengths and weaknesses the context of critical subsets of the use cases and scenarios III • Incorporating lessons learned back into the models. design models. Today's systems are highly complex. and plans Achieving architectural quality is inherent in an iterative process that evolves the artifact sets together in balance. random human inspections tend to degenerate into comments on style and first-order semantic issues. serious control issues (such as deadlocks. concurrent execution. reliability. and require coverage across all engineering products. or feature set. The checkpoints along the way are numerous. performance. And most inspections are superficial. Consequently. I suspect that many of these studies have been written by career quality assurance professionals who exaggerate the need for their discipline. architectural issues are exposed only through more rigorous engineering activities such as the following: • Analysis. implementations. use cases.52 IMPROVING SOFTWARE ECONOMICS Finally.

Evaluating and assessing the quality of the evolving engineering baselines should be the job of an engineering team that is independent of the architecture and development team. or developers about the discriminators of their success. A PRAGMATIC VIEW 53 human review and inspections focused on critical issues. or documents. Early life-cycle artifacts are certainly more dependent on subjective human review than later ones are. . testers. Their life-cycle assessment of the evolving artifacts would typically include change management. trend analysis. Look at any successful software effort and ask the key designers. Quality assurance is everyone's responsibility and should be integral to almost all process activities instead of a separate discipline performed by quality assurance specialists.6 PEER INSPECTIONS. It is unlikely that any of them will cite meetings. Focusing a large percentage of a project's resources on human inspections is bad practice and only perpetuates the existence of low-value-added box checkers who have little impact on project success. But these inspections are not the primary checkpoints. inspections. and testing.3. as well as inspection.

Sign up to vote on this title
UsefulNot useful