Nhu Nguyen

Product Designer

available for work

Nhu Nguyen

Product Designer

Nhu Nguyen

Product Designer

Nhu Nguyen

Product Designer

Streamlining Request Management in Notion Through Automation

Company

Zalo

Company

Zalo

Company

Zalo

Year

2024

Year

2024

Year

2024

Timeline

4 weeks

Timeline

4 weeks

Timeline

4 weeks

Contribution

Design Ops, Database Restructure

Contribution

Design Ops, Database Restructure

Contribution

Design Ops, Database Restructure

When I first joined the design team at Zalo, internal task management was quite chaotic, making it difficult to accurately assess the team's workload and achievements. After about a year of working, closely observing, and understanding the overall situation, I took the initiative to restructure the task and workflow management system.

Increase accuracy of tracking workload
Increase accuracy of tracking workload
Increase accuracy of tracking workload
Automate entire workflow
Automate entire workflow
Automate entire workflow
Decrease time for getting report
Decrease time for getting report
Decrease time for getting report

Disclaimer: Due to confidentiality commitments, the illustrative examples in these case studies are simulations based on my work at Zalo rather than real data.

Story behind

When I first joined the Design team at Zalo, I experienced a bit of culture shock because everything was far from what I had imagined about the operations of a decade-old product company under a large corporation like VNG.

In terms of operations, the company did not follow Scrum methodology or run design sprints like some other corporations. Instead, it operated on a project basis, with project timelines estimated and managed by the Product Owner.

Regarding team organization, it somewhat resembled the squad-based structure many product companies currently adopt (here referred to as "verticals," though I'll use "squads" for simplicity). However, one notable difference compared to other companies' squad models was that UX did not collaborate closely with Product and Developers. We functioned as a separate UX team (a service model), receiving requests from Product when they decided on a project. Internally, the UX team would assign a primary designer to each squad. This means there was always a default designer for requests from a particular squad, but that designer might not always handle the tasks.

In short, Product communicated and worked with the UX team through a unique model, separate from Developers and Testers – designers were not truly members of those squads.

These reasons made task and workflow management at Zalo, especially for designers, quite complex since there was no single source of truth (SSOT) for all teams. However, I understood that every company has its own culture. Therefore, I spent about the first six months observing and following how things were done.

define

Status Quo

At that time, the UX team consisted of three main roles:

  • UX Designer

  • UX Writer

  • Visual Designer

We used Notion as the primary tool for managing tasks and documentation. As mentioned above, we received requests from the Product Owner (PO), who had a dedicated page on Notion to detail their requests. The PO would then send the link to the Design Lead for review and task assignment. Additionally, there were separate pages for Projects and Tasks. The workflow is illustrated in the diagram below.



As seen in the diagram above, there are three main databases: Requests, Projects, and Tasks. In the ideal model the team aimed for, multiple large projects would encompass several smaller requests, each of which would be broken down into tasks assigned to specific roles such as UX Designer, UX Writer, and Visual Designer. These tasks could be further divided into more granular actions like drawing flows, wireframing, creating IA, and mapping content flows, as illustrated in the diagram below.


Problems

An overview of the current operations and management reveals that while this follows a basic Project Management model, it becomes ineffective when combined with the team and organizational culture in practical application.

I attempted to follow this process strictly according to documented guidelines while also observing and surveying how team members actually worked. Through this, I identified several key issues:

  1. Team members often created a separate project for each request, even if multiple requests were part of the same flow. For example, if there were two requests related to revamping Flow A, instead of having a single project "Revamp Flow A" with requests A1 and A2, they would create two separate projects, A1 and A2. Even if A2 required only a minor revision, this fragmented documentation and meeting notes, making it difficult for later handovers to track what had happened in each project.

  2. Due to high workloads and tight deadlines, leaders rarely paid attention to specific tasks being handled by team members. Instead, they focused on the overall completion time and deliverables, rendering the "Tasks" page almost unused. This, coupled with the issue mentioned above, led to repeated inefficiencies in the team’s workflow.

  3. Team members were required to manually update information excessively, often duplicating redundant steps. As a result, most members did not proactively update their work unless explicitly asked to do so.

  4. Both the PO and team members created numerous "ghost" requests and projects, with no one assigned to filter or manage them. This resulted in significant discrepancies whenever summary reports were generated, making it nearly impossible to quantify the workload or measure individual and team contributions within the company's structure.


All fields had to be manually adjusted. Since processing a request went through multiple stages, team members didn't have the time to continuously update the status. As a result, whenever Product wanted to track progress, they had to ask the Design Lead directly, causing unnecessary distractions to ongoing work.

solutions

After identifying the key issues, I started thinking about immediate actions that could have a significant impact. After researching management models used by large companies and gathering feedback from team members, I decided to focus on one key concept: automation.

I realized that most of our problems stemmed from a lack of resources and time for task management. While important, task management was usually only given attention during quarterly, monthly, or yearly work reviews. We did not want to allocate a dedicated headcount solely for managing these processes. Therefore, the best solution was to automate as much as possible, minimizing manual tasks for team members while still ensuring data accuracy.


The above is a simulation of the newly improved request page. I consolidated all the necessary information onto this page instead of spreading it across multiple databases like Tasks, which previously caused unnecessary fragmentation. I documented and clearly communicated the responsibilities of each party involved:

  • Product Owner: Creates a new request, filling in all necessary details such as Request Name, Type, and Domain, along with specific request content. Once ready, they copy the request link and send it directly to the Design Lead.

  • Design Lead: Reviews whether the request meets the necessary criteria. We have specific standards to determine whether a request is valid, but these will not be covered in this case study. Once confirmed, the Design Lead marks it as Valid and assigns a Designer/Writer to handle the request.

  • Designer/Writer: Fills in their name under UXD/UXW upon assignment. Once the request is completed, they mark it as Done.

As you can see, I have streamlined the steps required to manage a request to the bare minimum. The remaining processes have been automated using Notion Formula to reduce manual workload and ensure efficiency.


if
(
  empty(prop("Type*")), style("Fill type", "red", "red_background", "c"),
  if
  (
    empty(prop("Domain*")), style("Fill domain", "red", "red_background", "c"),
    if
    (
      not prop("Valid?"), style("In review", "yellow", "yellow_background", "c"),
      if
      (
        and(empty(prop("UXD")), empty(prop("UXW"))), style("In queue", "yellow", "yellow_background", "c"),
        if(prop("Done?"), style("Done", "green", "green_background", "c"), style("In progress", "blue", "blue_background", "c"))
      )
    )
  )
)

I implemented Notion formula to automate request status updates based on specific conditions:

  • If the Product Owner (PO) fails to provide required details such as Domain or Type, the status is set to Warning, prompting them to complete the missing information.

  • Once all required information is provided, the request moves to In Review.

  • If the Design Lead validates the request and marks it as Valid but has not yet assigned an executor due to team overload, the status automatically updates to In Queue.

  • When a Designer or Writer fills in their name to confirm assignment, the status changes to In Progress.

  • Once the assigned person marks the request as completed by ticking Done, the status updates to Done.

By automating this process, we significantly reduce manual intervention while ensuring an efficient and transparent workflow.

Below is a video demonstration of how this formula works. Pay attention to how the status changes with each action I perform on the request.



What about the issue of ghost requests? I spent considerable time thinking about how to address this problem. Given that we usually require a quarterly report, this is typically the moment when data needs to be filtered. As seen above, I introduced a final boolean property called "Archived", which I automated using a Notion formula.


if(and(not prop("Valid?"), dateBetween(now(), prop("Requested Date"), "days") > 90), true, false)

This formula ensures that if a request is not approved (i.e., not marked as Valid) and more than 90 days have passed since its creation, it is automatically moved to Archived. It is then filtered out from the All tab and placed into the Archived tab. This keeps the data clean and eliminates the need for manual request filtering every quarter during reporting periods. If a request needs to be reactivated, the PO simply needs to confirm with the Design Lead, who can review and mark it as Valid.