Ivar Jacobson

The Essentials of Modern Software Engineering


Скачать книгу

by providing a hands-on, tangible user experience focused on supporting software professionals as they carry out their work. For example, the kernel can be accessed (and actually touched) through the use of cards (see Figure 3.5). The cards provide concise reminders and cues for team members as they go about their daily tasks. By providing practical check-lists and prompts, as opposed to conceptual discussions, the kernel becomes something the team uses on a daily basis. This is a fundamental difference from traditional approaches, which tend to emphasize method description over method use and tend to be consulted only by people new to the team.

Image

      Cards have proven to be a lightweight and practical way to remember, but also to use in practice in a team. They make the kernel and the practices easy to digest and use. For this reason, throughout the book we will use cards to present elements in the kernel and in practices.

      After studying this chapter, you should be able to

      • name the key elements of Essence;

      • distinguish between a practice and a method (give some examples of both);

      • explain the concept of composition as a key technique to build methods using practices (and to support extensibility in Essence);

      • explain the concept of tacit vs. explicit practices;

      • explain the role of capability and background in deciding how explicit a practice should be; and

      • explain the layered architecture of Essence and its elements.

      Again, we point to additional reading, exercises, and further material at www.software-engineering-essentialized.com.

      Given that the reader is now equipped with ability to distinguish essential (i.e., the important) steps/aspects/decisions from those of minor importance, more knowledge can now be gained by proceeding in a given project and by working on the project with other people/stakeholders involved.

      4

       Identifying the Key Elements of Software Engineering

      The goal of this chapter is to present the key elements of the development endeavor, which later become “alphas,” the building blocks of Essence—the things we work with when developing software. In this chapter, we discuss

      • the key elements within software engineering that deliver value to the customer;

      • the key elements in software engineering that are related to the targeted solution and development endeavor; and

      • the role and importance of different stakeholders, requirements, and team composition.

      This knowledge will help us to lay out a model of software engineering with areas of concern and key elements, which will create the basis for our understanding of Essence. To understand this model in practical application, we now rejoin Smith in his journey into software development.

      After Smith had been working in the software industry for several years, he had his fair share of ups and downs. He wished there were more ups than downs. Without a doubt, software engineering is a creative process, but Smith had come to recognize that there are some fundamental basics—some things to be mindful of, to avoid making unnecessary mistakes.

      Smith’s colleagues also recognized that, but they had difficulty articulating these fundamentals due to their different backgrounds, experience, and, consequently, the different terms they used. It seemed that every time a new team was formed, members had to go through a “storming and norming” process to iron out these terms before starting to deal with the challenges.

      If you have been in the software industry for some time, you can empathize with Smith. For students new to software engineering, we want you to appreciate the complexities of a software development endeavor as you read this chapter and compare that against the complexities of your class, or of project assignments that you have worked on.

      Essence was developed to help people like Smith and companies like Travel-Essence who rely heavily on software to run their business. What the contributors to Essence did was to lay down the foundation of software engineering for folks like Smith and yourself to cut short this startup period and ensure health and speed as your software development endeavors progress. The term health is discussed and defined later on for the area of software development. See, for example, Chapter 11 for a more detailed discussion.

      Let’s begin with some commonly used terms found in software engineering, which we will briefly introduce in italics. Regardless of size and complexity, all software development endeavors involve the following facets (see Figure 4.1):

      • There are customers with needs to be met.

      ■ Someone has a problem or opportunity to address.

      ■ There are stakeholders who use and/or benefit from the solution produced, and some of these will fund the endeavor.

      • There is a solution to be delivered.

      ■ There are certain requirements to be met.

      ■ A software system of one form or another will be developed.

      • There is an endeavor to be undertaken.

      ■ The work must be initiated.

      ■ An empowered team of competent people must be formed, with an appropriate way of working.

      These terms map out what software engineering is about. When something goes wrong, it is normally an issue with one or more of these facets. The way we handle these issues has a direct impact on the success or failure of the endeavor. We will now look at each of these facets in turn. Later, in Chapter 6, we will once more discuss issues and their relationships.

Image

       4.2 Software Engineering Is about Delivering Value to Customers

      First, software engineering is about delivering value to customers. This value can be in improvements to existing capabilities or in providing new capabilities that are needed by the customer. (In our TravelEssence mode, customers are the users. They can be travelers or travel agents who make reservations on behalf of actual travelers.) Different customers would have different needs. If the endeavor does not deliver value, then it is a waste of time and money. As the saying goes, life is too short to build something that nobody wants!

       4.2.1 Opportunity

      Every endeavor is an opportunity for success or failure. It is therefore very important to understand what the opportunity is about. Perhaps you have heard of Airbnb. Airbnb started out in 2008 with two men, Brian Chesky and Joe Gebbia, who were struggling to pay rent. They came up with the idea of renting out three airbeds on their living-room floor and providing their guests with breakfast. It turned out that during that time, there was an event going on in their city and many participants weren’t able to book accommodations. Brian and Joe realized they were onto something. To cut the story short, Airbnb became a 1.3 billion USD business in 2016.

      However,