Design Principles - vmware/versatile-data-kit GitHub Wiki

Design Principles

User-centered design and development

  • The needs, goals, and preferences of real users are at the center of the design and development process.
  • Scope, design & architect with real users
  • Don’t implement anything that won’t be adopted immediately by at least 1 (preferably more) user(s).

User-centered design (UCD) is a design approach that focuses on the needs, preferences, and limitations of end-users at each stage of the development process. The goal is to create products and features that are usable, efficient, and enjoyable for the people who will be using them.

To achieve this, we need to understand the real problems and pain points of the users.

Particularly important is users' involvement in each stage ensures that the final product meets their needs and expectations.

What follows are some tips on how end users can be involved in each stage of the development cycle.

Planning and requirements gathering

  • Conducting interviews, surveys, or questionnaires to understand user needs, preferences, and pain points.
  • Observing users (if possible in their natural environments is invaluable) to understand their context and how they interact with existing solutions and what challenges they face.
  • Co-creation workshops: Invite end users to participate in brainstorming sessions, where we can collaborate to generate ideas.

Design

  • Gathering feedback on mockups, wireframes, or early prototypes to ensure the design is aligned with user expectations and needs.
  • Involving users in reviewing and providing feedback on user flow and interaction design concepts. This ensures that the software's interfaces, and interaction patterns are intuitive and user-friendly.
  • Once the design has been further refined, involve users in testing high-fidelity prototypes (e.g., interactive or functional prototypes).

Development

  • Engaging users in testing early versions of the product or some specific features, providing feedback on functionality, performance, and usability.
  • Collaborating with users to refine and iterate on the design (especially of user-facing interfaces). 

Testing

  • Involving users in usability testing, where they perform specific tasks using the product, while designers observe and collect data on performance, errors, and satisfaction.
  • Conducting beta tests or pilot programs, where users use the product in real-world scenarios, providing feedback on issues and overall experience.

Deployment

  • Gathering user feedback post-launch through reviews, surveys, or focus groups to identify any issues that were not addressed during testing.
  • Encouraging users to report bugs, suggest improvements, or share their experiences with the product to inform future updates or enhancements

By actively involving users throughout the design and development process, we can create products and services that are more likely to meet user needs, foster satisfaction, and ultimately succeed.

“Don’t make me think” user experience

  • Make user experience clear, simple, and easy to use.
  • Users should be able to quickly and easily understand what the interface does and how to use it, without having to stop and think too much
  • Learn from Jony Ive, Steve Krug, Jakob Nielsen. Read "Don't Make Me Think" by Steve Krug (and after that "The Design of Everyday Things" by Don Norman.)

Creating a "Don't Make Me Think" user experience means putting the user first, prioritizing simplicity, and focusing on clear communication. We want to create interfaces that are not only visually appealing but also highly functional and accessible, allowing users to effortlessly interact with your product or service

What follows are some tips and techniques (these may be subject to revision in the future as we learn more).

Clarity and simplicity

  • Prioritize clarity in your design, making sure elements are easily recognizable and convey their purpose.
  • Minimize the number of steps required to complete tasks.
  • Limit the use of jargon and technical terms; instead, opt for plain language that users can easily understand.
  • Follow the principle of "less is more". Eliminate distractions and unnecessary elements by keeping only essential features

Software Interfaces

·       Create intuitive and predictable APIs (for example endpoints and parameters that match the actions and resources they represent)

  • Use clear and descriptive naming conventions. Choose meaningful and easily understandable names for your API endpoints, resources, and parameters, classes, methods.
  • Make it easy to get started. Everything must have a sensible default. Require no dependencies up front. Avoid manual steps. 
  • Implement error handling that is informative and user-friendly, guiding users through resolving issues when they arise

Visual hierarchy and layout

  • Organize your interface with a clear visual hierarchy, guiding users' eyes through the content and actions.
  • Use whitespace effectively to separate different sections and elements.
  • Align elements consistently to create a sense of structure and order.
  • Utilize font size, weight, and color to emphasize important elements and indicate relationships between them.

Intuitive Navigation

  • Use standard navigation patterns, such as menus, tabs, or breadcrumbs
  • Maintain consistency in placement, style, and function across your interface
  • Make it easy to go back. Implement clear and accessible back buttons or other navigation aids
  • Offer visual cues when users complete actions, like button changes or confirmation messages
  • Use clear, concise, and informative error messages to help users understand what went wrong and how to resolve it.
  • Keep users informed about ongoing processes (e.g., loading times) with progress indicators.

Usability Testing

·       Observing users as they interact with the feature/product and providing feedback on their experience

·       Test with real users as early as possible in the design process

·       Regularly iterate and refine your design based on user feedback

·       To obtain valuable and representative feedback recruit a diverse group of participants

Data-aware features.

  • Treat data (datasets) as a product
  • The focus for data users is using and managing data, not managing jobs or pipelines.
  • Expose data-oriented and data-aware interfaces (and not task oriented)

Data consumers, such as data analysts, product managers, or downstream ML/data engineers, prioritize datasets and data assets as they form the basis of their analyses and decision-making processes. These data consumers require easily accessible, high-quality data that can be integrated into their workflows and used in their analysis without too much overhead.

On the other hand, engineers have historically focused on modeling dependencies between jobs or tasks using orchestrator tools like Airflow, Luigi, and Prefect. This approach has been more about managing, monitoring, and operating jobs, rather than creating and managing data sets.

However, a recent trend in the industry is shifting towards a more data-oriented approach. This means that instead of concentrating on the jobs and tasks (processes), organizations are now emphasizing the data sets (end products) themselves. With this data-oriented approach, jobs and tasks are still essential, but they are considered implementation details. This means that while they remain crucial in creating the data sets, they are no longer the main focus. The primary focus now is on enabling data engineers to develop data sets (data models or data assets) instead of jobs. And ensuring that the data sets being generated are of high quality, easily accessible, and well-documented. The quick rise of tools like Mage.ai, Airbyte, and Dagster highlights this trend.

if VDK (Versatile Data Kit) wants to provide a compelling solution for data practitioners, it should see how to adapt to the industry trend and focus more on the data aspect.