#32 - Mình đã giúp Co-Founder có được Peace of Mind bằng việc làm sản phẩm như thế nào?

Bài viết này mình sẽ kể câu chuyện mình đã giúp Co-Founder có được peace of mind bằng mindset/skillset làm sản phẩm như thế nào.

#32 - Mình đã giúp Co-Founder có được Peace of Mind bằng việc làm sản phẩm như thế nào?

Bài viết này mình sẽ kể câu chuyện mình đã giúp Co-Founder có được peace of mind bằng mindset/skillset làm sản phẩm như thế nào.


Context

Dương là Co-Founder của BPM, cũng là người trực tiếp phụ trách làm marketing, sales và operations cho khóa học. Một trong những công việc Dương làm thường xuyên đó là theo dõi các đơn đăng ký khóa học, kiểm tra xem một bạn có để lại LinkedIn profile không, gửi lời mời kết bạn qua LinkedIn, và tiếp nối cuộc trò chuyện từ đó cho đến khi bạn ấy chốt đơn và trở thành học viên chính thức.

Một ngày nọ, Dương nhắn lên group (có mình và Nam) như thế này:

Dương đột nhiên than LinkedIn Sales Navigator mắc quá

Ban đầu mình cứ tưởng Dương đang muốn dùng Sales Navigator để có thể xem được thông tin ai coi profile của mình, hoặc để outbound tìm những đối tượng tiềm năng cho khóa học trên LinkedIn. Nhưng khi mình hỏi kỹ hơn thì Dương nói rằng Sales Navigator là một cách Dương nghĩ có thể có Peace Of Mind.

Cụ thể ra sao, thì các bạn có thể đọc đoạn chạt dưới đây:

Dương đang có vấn đề về thiếu peace of mind

Mình đã bắt đầu thấy được một vấn đề mà Dương đang mắc phải. Với kinh nghiệm làm sản phẩm nhiều năm thì mình chợt lóe lên suy nghĩ "Có thể mình sẽ giải quyết được vấn đề này!"

Problem

High-level Problem Mapping

Tuy nhiên, trước khi đi vào giải pháp, thì chúng ta phải xác định rõ bài toán cần giải quyết là gì. Để hiểu đúng được cách mà Dương đang làm hiện tại, mình đã dùng một phiên bản biến tấu của workflow để diễn tả quy trình làm việc hiện tại của Dương, nhằm mục đích hiểu đúng được vấn đề đang xảy ra ở đâu.

Workflow hiện tại của Dương, kèm với vấn đề đang khiến cho bạn thiếu Peace of Mind (cái này mình vẽ nhanh tầm 10 phút nên là nó sẽ không chuẩn chỉnh 100% nhen)

Sau khi đã hiểu được quy trình hiện làm việc hiện tại, mình đã dùng Job Story để miêu tả lại situation, motivation và desired outcome của Dương khi Dương tìm kiếm LinkedIn Sales Navigator để giải quyết vấn đề của mình:

Job Story

Khi một bạn học viên tiềm năng đăng ký khóa học thông qua Google Form, và bạn ấy có để lại link đến LinkedIn profile, tôi sẽ gửi lời mời kết bạn qua LinkedIn để có thể follow up và giúp các bạn biết thêm về khóa học. Tuy nhiên, thường các bạn không accept ngay mà mấy ngày sau mới làm. Trong lúc đó thì tôi sẽ làm việc khác, tuy nhiên tôi thường thấp thỏm lo âu không biết rằng mình có bỏ lỡ thông báo trên LinkedIn không, vì tôi lo sợ việc bỏ lỡ đó sẽ ảnh hưởng tiêu cực đến trải nghiệm khách hàng.

Tôi muốn biết khi nào một học viên tiềm năng của khóa học chấp nhận lời mời của tôi trên LinkedIn mà không cần phải tự nhớ ra để đi kiểm tra.

Để tôi có thể chủ động follow up với bạn và từ đó có được peace of mind về việc không bỏ lỡ học viên nào

Tại sao LinkedIn Sales Navigator lại có thể giải quyết được vấn đề này? Với LinkedIn Sales Navigator, Dương có thể thoải mái gửi lời mời kết bạn qua LinkedIn kèm với một dòng chú thích ngắn bảo rằng Dương từ BPM. Khi bạn học viên tiềm năng chấp nhận lời mời, thì tin nhắn đó sẽ được chuyển vào inbox của Dương trên LinkedIn. Khi đọc lại lời nhắn của chính mình thì Dương sẽ biết được đây là một bạn học viên tiềm năng, và từ đó chủ động follow up tiếp. Với bản LinkedIn miễn phí, Dương bị giới hạn số lượng lời mời kết bạn kèm theo dòng chú thích, dẫn đến gặp lại vấn đề trên.

Use Case Mapping

Đây quả là một vấn đề, nhưng liệu nó có phải vấn đề mà mình nên dành thời gian để giải quyết không?

Feature Map là một kỹ thuật dùng để frame giá trị của một tính năng. Thay vì gọi nó là tính năng, thì ở đây mình sẽ chỉ gọi nó là use case thôi vì chúng ta chưa bàn đến solution. Use case ở đây chính là: chủ động follow up với các bạn học viêm tiềm năng và từ đó có được peace of mind về việc không bỏ lỡ doanh thu nào.

Vậy use case này có những tính chất về giá trị như thế nào?

Use Case Map

User Value. Giá trị cho người dùng, trong trường hợp cụ thể này là Dương, khá rõ ràng. Đặc biệt tần suất vấn đề này xảy ra khá thường xuyên khi mà khóa học của mình tuyển sinh liên tục. Về độ nghiêm trọng của nó, thì nó đã đủ painful để Dương đi tìm kiếm giải pháp, và sự thiếu peace of mind sẽ ảnh hưởng đến độ năng suất của Dương khi làm BPM hay Holistics.

Business Value. Nếu Dương bị bỏ lỡ một bạn học viên tiềm năng nào đó và quên follow up, điều đó cũng ảnh hưởng đến doanh thu của khóa học cũng như trải nghiệm khách hàng. Không ai muốn bị lãng quên và không được phục vụ khi chỉ mới bắt đầu tìm hiểu khóa học.

Strategic Value. Chiến lược của tụi mình đang là stress hệ thống vận hành hiện tại nhằm mục đích tìm ra các khiếm khuyết và cải thiện nó, để tránh việc phải tuyển thêm người để scale up. Nói cách khác, đó là giảm mực nước để cải thiện quá trình làm sản phẩm. Đây là một vấn đề vận hành mà càng ngày sẽ càng trầm trọng hơn khi tụi mình phục vụ nhiều người hơn, và vì vậy nó align về giá trị chiến lược cho khóa học.

Mình nghĩ đây là một vấn đề đáng để giải quyết.

Solution

Ideation & Evaluation

Trước khi tự bắt tay build 1 cái gì đó, thì tại sao không tìm xem có giải pháp nào trên thị trường giải quyết được đúng vấn đề này một cách trọn vẹn hay chưa?

Chúng ta đang xem xét bốn giải pháp khả thi mình đã suy nghĩ tới.

  • LinkedIn Sales Navigator cho phép Dương gửi không giới hạn yêu cầu kết nối kèm ghi chú. Khi ai đó chấp nhận, họ sẽ xuất hiện trong hộp thư của Dương, giúp Dương xác định các bạn học viên tiềm năng. Giải pháp này dễ sử dụng nhưng khá đắt, khoảng 2 triệu đồng một tháng, và có nhiều tính năng không cần thiết cho nhu cầu cụ thể này.
  • Các giải pháp CRM với tích hợp LinkedIn thường cung cấp giao diện để lưu trữ cơ sở dữ liệu về khách hàng tiềm năng, và thông báo khi có người chấp nhận kết nối trên LinkedIn. Mặc dù có thể giải quyết vấn đề, nhưng đây là giải pháp trả phí và cũng có thể bao gồm nhiều tính năng không cần thiết. Mức phí của các CRM có nhiều lúc còn cao hơn cả LinkedIn Sales Navigator.
  • Xây dựng LinkedIn integration với API của LinkedIn có thể là một giải pháp có độ chính xác cao. Nếu làm được thì mình tưởng tượng integration đó sẽ đọc hồ sơ LinkedIn của một bạn học viên tiềm năng từ Google Sheet và thông báo khi bạn ấy có chấp nhận kết nối. Tuy nhiên, điều này có rủi ro cao về tính khả thi do API của LinkedIn nổi tiếng khó sử dụng và có thể không hỗ trợ đầy đủ các chức năng cần thiết. LinkedIn càng có
  • Sử dụng AppScript + LinkedIn + Gmail + Sheet là một solution miễn phí và có thể giải quyết chính xác vấn đề này. Nó bao gồm việc config LinkedIn để gửi email khi có chấp nhận kết nối, sử dụng AppScript để đọc các email chấp nhận kết nối gần đây và kiểm tra URL LinkedIn xem có trùng khớp với URL mà các bạn học viên tiềm năng để lại trong Google Sheet không. Rủi ro về tính khả thi ở mức trung bình, nhưng vẫn còn một số câu hỏi cần làm rõ về cách AppScript có thể nhận diện chính xác email chấp nhận từ LinkedIn và liệu email này có chứa URL hồ sơ LinkedIn hay không.

Low-level solution

Trước khi vào làm solution, thì mình dùng Activity Diagram để mường tượng ra cách nó sẽ hoạt động như sau:

Activity Diagram miêu tả solution theo mình hình dung(Again là mình vẽ cái này có 10 phút à nên nó không phải chuẩn chỉnh 100% nha)

Việc vẽ Activity Diagram giúp cho mình nhận ra một số bước rủi ro: liệu AppScript có xác định được LinkedIn URL từ email chấp nhận kết nối hay không, và liệu LinkedIn URL đó có giống với cái các bạn thường để lại trong Google Sheet hay không?

Sau một hồi qua lại với Claude, mình đã xác nhận được AppScript có thể xác định chính xác email chấp nhận lời mời từ LinkedIn bằng cách đọc Gmail Inbox. AppScript có thể đọc được LinkedIn URL mà bạn học viên tiềm năng để lại trong Google Sheet. Với hai nguồn thông tin đó, AppScript có thể xác định được liệu bạn học viên tiềm năng đó đã chấp nhận lời mời kết bạn của Dương trên LinkedIn chưa.

Nó sẽ work như thế này:

AppScript LinkedIn Automation walkthrough

Nếu mọi người tò mò về AppScript nhìn như thế nào:

function checkLinkedInAcceptances() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Signup'); // Update with your sheet name
  var data = sheet.getDataRange().getValues();
  var leads = {};

  // Store your own LinkedIn profile URL
  var myProfileUrl = 'https://www.linkedin.com/in/linkedin-cua-duong'; // Replace with your actual profile URL
  var normalizedMyProfileUrl = normalizeUrl(myProfileUrl);

  // Build a map of normalized profile URLs to lead information
  for (var i = 1; i < data.length; i++) {
    var profileUrl = data[i][5].trim(); // Assuming profile URL is in column 2 (index 1)
    var normalizedUrl = normalizeUrl(profileUrl);
    leads[normalizedUrl] = data[i]; // Store the entire row data if needed
  }

  // Search for LinkedIn acceptance emails
  var threads = GmailApp.search('from:invitations@linkedin.com "start a conversation with your new connection" newer_than:1d');
  var notifiedUrls = [];

  threads.forEach(function(thread) {
    var messages = thread.getMessages();
    messages.forEach(function(message) {
      var body = message.getBody();
      var profileUrlsFromEmail = extractProfileUrlFromEmail(body);
      if (profileUrlsFromEmail && profileUrlsFromEmail.length > 0) {
        profileUrlsFromEmail.forEach(function(profileUrl) {
          var normalizedUrl = normalizeUrl(profileUrl);
          if (normalizedUrl !== normalizedMyProfileUrl && leads[normalizedUrl] !== undefined && notifiedUrls.indexOf(normalizedUrl) === -1) {
            // Send a notification email
            MailApp.sendEmail('emailcuaDuopng@gmail.com', 'New BPM lead accepted your LinkedIn request', 'LinkedIn Profile: ' + normalizedUrl);
            notifiedUrls.push(normalizedUrl); // Keep track to avoid duplicate notifications
          }
        });
      }
    });
  });
}

function extractProfileUrlFromEmail(emailBody) {
  // Use regex to find LinkedIn profile URLs in the email body
  var urlRegex = /(https?:\/\/[^\s"']*linkedin\.com\/(?:[^\s"'/]+\/)*in\/[^\s"'<]+)/gi;
  var matches = emailBody.match(urlRegex);
  if (matches && matches.length > 0) {
    return matches;
  }
  return null;
}

function normalizeUrl(url) {
  // Remove query parameters and convert to lowercase
  var normalized = url.split('?')[0].toLowerCase();
  // Remove 'www.' prefix if present
  normalized = normalized.replace('www.', '');
  // Remove country prefixes and intermediate paths before '/in/'
  normalized = normalized.replace(/https?:\/\/(?:[a-z]{2,3}\.)?linkedin\.com\/(?:[^\s"'/]+\/)*in\//, 'https://linkedin.com/in/');
  // Ensure the URL ends with a '/'
  if (!normalized.endsWith('/')) {
    normalized += '/';
  }
  return normalized;
}

Impact

Sau khi để AppScript chạy một tuần, thì Dương bảo mình nó đã giúp Dương có được Peace Of Mind.

Dương đã tìm lại được peace of mind với solution náy!
Mới hôm nay Dương lại bảo mình là nó work again =))

Mình rất vui mừng vì solution mình đã giải quyết vấn đề tốt. Hơn thế nữa, mình vui vì đã tạo ra được giá trị cho Dương =))

Kết luận

Hy vọng thông qua bài viết này, bạn đã có thêm một điểm dữ liệu về cách làm sản phẩm trong thực tế. Đừng bị xao nhãng bởi những high-level work như strategy hay vision. Những công việc đó đòi hỏi ngữ cảnh nền phải rất chắc chắn về sản phẩm, khách hàng, công ty và thị trường. Bạn không thể nào xây được những ngữ cảnh bao quát đó một cách vững chãi nếu không tập trung tạo giá trị cục bộ trước. Thay vào đó, hãy tập trung vào việc trạo ra giá trị thường xuyên, để xây dựng ngữ cảnh nền tảng và niềm tin của những người làm cùng với bạn. Khi đã đủ ngữ cảnh cũng như niềm tin rồi, thì đó là lúc bạn nên tập trung phát triển khả năng tạo giá trị ở phạm vi lớn hơn.

Interactive Web App

Read more