For courses in Software Engineering and Software Reliability. Successful Software Development takes a systematic approach to consistently successful software development. It proceeds from the fact that there is no one way to develop software systems and introduces a model for a mature software development process that accommodates flexibility, the Systems Engineering Environment (SEE). This model comprises two fundamental, interlocked elements: the policies and procedures that define how software development is performed and the technologies available to get the job done.
"synopsis" may belong to another edition of this title.
PrefaceWe must not promise what we ought not, lest we be called on to perform what we cannot.—Attributed to Abraham Lincoln, speech delivered before the first Republican convention of Illinois, May 29, 1856, The Writings of Abraham Lincoln, ed. Arthur B. Lapsley, vol. 2, p. 249 (1905).
Successful Software Development means "the ability to produce 'good' software systems 'consistently'"
Customers want software systems to do what they are supposed to do, to be delivered on time, to be delivered for the agreed-upon cost, and to satisfy any other criteria they may specify. Sellers want the systems they develop to do what the customer wants, to be delivered ahead of schedule or on time, to earn them a reasonable profit, and to satisfy any other criteria that may govern the way they do business. Software systems satisfying both customer and seller criteria are "good." Customers and sellers also want their criteria satisfied "consistently." The software development business should not be a lottery.
This book is a practitioner's guide for achieving successful software development.
Making It Happen means "implementing a 'way' of successful software development"
There is no one "way" to develop software systems. If there were, software systems development would have been reduced to an assembly-line process long ago. People with diverse experiences and educational disciplines contribute to advances in software development methodologies, processes, techniques, practices, and tools. This rich diversity brings about different "ways" to develop "good" software systems "consistently."
This book is a practitioner's guide for making successful software development happen in a way that makes sense for your environment.Who Should Read This Book?
The software development business is centered on a relationship between a customer and a seller of software products and services. So, this book is for both software customers and software sellers. More specifically, the intended audience is anyone who performs one or more of the following activities:
Develops software products and software-related products
Directly manages people who do the above
Manages the above managers
Buys/uses products from the above
Educates the people above
Individuals have used the first edition of this book to complement their particular expertise. Customers have used this book to refine their business dealings with sellers. Sellers have used this book to establish or refine their "way" of developing software systems for their customers. Sellers have also used the book to provide in-house training to their marketing personnel so the marketers better understand what their businesses are selling. Customers and sellers have used the book to train their human resource personnel so they better understand what skill sets are needed for the software development business. Universities have used the book in graduate schools to teach how to be successful in the software development business.
For the software customer, we explain and illustrate mechanisms to effectively communicate to the software seller (1) what you want, (2) when you want it, and (3) how much you want to pay for it.
For the software seller, we explain and illustrate the mechanisms to effectively communicate (1) to your customer your understanding of what the customer wants and (2) among your project team members how you are going to give the customer what the customer wants.
For the educator, we provide supplemental training materials for the classroom. This material is packaged in a separately available study guide that consists of the following items:
Over 500 pages that recast the book's contents as presentation material. This material is organized by chapter and lays out the material in the order that it appears in the chapter. Most of the book's figures, or adaptations of these figures, appear in this material.
Sample questions for homework assignments.
Sample class project.
Sample course syllabus.
Educators can use the above material in conjunction with the companion Web site at phptr/donaldson_siegel/ to develop courses based on the book's material. These courses can be part of a corporate training program or a college or university curriculum. The study guide material is adapted from our teaching experience in both of these environments.
Regarding the presentation material in the study guide, we note that students can use this material without an instructor as a companion to the book. Example uses of this material as a companion to the book include:
Before reading a chapter or part of a chapter from the book, the student can go to the corresponding study guide pages to get a quick look at the chapter or chapter part.
While reading a chapter or chapter part, the student can, in parallel, look at the corresponding study guide pages. Sometimes a different look at the same material can facilitate learning.
After reading a chapter or chapter part, the student can go to the corresponding study guide pages for review purposes and quickly recall key points, concepts, and book illustrations.How Is This Software Development Book Different from Other Such Books?
Lots of things go into making successful software development happen. Among the important things, effective communication, risk reduction, and an organizational "way" of successful software development stand out and are threaded throughout this book.
Effective communication means "transmitting information, thought, or feeling so that it is satisfactorily received or understood emphasis added."1 At the risk of oversimplification, people understand the mechanics of creating software code, but both the customer and seller have trouble understanding each other. Customers have said, "We thought we told the developers what we thought we wanted, but what they delivered is not what we wanted." Sellers have said, "We thought we understood what the customer was trying to tell us, but come to find out, what we delivered is not what the customer wanted." Therefore, for us, Successful software development is first and foremost an ongoing exercise in effective communication between the customer and the seller throughout a software project.
Risk reduction means "reducing the likelihood that software systems development products will (1) not be delivered on time, (2) not be delivered within budget, and (3) not do what the seller and customer mutually agreed that the products are supposed to do."
Simply stated, people understand there are risks with creating software code. However, many people do not assess risk, allocate appropriate resources to mitigate risk, monitor risk, and decide how to deal with risk. Customers have said, "We don't have documented requirements, but we expect the system to do what it is supposed to do." In response to such customer requests, sellers have said, "No problem! The software should do what you want and we will deliver it on time." Therefore, for us,Successful software development is also an ongoing exercise in risk reduction.
An organizational "way" of successful software development means "a set of processes that an organization uses to develop and maintain software and software-related products." We proceed from the premise that, as we said earlier, there is no one way to build software systems. Again, at the risk of oversimplification, customers have said, "We don't have time to stop and plan the work to be done, just get started coding." Sellers have said, "We know what the users need, so let's get started." Therefore, for us, A "way" of developing software systems consists of processes that (1) promote effective communication throughout software systems development and (2) continually reduce risk.
We present processes based on fundamental engineering and process principles that include (1) project planning, (2) change control, and (3) product and process reviews. We present a language-based measurement technology2 for evaluating software processes and the products they yield. We explain how to use such measurements to improve your processes and products. We explain how to plan process improvement to help bring about improvement in the way you develop software systems. We explain why the ideas presented work, give you suggestions on how you can make them work, and offer insights into what may not work.
An organizational "way" of doing business needs to incorporate such things as the lessons learned from people's experiences and previous software development projects. If the organizational "way" includes such experiences and lessons learned, known and/or anticipated risks are reduced, but not necessarily eliminated. Also, effective customer/seller communication reduces misunderstandings, thereby reducing the risk that a software product will not satisfy its criteria.
This book, therefore, presents you with techniques for effectively communicating and reducing risk. We explain and illustrate fundamental engineering and process principles for you to consider when Making It Happen in your environment.
We stress that these techniques have been successfully implemented on real-world software systems development projects and programs. The size of these projects and programs ranges from tens of thousands of dollars to hundreds of millions of dollars.How Is the Book Organized?
The chapters address the following topics:
Chapter 1 The first chapter presents the business case for setting up a "consistent" way of doing software systems development. The chapter also presents some fundamental concepts and terms used throughout the book. These terms and concepts establish a working vocabulary to facilitate effective communication.
Chapter 2 The second chapter presents techniques for project planning and reducing risks. Many organizations develop project plans and then start working. For us, planning is just one part of an organization's "way" of developing software systems.
Chapter 3 The third chapter presents an organizational "way" (or process) for developing software systems—an organizational software systems development process. In effect, this "way" of doing business helps to set the stage for the rest of the book. There are many "best practices" for software development. The question is, "How do these practices interface with one another?" The organizational "way" presented consists of a set of related processes that embody fundamental engineering and process principles that specifically address effective communication and risk reduction. The organizational "way" presented contains a project planning process, a change control process, product and process review processes, and a measurement process. We define and explain roles, responsibilities, activities, and communication linkages. We present this "way" of developing software systems for your consideration when defining your way of doing business. We stated above a key principle regarding software development—successful software development is an ongoing exercise in risk reduction. In the third chapter, when we present a "way" for developing software systems for your consideration, we stress the following corollary to this key principle:
If you decide under certain particular circumstances that it may make better sense not to follow your organizational way of doing business, then you should keep in mind that you might be increasing software systems development risk.
Chapter 4 No matter how well a project is planned, it is almost axiomatic that things will change once the project gets underway. Therefore, the fourth chapter presents the fundamental process of change control. This chapter also addresses the communications problems that plague any software systems development project. Sometimes the customer believes that the requirements were effectively communicated to the developer. Sometimes the developer believes the customer requirements were understood. Subsequent to developer implementation of the requirements, the customer and developer may have vastly different perspectives regarding requirements satisfaction. This chapter offers guidance for reducing the likelihood of such disconnects arising in your environment.
Chapter 5 For us, "consistent" software development involves the systems disciplines of management, development, and product assurance. The fifth chapter presents product and process reviews from the perspectives of these three systems development disciplines. This chapter focuses on how reviews help customers and/or sellers gain visibility into project progress and risk so that intelligent, informed decisions can be made with respect to what needs to be done next.
Chapter 6 Measurement for the sake of measurement is a waste of time and resources. The sixth chapter presents practical guidance on how to express meaningful measurement in everyday language that the intended audiences agree to and understand. Meaningful measurement contributes to (1) successful software systems development projects and (2) improvements in the "way" software systems are developed.
Chapter 7 Pressures such as competition generally push organizations to continue to improve their skill sets, processes, and products. The seventh chapter addresses people issues associated with maturing the organization's "way" of doing business. Getting software systems development processes on paper to document this "way" is a challenge. However, getting people in the organization to help build this "way" and then follow it is an even more imposing challenge. We present ideas for how to deal with this challenge.
Chapter 8 Finally, the eighth chapter presents guidance for planning improvements to your "way" of developing software systems. This chapter helps you select concepts from the preceding chapters to develop a process improvement approach. We discuss how to factor lessons learned from following your "way" of doing business or from not following your "way" into improvement activities. Also, we present other candidate practices for your consideration for improving your "way" of developing software systems.
Table P-1 highlights in more specific terms what you will learn from each chapter. Table P-1 Chapter Highlights.
Chapter Title and Purpose What You Will Learn
1 Business Case—(1) makes the business case for setting up a "consistent" way of doing software systems development and (2) introduces fundamental concepts needed for the rest of the book.
What successful software development means.
Why investing in software process improvement to achieve consistently "good" products makes good business sense.
Business way refinement/transformation is first and foremost a cultural change exercise.
Successful software development must be a customer/seller partnership, where the "seller" is the software systems development enterprise and the "customer" is the buyer/user of what the seller provides.
The ideas in the book are scalable—they apply to customer/seller partnerships of almost any size.
The ideas in this book encompass customer/seller partnerships in any business environment (e.g., commercial, government).
Why the software development business does not have ...From the Back Cover:
A systematic approach to consistently successful software development.
In the age of the Internet, where software is more mission-critical than ever, it's no longer enough for your development projects to succeed some of the time. You need to deliver excellence, consistently—and you must do it faster than ever.
Successful Software Development proceeds from the fact that there is no one way to develop software systems and introduces a model for a mature software development process that accommodates flexibility, the Systems Engineering Environment (SEE). This model comprises two fundamental, interlocked elements: the policies and procedures that define how software development is performed and the technologies available to get the job done. Using the SEE framework, learn how to:
Successful Software Development includes over 200 figures, process diagrams, and annotated outlines—all designed to help you understand and implement better processes quickly and with less resistance.
This book's techniques will work with any software quality methodology you choose, as well as SEI's capability maturity models and ISO 9000. They will work with any development technology, from CASE to object-oriented design to rapid prototyping. And they will work for you whether you're a programmer, manager, or customer. When it comes to delivering better software, if you need to get results, you need this book.
"About this title" may belong to another edition of this title.
Book Description Prentice Hall, 2001. Hardcover. Book Condition: New. book. Bookseller Inventory # 0130868264
Book Description Prentice Hall, 2001. Hardcover. Book Condition: New. New item. Bookseller Inventory # QX-005-46-7966107
Book Description Book Condition: Brand New. Book Condition: Brand New. Bookseller Inventory # 97801308682681.0