 In the previous video, we looked at different UML diagrams used to model a given design. We saw that a given design can have various diagrams, which describe multiple views of the system at different levels of granularity. So, we can understand the software system through these detailed design diagrams, isn't it? Yes, this process of trying to understand a given design is known as software design comprehension. Design comprehension is an important skill required in the workplace. Software developers usually work on large existing complex systems and they write additional features based on new requirements given to them. These tasks require them to explicitly comprehend software designs. Let's think of a scenario where design comprehension is needed. For example, let's say we need to integrate the mode-based music player with an existing Amazon music application. How do we go about doing this? So developers, before they actually start coding, they need to comprehend existing subsystems in the music player and design the new mode-based music feature so that it can be seamlessly integrated to the existing design. Okay, I understood that design comprehension is essential. But let's say I'm a student who has just learned about these uber diagrams. It can be difficult to make sense of all these diagrams, right? Yes, that's true. Let's reflect on these difficulties. So, students, here's a reflection spot for you. What difficulties do you think one faces while trying to analyze different UML diagrams? You can pause this video and write down your responses before proceeding. Understand what these diagrams mean. For example, there are various syntax and rotations for the different design diagrams. Yes, that's true. But this can also be easily learned and practiced. Others might find it difficult to understand how certain requirements and parts of the solution design map. For example, how do classes in the class diagram like song, similarity, etc. relate to the requirement of the mode-based music player, the difficulty that people could face is making connections between these diagrams mainly because each of the diagram has huge amount of details. Yes, that's true. For example, the sequence diagram takes objects from the class diagram and describes its behavior. However, students find it difficult to make this connection between the class diagram and the sequence diagram. It's important to make connections between the different UML diagrams to comprehend the design. But how can we develop design comprehension? Yes, this is a very good question. To answer this, let's see how an experienced software designer tries to comprehend different diagrams in the design. So how does an experienced software designer comprehend a given design? Let's take the example of the design of the mode-based music player. While trying to comprehend this design, one needs, first of all, an understanding of the domain. Problem domain knowledge refers to the knowledge about the context for which the design has been developed. For example, in the case of the mode-based music player, students should be familiar with how a music player works. One also needs knowledge about the design diagrams itself. The design diagram knowledge is based on the syntax and semantics of different design diagrams. For example, students should understand various symbols and representations in the class and the sequence diagrams and what they mean in the context of software design. One should also understand the main goals of these design diagrams. The main goals refer to the purpose of each diagram and its role in the design. For example, a sequence diagram for a particular functionality can be composed of a sequence of sub-goals that realize that functionality. For example, a sequence diagram for login into the mode-based music player will include sub-goals such as user input, functionalities to do when the login is successful and what to do when the login is unsuccessful. One also requires knowledge about the dynamic behaviors in the design. When expert designers see a set of design diagrams, they think about the dynamic behaviors in the design. This involves knowledge about how data members in the class diagram change based on the execution of the sequence diagram. For example, when the login is successful, a user's profile and playlists are fetched from the database and corresponding values of the user profile and the playlist should be updated. To effectively perform software design comprehension, one requires knowledge of the domain, the design diagrams, the main goals present in the diagrams and the dynamic behaviors in the design, which is nothing but how the system works in real time. That's how experienced software designers make sense of each of these diagrams. But I wonder if there's a way to help students comprehend such diagrams. Yes, the Verisim learning environment helps in just that. Verisim is a learning environment which helps students effectively comprehend various design diagrams. We'll look at the activities and features of Verisim in more detail in the next video.