Từ con số 0 tới sản phẩm đầu tiên: Vibe Coding & Debugging

[TL;DR]: Đây là series mà mình ghi lại những dự án mà mình làm để thật sự hiểu được mình đã làm cái gì và mình rút ra được cái gì từ đó. Và bài này là về việc mình xây dựng app Unlock giúp cho người học có thể đo lường thời gian học một kỹ năng mới với cột mốc là 20 giờ. Ngoài ra app còn giúp người dùng đặt mục tiêu rõ ràng, kèm reflection bắt buộc sau mỗi phiên học. App được mình xây dựng nhờ sử dụng Bolt, ChatGPT, Supabase, Netlify, và Github. Bài học quan trọng nhất mình rút ra được là: Muốn xây dựng sản phẩm. PHẢI BIẾT CODE nếu không muốn dành hàng giờ ngồi fix bug.

The Awaken – Sự tỉnh thức

Là sinh viên là một đặc quyền. Và cơ hội thì luôn mở cửa chào đón những tinh thần ham học hỏi và không ngại thử mình. Hãy tận dụng thời gian này để làm cho tuổi trẻ thật sâu sắc và đáng nhớ.

Mình luôn tin khoảng thời gian là sinh viên là khoảng thời gian mà mình có thể trải nghiệm, học, và làm một cách tự do nhất mà không có rào cản nào có thể ngăn mình khám phá dòng chảy kiến thức ngoài kia.

Và để cho tuổi trẻ của mình trở nên đáng nhớ hơn, và cũng phải nói rằng để cho nhà tuyển dụng nhớ về mình nhiều hơn; mình đã làm dự án, học chứng chỉ, làm tình nguyện, và thi startup. 2 năm qua, từ ngày mình trở thành tân sinh viên, là những ngày tháng thử sức và vươn mình ra khỏi những bài học ở trong trường lớp.

Và mình học được nhiều thứ.

NHƯNG, mình cũng nhận ra một thiếu sót lớn của mình, mà mình nghĩ là cực kì quan trọng, đặc biệt với những bạn hustle chạy 2-3 dự án cùng lúc (mình thì không extreme như vậy) đó là việc phản tư (reflect) những gì mình đã làm, và bài học quan trọng nhất mà mình rút ra được từ đó là gì.

Vì thế nên đây sẽ là series mà mình sẽ nhìn và ghi lại những hành trình mình đã đi qua – qua đó hi vọng không chỉ mỗi bản thân mình được học, mà còn là các bạn sinh viên khác, và nhà tuyển dụng để hiểu về điều em làm hơn.


The Context – Bối cảnh

2 tháng self-learn vừa qua, CÒN CÁI QUÁI GÌ ĐỌNG LẠI TRONG MÌNH VẬY?

Bản thân mình thấy mình là một người thích khám phá những điều mới lạ và học theo những điều đó (không thể nói rằng không có chút FOMO); mình học qua sách – vì ai cũng nói sách là kho tàng tri thức được dày công nghiên cứu bởi các chuyên gia, nhà khoa học, và giáo sư hàng đầu trong lĩnh vực của họ; mình học qua Youtube – vì ai cũng nói đây là thư viện của những khoá học miễn phí; mình học qua online platform (Udemy, Coursera,…) – vì ai cũng nói ở đây là nơi tổng hợp của những kĩ năng hàng đầu.

Việc mình tiếp xúc với một khối lượng kiến thức đáng kể hằng ngày khiến mình cảm thấy “productive” và không bị bỏ lại phía sau với các bạn đồng trang lứa.

Tuy nhiên, khi liên tục với push bản thân như vậy, mình cũng nhìn ra một số những “mặt tối” khi chúng ta phát triển sai cách.

  1. Mình cảm thấy ngày hôm đó sẽ thật tồi tệ nếu mình không kiếm được kiến thức hay điều gì đó hay ho và mới mẻ.
  2. Mình cảm thấy burn out, stress, các mối quan hệ dần trở nên tệ đi với người thân, và bạn bè.
  3. Thời gian sài lap là xấp xỉ ~10 tiếng/ngày, nhưng liệu một nửa trong số đó có thật sự nằm ở việc “tìm” và “học”?
  4. Cuối cùng, wtf is on my mind right now?

Đây là cái “tipping point” để mình nhận ra, mình đang học và tiếp thu kiến thức một cách toxic và sáo rỗng. Cái cảm giác “sướng” khi tiếp xúc hoặc nghe một điều gì đó mới là một dopamine tồi, và nó khiến cho cán cân của mình bị lệch đi khá nhiều.

Và đây là lúc mình biết, mình phải làm một cái gì đó khác, một cái vừa giúp mình giải quyết được vấn đề của mình, và vừa giúp mình xây dựng thêm một dự án hay ho.


The Exploration

Việc nhận định ra được “problem” mình đang gặp phải và thật sự nghĩ về nó là một chuyện. Vì việc bắt tay vào LÀM nó thì đòi hỏi sự quyết tâm hơn, và kỉ luật hơn rất nhiều.

Zero to One is always challenging right?

Ngoài ra, nó cũng làm mình nhớ về model mà mình đã học lỏm được từ Breaking into Product Management, về việc một hành động (behavior) nào đó của ta chỉ xảy ra khi có sự xuất hiện của 3 yếu tố này: Motivation (Động lực), Ability (Khả năng), và Prompts (Tín hiệu). Và nếu một trong 3 yếu tố này quá thấp, thì không có hành động nào sẽ xảy ra, và cũng chẳng có gì sẽ thay đổi.

Fogg’s Behavior Model từ Dr. Fogg, Stanford

Ở thời điểm đó, trong trường hợp của mình, mình nhận thấy:

  1. Mình có động lực khá cao về vấn đề này. Vừa để giải quyết vấn đề của bản thân, vừa có việc làm để thời gian trôi qua không bị lãng phí.
  2. Tuy là có động lực cao, nhưng khả năng của mình thì không có. Mình không biết nhiều về coding, mặc dù cũng có được tiếp xúc với Python, và SQL. Với những tiếp xúc cơ bản ấy, mà giờ phải thử build một cái prototype thì thật sự overwhelmed.

P/s: Nói đến đây, mình ngẫm lại thì mình có thể làm tốt hơn nhiều và rằng việc không có khả năng đôi khi không quá quan trọng. Vì,…

Nếu mình chịu mở lời, tìm kiếm sự giúp đỡ từ network của mình thì có lẽ câu chuyện đã khác. Trong một số dự án startup trước đó, mình được kết nối với các anh/chị học về AI và vì học AI nên chắc một phần nào đó họ cũng biết code, và có nhiều kinh nghiệm hơn mình ở lĩnh vực này.

Nếu nhờ sự giúp đỡ và thuyết phục được họ tham gia dự án với mình thì mình tin là mình còn có thể học được nhiều hơn nữa.


  1. Việc thiếu prompts để trigger cái mong muốn của mình cũng là 1 yếu tố khiến cho idea “tỉ đô” này chỉ nằm trên giấy.

Fast forward

Bẫng 1 khoảng thời gian, cả thế giới (hoặc một vài cá nhân) cảm thấy hứng thú vì một khái niệm mới xuất hiện, và nó trở thành một hiện tượng – VIBE CODING

I Revolted Against “Vibe Coding” — Until I Realized I'd Been Doing It All  Along | by Hailey Quach | Medium
Source: Medium

Việc Vibe coding trở nên rầm rộ, cùng với sự xuất hiện của các ứng dụng hỗ trợ xây dựng sản phẩm dùng AI như Bolt, Loveable, replit,… đã giúp làm tăng Ability của mình lên trong hành trình xây dựng một sản phẩm nho nhỏ cho bản thân.

Và nó cũng đồng thời là một cái prompt khiến mình nhận ra rằng đây là một cơ hội thật sự cho những người biết nắm bắt xu thế hiện tại.

Và khi 3 yếu tố này đồng thời xuất hiện.

BUMP.

I will make a $100,000 MRR application with zero coding knowledge by using AI. hahaha.


The Research – Vấn đề này có mỗi mình có thôi sao?

Khi bắt đầu một cái gì đó mới, mình luôn cảm thấy rào cản là rất lớn. Nó có thể không chỉ nằm ở mặt khả năng, mà đôi khi nó nằm ở niềm tin.

Mình có thật sự tin vào sản phẩm này không?

Và câu hỏi lớn hơn là…

Có ai ngoài mình tin vào sản phẩm này không?

Và chỉ có 1 cách duy nhất để biết được đó là nghiên cứu thị trường.

Desk research

  1. Nhiều sinh viên khi đặt nhiều effort vào việc học nhưng không thấy được kết quả ngay lập tức (immediate results) cảm thấy bị chán nản vì không thấy được tiến độ học tập của mình

—> Điều này giúp mình hướng tới một cái app có thể ghi lại quá trình học tập, cụ thể là số giờ mà người học đã bỏ ra trong quá trình học tập.

Về mặt này, thì đa phần các app pomodoro thông thường cũng có, nó giúp người học ghi lại lịch sử học, và cũng ghi lại thời gian. Vì thế không thể nói đây là điểm khác biệt và là lợi thế cạnh tranh của app

Ở đây, mình có làm khác đi một chút, lúc đang suy nghĩ về vấn đề này, mình có nhớ lại một bài TED talks đã nghe từ lâu, về việc học môn kĩ năng mới thì sẽ tốn bao lâu?

Bài này được trình bày bởi ông Josh Kaufman với tiêu đề “The first 20 hours — how to learn anything”

So, by pre-committing to practicing whatever it is that you want to do for at least 20 hours, you will be able to overcome that initial frustration barrier and stick with the practice long enough to actually reap the rewards.

Vì vậy, để cho app khác đi một chút, chứ không dám nói đây là lợi thế gì cả, thì mình áp dụng nguyên tắc 20 giờ để học bất cứ thứ gì ở mức độ beginner cho một kỹ năng bất kì mà người học muốn trau dồi, đó có thể là coding, BA/PM, SAT, GMAT, guitar, ukelele, writing,…

  1. Trong 1 số nghiên cứu khác, họ cũng chỉ ra rằng các bạn học sinh/sinh viên không đặt ra mục tiêu rõ ràng cho mỗi lần học thì thường sẽ bị struggle, bị phân tâm, cũng như có nhìn nhận rằng quá trình học của mình không được tốt.

—> Với thông tin này, mình cũng mong muốn phát triển tính năng đặt mục tiêu SMART ngay từ đầu, để người học có thể nhìn nhận rõ mục tiêu của mình là gì nếu trong quá trình học họ cảm thấy lạc lõng, và quên mất mục tiêu vì sao mình bắt đầu.

5 câu hỏi được dùng để giúp user đặt SMART goal là:

  1. What do you want to learn?
  2. How will you measure success? – Xác định xem như thế nào là ổn (i.e. pass exam, có portfolio,…)
  3. How much time can you commit?
  4. Why is this important to you?
  5. When do you want to complete it?
  6. Trong một số nghiên cứu khác, tác giả chỉ ra rằng các học sinh/sinh viên đều hiểu rõ tầm quan trọng của việc reflection và 85% đồng ý rằng nó giúp họ học tốt hơn. Tuy nhiên, vấn đề là khi nó không còn là một điều bắt buộc, tỉ lệ phản tư sau mỗi lần học cũng giảm theo

—> Mình cũng add tính năng reflection sau mỗi session học để người dùng có thể viết joural lại, nhưng cũng cố gắng tối ưu phần này, tránh không mất quá nhiều thời gian, làm khó người dùng vì sẽ tăng friction dẫn đến tình trạng user chọn skip journal.

Vì vậy hiện tại, sau mỗi lượt học, người dùng sẽ thấy 1 pop-up viết reflection cho phần học vừa rồi gồm 3 câu hỏi chính.

  1. What did you learn today? (Bạn học được gì trong buổi học này?)
  2. What went well, and what could be better? (Có chuyện gì tốt, và chuyện gì cần cải thiện thêm trong tương lai?)
  3. What do you plan to learn in the next session? (Bạn dự định sẽ học gì vào lần sau?)

Mục đích của câu hỏi số 3 này, 1 phần sẽ giúp cho người học nghĩ trước về việc mình sẽ học gì vào lần sau, qua đó sẽ giúp tiến trình học trở nên thuận lợi hơn.

Primary research

Ngoài việc làm desk research, mình cũng có thực hiện một khảo sát nhỏ dành cho vòng tròn network của mình, những người thân thiết. Số lượng thì không phải quá nhiều, khoảng 30 người. Tuy nhiên, việc có thêm phần này cũng khiến mình tự tin hơn và cũng nghĩ rằng sẽ có những thông tin thú vị hơn và chính xác hơn so với việc làm desk research.

Một vài câu mà mình có hỏi để validate lại suy nghĩ của mình:

  1. On average, how many hours do you think it takes you to feel comfortable as a beginner in a new skill? | Theo bạn, trung bình cần bao nhiêu giờ học để cảm thấy tự tin ở mức cơ bản với một kỹ năng mới?

—> 34.6% người khảo sát trả lời rằng họ nghĩ khoảng thời gian đó sẽ rơi vào khung 10-20 giờ

Shortcut từ data khảo sát
  1. Have you ever measured or tracked the time you spent practicing a skill? | Bạn đã từng đo lường hoặc theo dõi thời gian học/luyện tập kỹ năng chưa?

—> 70% trả lời có còn 30% thì không.

Nối tiếp câu hỏi này, mình muốn biết cụ thể hơn họ đang dùng phương pháp nào để đo lường thời gian học tập/rèn luyện của họ.

  1. If yes, what method did you use to track your learning time? | Nếu có, bạn đã sử dụng cách nào để theo dõi thời gian học?

—> xấp xỉ 50% người dùng sử dụng ứng dụng di động để đo lường kết quả


P/s: Ở đây, khi khảo sát xong mình cũng nhận thấy một thiếu sót mà mình nghĩ có thể làm tốt hơn, đó chính là đào sâu hơn về việc họ đang sử dụng ứng dụng nào, và họ có sử dụng nhiều hơn 1 ứng dụng để đo lường hay không?

Việc đặt thêm câu hỏi đó sẽ giúp mình thu hẹp được phạm vi các “đối thủ cạnh tranh” để thuận lợi cho việc phân tích sau này, thay vì phải mò mẫm và thử nhiều các app khác nhau.


Tiếp theo, với finding từ desk research rằng việc không thấy được tiến độ học tập của mình khiến các bạn HS/SV cảm thấy chán nản (discouraged). Vậy thì mình đặt ra một câu hỏi là: Liệu họ có cảm thấy có động lực hơn (motivated) khi đo lường/nhìn thấy quá trình học tập của mình không? (sử dụng thang đo từ 1-7)

—> Hơn 80% người khảo sát cho từ điểm 5 trở lên và có mean là 5.12

Mình copy paste từ google form cho nhanh. Nếu sếp muốn em vẽ lại chart thì em vẫn làm được nha 🙁

Đó là một vài câu hỏi điển hình trong phần khảo sát của mình.

Và tiếp tục, mình vẫn nghĩ nếu tốt hơn, mình nên có thêm 1-2 câu hỏi nữa để hiểu rõ hơn về việc viết reflection của người khảo sát sau quá trình học tập của họ, qua đó làm rõ hơn những thông tin mà mình thu thập được.

—> Bài học rút ra: Vào những lần sau, mình phải tối ưu các câu hỏi khảo sát hơn, mà dặc biệt là phải có pilot test trước cho 4-5 người để họ góp ý, qua đó mình sẽ chỉnh sửa thêm cho phù hợp và release bảng hoàn chỉnh.


Phân tích đối thủ cạnh tranh

Phải thừa nhận ngay từ đầu là phần này mình làm chưa được tốt lắm. Và việc xác định đâu là đối thủ cạnh tranh là các ứng dụng như thế nào cũng là một vấn đề, liệu nó là các app pomodoro, hay là các app viết journal, hay là những app khác mà mình chưa cover được?

Mình có thử tải các ứng dụng dạng pomodoro dành cho việc học tập như forest, focus plant, study bunny,…

Và bản thân mình cũng là người sử dụng app ghi chú, và cụ thể là Notion

Tóm lại, mình rút ra được ý cơ bản sau:

Các app Pomodoro chỉ tập trung vào thời gian, còn các app ghi chú lại quá phức tạp. Dường như không có gì kết nối được việc ‘học’ và việc ‘suy ngẫm’ (reflection) một cách đơn giản.


Problem Statement

“Người học cần một công cụ đơn giản để vừa theo dõi thời gian học tập một cách chủ động, vừa có không gian để suy ngẫm và ghi lại những gì đã học, giúp việc học trở nên sâu sắc và có mục đích hơn.”

Mục tiêu cốt lõi của mình là giúp người học, HỌC MỘT CÁCH CÓ CHỦ ĐÍCH – Learning with purpose.


Job to be Done

Vậy thì mục tiêu cốt lõi mà người dùng muốn đạt được là gì?

Theo mình, nó không chỉ nằm ở việc cảm thấy mình đang tiến bộ hằng ngày, và học được sâu hơn thông qua việc đặt mục tiêu rõ ràng, và reflect sau mỗi buổi học.

Mà nó còn là, theo lời từ Josh Kaufman:

In the beginning of learning anything new, you feel really stupid.

So the major barrier’s not intellectual, it’s emotional.

Việc học đối với mình không phải là chuyện ngày một, ngày hai, mà nó là cả một quá trình mà mình phải nhìn vào và xây dựng nên một hệ thống giúp mình học một cách tiến bộ, thay vì tập trung vào việc đạt được mục tiêu A,B, hay C.

JTBD ở đây không chỉ nằm ở functional – về việc cụ thể người dùng muốn làm mà nó còn nằm ở emotional – việc mà họ cảm thấy như thế nào trong và sau quá trình học tập trên app.

Và ngoài ra, social job cũng là một yếu tố quan trọng về việc người dùng muốn nhìn nhận, và muốn chia sẻ như thế nào về hành trình của mình. Vì dù sao, Việt Nam cũng là một quốc gia thiên về collectivism (Tính đồng loại)


The Blueprint – Những bước đầu tiên

Sau khi xác định được vấn đề cốt lõi, mình bắt đầu hình dung về người dùng của app. Mình đặt mình vào vị trí của họ và viết ra một vài câu chuyện đơn giản để định hướng cho việc thiết kế. Ví dụ:

As a university student preparing for final exams,
When I finish a long study session,
I want to quickly jot down the key concepts I’ve learned and any questions I still have,
So that I can feel a sense of progress and easily review what’s important later.

“Câu chuyện này đã giúp mình nhận ra rằng tính năng ‘ghi nhật ký’ (journaling) không chỉ là một ô để gõ chữ. Nó phải được tích hợp liền mạch ngay sau khi kết thúc một phiên học, như một phần tự nhiên của quá trình, để giúp người dùng ‘chốt lại’ kiến thức.”

As a self-learner studying a new skill online,
When I plan my week,
I want to track how many hours I actually spend on my courses versus how much I planned,
So that I can hold myself accountable and adjust my schedule realistically.

“Và câu chuyện này đã củng cố quyết định rằng tính năng ‘theo dõi thời gian’ (time tracking) phải thật đơn giản và trực quan. Nó không chỉ là một cái đồng hồ bấm giờ, mà là một công cụ giúp người dùng đối diện với thực tế và quản lý cam kết của bản thân.”

Với việc nghĩ ra một vài job stories như trên, mình bắt đầu sử dụng prompt và dùng Bolt để bắt đầu đặt những nền móng đầu tiên cho ứng dụng – Unlock – của mình.


P/s: Ở đây, khi nhìn lại mình biết là mình có skip qua 1 bước khác khá là quan trọng đó chính là wireframing/prototype. Thật ra mình cũng có thử sketch một vài ý tưởng lên Figma nhưng well, honestly nó không work tốt lắm như mình tưởng, vì mình còn khá mơ hồ về cái app “thành công” của mình


The Build – Tay mình dính bùn

Đến giai đoạn này rồi, thì việc chủ yếu của mình là trò chuyện cùng AI để cùng nó build lên một cái prototype ổn cho mình thôi.

Tech stack

Front end: Bolt

Back end: Supabase

Auth: Google Cloud Console

Ngoài ra, mình có sử dụng thêm Github để lưu code, dùng ChatGPT để hỗ trợ prompt và generate ideas

Và cuối cùng là sử dụng Netlify để publish.

All tools are completely free

Và đó là sự ra đời của Unlock – Progress made simple

Unlock’s Home page

Lesson learned – Điều mình “Unlock” được là…

  1. Prioritization thực sự quan trọng

Trước khi build Unlock, mình có cơ hội được tham gia 2 cuộc thi startup và nó một phần nào đấy cũng liên quan đến việc build sản phẩm. Trong 2 lần đó, mình có một team gồm 2-3 bạn engineer giúp xây app. Và vì lúc đó mình chưa có trải nghiệm phát triển sản phẩm, mình luôn đưa ra thật nhiều các ý tưởng khác nhau và muốn team xây dựng được toàn bộ những tính năng ấy.

Và rồi khi nhận được prototype không giống với những gì mình mường tượng, mình lại cảm thấy họ thật là “chậm chạp”. Tuy nhiên, đến thời điểm hiện tại, khi một mình solo với các app này, với số lượng tokens giới hạn cho mỗi ngày, mình thực sự ngồi lại và cân nhắc toàn bộ những ý tưởng mình muốn đem vào app.

  1. Sự không hoàn hảo là tất yếu

Việc hiểu được tầm quan trọng của prioritization cũng giúp mình hiểu ra, mình không thể nào xây dựng được một cái app hoàn hảo với tất cả những tính năng mình muốn và những tính năng đó phải chạy êm xui, không tí bug nào.

Cái mình cần là một phiên bản MVP và cố gắng release nó ra để người dùng cho feedback và cải tiến dần sản phẩm.

Build first, perfect later.

  1. “Không cần biết code – Tao đã có AI”

Việc nghĩ rằng có Bolt rồi thì việc biết code là không cần thiết là hoàn toàn sai lầm. Việc không biết code khiến mình không thể có những sự điều chỉnh hợp lí và phù hợp, mà hoàn toàn phụ thuộc vào Bolt, và dù nó có “ngáo” thì mình cũng phải theo nó vì không thể nào làm khác đi được.

Trong thời đại này, việc biết code và học code là một điều cần có

Có rất nhiều meme về vibe debugging trên internet :))

Việc không biết code còn dẫn tới một yếu tố nữa, đó chính là scale. Khi sử dụng Bolt đến một mức nhất định, nó báo là “project size too large” và thế là mình hoảng. Việc phụ thuộc vào AI và giờ nó báo “mày quá lớn để tao nuôi mày rồi, tự làm tự ăn đi” Và thế là mình chết ngay.

Thế nên, kiểu gì thì cũng cần biết code, hay hiểu code thôi cũng là đủ rồi.

  1. Công cụ chỉ là công cụ

Mình từng dành khá nhiều thời gian lên Youtube chỉ để tìm công cụ “tốt nhất” để bắt đầu. Mình biết đến Bolt, Loveable, Google Firebase Studio, Flutter, Cursor,…

Và rồi thay vì việc bắt tay vào làm, mình cứ đi so sánh giữa công cụ này với công cụ khác. Nó thật sự không quan trọng đến thế.

Lời khuyên của mình là hãy tìm hiểu trong 1 thời gian nhất định, và vớ một “em” mà bạn thấy phù hợp với mình nhất, mà theo mình chủ yếu là ở phần format, visual, này kia.

Càng dễ nhìn, và dễ sử dụng thì bạn dễ bắt đầu.


Well, cái post này quá dài rồi, hi vọng bạn sẽ thấy được những điều gì đó hay ho và hiểu thêm về dự án của mình.

Rất mong nhận được sự góp ý từ mọi người, và nếu có bất kì chia sẻ gì, đừng ngại comment bên dưới nhé.


Acknowledgement

Em xin gửi lời cảm ơn tới anh Sơn vì đã giới thiệu cho em biết về Bolt cũng như sẵn lòng có một buổi meeting hướng dẫn em bắt đầu và giải đáp các thắc mắc của em – một newbie đang tìm hiểu về Product Management. Cảm ơn anh!


Cảm ơn bạn đã dành thời gian đọc bài trên The Knowledge Explorer. Bạn có thể đọc thêm các bài khác trên blog của mình.

Chúc bạn một ngày tốt lành!

Leave a Reply

Your email address will not be published. Required fields are marked *

Index