Designing, what does it mean?

25 Apr 2024

Designing software is often discussed in various contexts, but it remains an ambiguous concept. For instance, when someone mentions designing software, it’s unclear which aspect of the software they are referring to or the process they followed to derive the code. To engage in a meaningful conversation about designing software, it’s essential to define what design means and how it relates to software engineering.

The importance of design lies in its practicality and its ability to empower us. While we may readily recognize the design process in fields like acting, art, or music composition, we often overlook its significance in our daily lives. Designing follows a structured approach that begins with intent. Intent, shaped by the individual and the context, is crucial for determining the purpose of the action. While some argue that design is inherently problem-solving, it extends beyond that; for example, artists create without necessarily addressing a problem. This highlights the flexibility and adaptability of design, which can cater to various intentions and contexts.

Moreover, design necessitates the use of working memory or active memory, enabling us to draw upon past experiences and references to inform present actions. This cognitive effort underscores the energy required for effective design. Additionally, collaboration with others is integral to the design process. While it may seem that individuals can achieve tasks independently, designing for the benefit of others necessitates interaction and cooperation. Throughout history, humans have collaborated to design solutions that meet the needs of beneficiaries, underscoring the collaborative nature of design.

In summary, design is characterized by three main principles: intent, working memory, and collaboration. While subject to minor variations, this framework remains fundamental to the design process.

Context of design

Designing has always been a practical and natural thing we all do, but little do we get to appreciate the immense power it provides us. It’s easy to see the designing process when it comes to actors, artists, or musical composers. Some of which have methods that are both odd and even extreme. Nonetheless, we all inherit a powerful tool at our disposal, to design.

In all cases, the designing follows a closed syntax, it first requires intent. Intent is determined upon the person and the context of which the intent of action is meant for. Many articles online argue that in the context of design, the intent is meant to resolve a problem. However, when artists create, is there a problem? Does it mean that all design derives from a problem? I argue no, simply because intent supersedes the context of the situation, and the context is both mutable. Intent can be to resolve a problem in the context of a job, but it can also be to create a little piece of art that you wanted to do. The intent is more important than we think. Identifying this requires deep thought additionally requires intrapersonal conversations and external perspective.

Secondly, design requires working memory or active memory. Active memory is the act of utilizing references in our memory. This is important because it allows us to develop key links between past experiences and what we remember of it to serve us in the present. This is effortful, so it requires energy.

Thirdly, design requires collaboration with others. Now, oddly enough, most people would argue that this principle is incorrect, that there are many examples that we can reference where we presume that people were able to do things on their own. However, that is not the case in the process of design. When we design something, it is to achieve some ultimate utility to yourself or others. Therefore, the designing process requires us to interact with those entities that ultimately benefit from the design. In human history, we have designed things for others and thus required interacting with them to make a design that suits the needs of the beneficiary. Therefore, do we really do anything alone and do we really achieve outcomes alone. No, not in the cases of designs and not in the case of many aspects of human life. We may do things alone, but we cannot achieve things without the collaboration of others.

Ultimately, design requires three main principalities intent, working memory, and collaboration. However, this serves as a main framework and therefore is subject to minor alterations, but nonetheless the sequence of design is unchanged.

In the context of Software Engineering

Design plays a crucial role in software engineering, demanding substantial cognitive effort, particularly in the realms of intent and collaboration. Software engineering entails extensive design efforts, given its reliance on active memory and the need for collaborative problem-solving. By leveraging design methodologies, software engineers can streamline the development process and facilitate rapid iteration.

The challenges in software design primarily stem from intent and collaboration. Establishing a clear intent is paramount, as it guides the design process and ensures consistency amid evolving methodologies. While methods may vary depending on the context, adherence to the overarching intent remains essential.

Despite the mutable nature of design methods, certain patterns persist across different contexts. Creational, structural, and behavioral design patterns offer adaptable solutions to common design challenges, ensuring consistency and efficiency in software development.

In the context of my work

In a recent project, my team and I developed a full-stack website for managing clubs at the University of Hawaii at Manoa. Our design process involved incorporating behavioral and structural design patterns to address various user needs and system requirements.

From a behavioral standpoint, we focused on defining user roles and access levels to ensure security and accessibility. By categorizing users as visitors, subscribers, or club managers, we established clear guidelines for accessing and interacting with club-related data. Administrators were granted elevated privileges to verify and manage club information, ensuring data integrity and security.

Structurally, we organized data using an entity-relationship model, allowing for efficient data retrieval and management. This relational database structure facilitated seamless navigation and filtering of club information, enhancing the user experience.

WE DESIGN FOR A BETTER ANYTHING!

Design permeates every aspect of our lives, from artistic endeavors to software development. By understanding the principles of design and its application in software engineering, we can create innovative solutions that address complex challenges and enhance user experiences. Whether designing a piece of art or developing software, the principles of intent, working memory, and collaboration remain integral to achieving success.