Module 14 - 1: Reasons for design sketching
High-level abstraction
Sketches are simple, independent drawings that are not intended as finished diagrams. Sketches can illustrate any technology-related or business-related interaction at a high level of abstraction.
Because agile teams do not need to create fully documented models before they begin coding activities, sketches are suitable for designing systems at a high level.
Informal notation
Sketches do not rely on a formal notation, so you can create them quickly.
In software-intensive systems, it is not realistic to perfectly anticipate the design at the beginning of the design process. In emergent design, teams continuously adapt the designs to meet user needs. Agile teams promote just-in-time activities to refine the architecture of a system in a timely manner, which means implementing an activity only at the exact time it requires implementation. Whiteboard drawing is probably the most common technique used to share ideas. Because sketches are informal, they are simple to create and easy to understand, which makes them suitable for just-in-time design activities.
Support for agile practices
Design is a key activity in successful agile development projects. The Manifesto for Agile Software Development, written in 2001, is widely accepted as a guideline for agile software development. The manifesto introduces four values and 12 principles that describe what agile development is. Architecture and design activities are part of the practices for increased agility.
Agile frameworks and processes, such as Scrum and OpenUP, include design work within the repeated cycle of iterations. Evolutionary architecture and design are considered best practices for software development projects. The practices are used to incrementally build and improve the software architecture while uncovering and addressing architectural issues during software development. To think through an aspect of a system, teams often create visual models, simple sketches, text descriptions, or anything that helps them understand the structure and behavior of the software.