漏斗YAML文件的YAML生成器。简化移动数据工作流过程

YAML Generator for Funnel YAML Files: Streamlining the Mobile Data Workflow Process

At Uber, real-time mobile analytics events—generated by button taps, page views, and more—form the backbone of the mobile data workflow process.

在Uber,由点击按钮、页面浏览等产生的实时移动分析事件构成了移动数据工作流程的主干。

To process these events, our Mobile Data Platform Team designed and developed the Fontana library, which converts the nearly-one-million-QPS (queries per second) volume of events into easily digestible and useful analytics for Uber engineers. As part of this process, funnel YAML files are key config files that are used to define sequences of events for analysis. To this end, our team has also designed and developed the SuperFlurry application, which aids in creating and managing these files.

为了处理这些事件,我们的移动数据平台团队设计并开发了Fontana库,该库将近100万QPS(每秒查询次数)的事件量转换为Uber工程师容易消化和有用的分析结果。作为这个过程的一部分,漏斗YAML文件是关键的配置文件,用于定义分析的事件序列。为此,我们的团队还设计和开发了SuperFlurry应用程序,以帮助创建和管理这些文件。

However, SuperFlurry still required users to create and modify funnel YAML files by editing raw YAML files directly. This was a significant pain point for Uber engineers and PMs aiming to set up their own funnels, especially for those unfamiliar with the format or the specific structure of funnel YAML files, as subtle syntactical errors are easy to make and switching back and forth between file creation and documentation is time-consuming. To remedy this issue, we designed and developed YAML Generator, an application that provides a comprehensive set of options for creating a funnel YAML file alongside a clean and intuitive UI.

然而,SuperFlurry仍然要求用户通过直接编辑原始YAML文件来创建和修改漏斗YAML文件。对于旨在建立自己的漏斗的Uber工程师和PM来说,这是一个重要的痛点,特别是对于那些不熟悉漏斗YAML文件格式或具体结构的人来说,因为细微的语法错误很容易发生,而且在文件创建和文档之间来回切换很费时。为了弥补这个问题,我们设计并开发了YAML生成器,这个应用程序为创建漏斗YAML文件提供了一套全面的选项,同时还有一个简洁直观的用户界面。

The newly developed YAML Generator application builds onto the SuperFlurry application, streamlining the creation of these funnel YAML files. Through the development of this application, the importance of simplifying user-side input and the importance of continuous feedback are highlighted.

新开发的YAML生成器应用程序建立在SuperFlurry应用程序的基础上,简化了这些漏斗YAML文件的创建。通过这个应用程序的开发,简化用户端输入的重要性和持续反馈的重要性得到了强调。

Background

背景介绍

The Fontana library is a framework that allows for the processing of large numbers of mobile analytic events. These events are emitted from all Uber Apps in real time, and are converted through funnel YAML files into specific analytics, one of the most important being conversion rate (e.g., percentage of users that purchase a product). Using these analytics, engineers are able to make informed decisions that improve the flow of their applications.

Fontana库是一个框架,可以处理大量的移动分析事件。这些事件是由所有Uber应用程序实时发出的,并通过漏斗YAML文件转换为特定的分析结果,其中最重要的是转换率(例如,购买产品的用户百分比)。利用这些分析,工程师能够做出明智的决定,改善他们的应用程序的流程。

Funnel YAML files

漏斗YAML文件

Funnel YAML files describe the specific steps that users take as part of a flow. For example, in order to obtain an Uber Pass, a user might be shown a page offering the pass (Landing Page), tap a button to get the pass (Get Pass), get sent to a purchase screen (Purchase Screen), tap a button to purchase the pass (Purchase), then be shown a screen indicating that the pass was successfully purchased (Purchase Success). Passing this sequence of events as a funnel YAML file into the Fontana library, an engineer could see the conversion rate throughout the entire flow.

漏斗YAML文件描述了用户作为流程的一部分而采取的具体步骤。例如,为了获得Uber通行证,用户可能会看到一个提供通行证的页面(Landing Page),点击一个按钮来获得通行证(Get Pass),被发送到一个购买屏幕(Purchase Screen),点击一个按钮来购买通行证(Purchase),然后显示一个屏幕,显示通行证已成功购买(Purchase Success)。将这个事件序列作为漏斗YAML文件传递到Fontana库中,工程师可以看到整个流程的转换率。

Figure 1: Sequence of events for purchasing an Uber Pass.

图1:购买Uber通行证的事件顺序。

In addition to simple sequences of steps like the one above, these funnel YAML files can potentially describe more complicated, nested step structures, which might include sequences of steps that are optional or repeated.

除了像上面这样简单的步骤序列外,这些漏斗YAML文件可以潜在地描述更复杂的、嵌套的步骤结构,其中可能包括可选的或重复的步骤序列。

SuperFlurry

超级大乱斗

SuperFlurry is the one-stop shop for creating and managing funnel YAML files, allowing engineers to create new files, as well as update existing files in production. The application also includes several quality-of-life features, such as the ability to look up mobile analytics event names on demand, as well as linking to the funnels dashboard, which displays the various funnels that exist across teams. YAML Generator builds upon the SuperFlurry application to provide engineers an alternative to writing funnel YAML files in raw YAML.

SuperFlurry是创建和管理漏斗YAML文件的一站式商店,允许工程师创建新文件,以及更新生产中的现有文件。该应用程序还包括几个生活质量功能,例如,能够按需查询移动分析事件名称,以及链接到漏斗仪表板,显示各团队存在的各种漏斗。YAML生成器建立在SuperFlurry应用程序的基础上,为工程师提供了一个替代用原始YAML编写漏斗YAML文件的方法。

Why YAML Generator?

为什么是YAML生成器?

YAML Generator provides engineers with a discrete and comprehensive set of options as they build their funnel YAML files. This contrasts with writing raw YAML files, where there is no set list of options.

YAML生成器为工程师在建立漏斗YAML文件时提供了一套离散而全面的选项。这与编写原始YAML文件形成了鲜明的对比,后者没有固定的选项列表。

Reduction of Human Error

减少人为错误

YAML Generator guarantees that a semantically and functionally correct funnel YAML file will be generated. In addition, it features built-in validation that catches invalid inputs as they occur. This contrasts with raw YAML files, where it’s very easy to write an invalid funnel YAML file and mistakes may be difficult to catch.

YAML Generator 保证生成一个语义和功能上正确的漏斗YAML文件。此外,它还具有内置的验证功能,可以捕捉到无效的输入。这与原始YAML文件形成鲜明对比,在原始YAML文件中,很容易写出一个无效的漏斗YAML文件,而且错误可能很难被发现。

Increase in Productivity

生产力的提高

YAML Generator streamlines the process through an easy-to-understand UI and provides the user with all the options and info needed to create a funnel, reducing the need to flip back and forth between writing a funnel YAML file and looking at the guide on how to create one. In addition, features such as the clear separation and organization of steps reduce cognitive load for engineers, leading to greater efficiency. 

YAML生成器通过一个易于理解的用户界面简化了流程,并为用户提供了创建漏斗所需的所有选项和信息,减少了在编写漏斗YAML文件和查看如何创建漏斗的指南之间来回翻转的需要。此外,诸如步骤的清晰分离和组织等功能减少了工程师的认知负担,从而提高了效率。

With YAML Generator, engineers can spend less time writing funnel YAML files and more time analyzing the data.

有了YAML生成器,工程师可以减少编写漏斗YAML文件的时间,而将更多时间用于分析数据。

YAML Generator Architecture

YAML生成器架构

We use Fusion.js, Uber’s open source, universal web framework, to create the application UI and Apollo to handle API calls through a GraphQL server. In addition, we use Base Web, Uber’s open source framework for React web components, to style the UI and provide consistency with other Uber applications.

我们使用Uber的开源通用网络框架Fusion.js来创建应用程序的UI和Apollo,以通过GraphQL服务器处理API调用。此外,我们还使用了Base Web,即Uber的React Web组件的开源框架,来设计用户界面并提供与其他Uber应用程序的一致性。

Backend: Apache® Thrift™

后台。Apache® Thrift™

We use Apache Thrift to define our APIs and Golang to implement them. For the purposes of this project, we created an API that provides full validation of the funnel YAML files and leveraged an existing API to fetch mobile analytics event names.

我们使用Apache Thrift来定义我们的API,用Golang来实现它们。为了这个项目的目的,我们创建了一个API,提供漏斗YAML文件的全面验证,并利用现有的API来获取移动分析事件名称。

Design Progression

设计进展

Over the lifetime of the YAML Generator project, the application UI has undergone many changes and improvements thanks to feedback from fellow engineers, shown below:

在YAML生成器项目的生命周期中,由于工程师同伴的反馈,应用程序的用户界面经历了许多变化和改进,如下所示。

Original Mockup

原始模拟图

Figure 2: Non-functional design created for this project’s design review document.

图2:为这个项目的设计审查文件创建的非功能设计。

Early-Stage Design

早期阶段的设计

Figure 3: Initial design focused on complete functionality over style.

图3:最初的设计着重于完整的功能而不是风格。

Mid-Stage Design

中间阶段的设计

Figure 4: Restyled and reorganized design inspired from feedback.

图4:在反馈意见的启发下,对设计进行了重塑和重组。

Design Released for Beta Testing

发布测试版设计

Figure 5: Frontend engineers were enthusiastic about the experimental “YAML Generator Playground,” which allowed users to see both the YAML Generator and raw YAML update in real time. To this end, we migrated the entire application to the playground and released that in beta in SuperFlurry.

图5:前端工程师对实验性的 "YAML生成器操场 "充满热情,它允许用户实时看到YAML生成器和原始YAML的更新。为此,我们将整个应用程序迁移到了操场上,并在SuperFlurry中发布了测试版。

Final Design

最终设计

Figure 6: Inspired by user feedback, several new features were added, including drag-and-drop steps and copy-to-clipboard.

图6:受到用户反馈的启发,增加了几个新的功能,包括拖放步骤和复制到剪贴板。

Special Features of the YAML Generator

YAML生成器的特殊功能

For funnel YAML files, steps are the building blocks of their functionality. To that end, the application makes it simple to visualize and arrange these steps with drag-and-drop lists, powered by Base Web.

对于漏斗YAML文件,步骤是其功能的构建块。为此,该应用程序在Base Web的支持下,通过拖放列表使这些步骤的可视化和排列变得简单。

Figure 7: Organization of steps in the final project design.

图7:最终项目设计的步骤安排。

Lists of Possible Attributes

可能的属性列表

In our aim to reduce complexity, we worked to provide engineers with a set list of options, rather than requiring them to know what they want beforehand. With that in mind, we created drop-down lists of possible attributes and options for every applicable field.

为了降低复杂性,我们努力为工程师提供一套选项清单,而不是要求他们事先知道自己想要什么。考虑到这一点,我们为每个适用的领域创建了可能的属性和选项的下拉列表。

Figure 8: Options given to users when adding a new step.

图8:添加新步骤时给用户的选项。

Quality-of-Life Improvements

生活质量的提高

To further improve ease of use and efficiency for engineers, we’ve launched an additional set of quality-of-life features:

为了进一步提高工程师的易用性和效率,我们推出了一套额外的生活质量功能。

  • Providing key info for engineers, reducing the need for external lookups
  • 为工程师提供关键信息,减少对外部查询的需求
  • Autocomplete functionality for applicable fields
  • 适用字段的自动完成功能
  • Highlighting invalid input for fields
  • 突出显示字段的无效输入
  • Complete editing suite, featuring functionality such as undo, copy-to-clipboard, etc.
  • 完整的编辑套件,具有撤销、复制到剪贴板等功能。

Figure 9: The funnel name ‘invalid+name’ includes the invalid character ‘+,’ so the field is highlighted red.

图9:漏斗名称'invalid+name'包括无效字符'+',所以该字段被标为红色。

Results and Learnings

结果和教训

This project was launched with the aim of alleviating the issue of complex input: specially formatted YAML files were time-consuming to create, and prone to user error. Through the YAML Generator application, we successfully provide a user-friendly interface that provides a streamlined, error-free method of producing funnel YAML files, which saves time and reduces errors. We hope that this application inspires other engineers to think critically about their workflows and simplify their own inputs wherever possible.

启动这个项目的目的是为了缓解复杂的输入问题:特殊格式的YAML文件在创建时很费时,而且容易出现用户错误。通过YAML生成器的应用,我们成功地提供了一个用户友好的界面,提供了一个精简的、无错误的方法来生成漏斗式YAML文件,从而节省了时间,减少了错误。我们希望这个应用程序能启发其他工程师对他们的工作流程进行批判性思考,并尽可能简化他们自己的输入。

Importance of the Revising Process and Feedback

修改过程和反馈的重要性

From draft to final product, there were many key changes and revisions. Some were powered through personal preference, but the most impactful and significant revisions were brought about through feedback. In the early to mid stages of the project, we frequently asked engineers specializing in frontend design for UI-related feedback, guiding the trajectory of the overall design. Then, during the late stages of the project, we launched YAML Generator in beta, allowing anyone to test the application and give additional feedback, inspiring further improvement. Without feedback, our application would not be where it is today.

从草案到最终产品,有许多关键的变化和修订。有些是通过个人喜好来实现的,但最有影响和最重要的修改是通过反馈来实现的。在项目的早期和中期,我们经常要求专门从事前端设计的工程师提供与用户界面有关的反馈,以指导整个设计的轨迹。然后,在项目的后期阶段,我们推出了YAML Generator的测试版,允许任何人测试该应用程序并提供额外的反馈,从而激发了进一步的改进。没有反馈,我们的应用程序就不会有今天的成就。

Conclusion

总结

Designing an application that addresses user pain points can be a very challenging task. The process of creating YAML Generator highlighted the importance of both simplifying input in improving user experience and feedback in making key incremental changes. With the rollout of YAML Generator, we’ve transformed the mobile data workflow process, making funnel creation more accessible and streamlined for all engineers at Uber.

设计一个能解决用户痛点的应用程序是一项非常具有挑战性的任务。创建YAML生成器的过程凸显了简化输入对改善用户体验的重要性,以及反馈对做出关键增量变化的重要性。随着YAML Generator的推出,我们改变了移动数据的工作流程,使Uber的所有工程师都能更容易地创建漏斗,并使之更加精简。

If you are interested in building leading edge applications to process incredible volumes of mobile data, please consider joining our team!

如果你有兴趣建立领先的应用程序来处理大量的移动数据,请考虑加入我们的团队。 团队!

We would like to provide big thanks to Xuan He, Wugang Zhao, An Yang, and Ricardo Villarreal. We also would like to thank the Mobile Data Platform team for providing support, and all engineers who helped test the application.

我们要向何璇、赵武刚、杨安和Ricardo Villarreal表示衷心的感谢。我们还要感谢移动数据平台团队提供的支持,以及所有帮助测试该应用程序的工程师。

Apache®, Apache Thrift, and Thrift are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. No endorsement by The Apache Software Foundation is implied by the use of these marks.

Apache®、Apache Thrift和Thrift是Apache软件基金会在美国和/或其他国家的注册商标或商标。使用这些商标并不意味着阿帕奇软件基金会的认可。

Lead image by Tumisu from Pixabay.

领导形象 作者 Tumisu 来自 Pixabay.

首页 - Wiki
Copyright © 2011-2021 iteam. Current version is 2.80.0. UTC+08:00, 2021-11-30 22:58
浙ICP备14020137号-1 $访客地图$