<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Decision Making · Nhân Tài Đức</title>
    <link>https://jared.lynskey.co.nz/vi/tags/decision-making/</link>
    <description>Những câu chuyện ngắn về kỹ thuật phần mềm và lãnh đạo đội ngũ kỹ sư — performance review, tuyển dụng và mở rộng team, CI/CD, giám sát DevOps và AI agent. Viết từ Seoul.</description>
    <generator>Hugo</generator>
    <language>vi</language>
    <copyright>© 2026 Nhân Tài Đức</copyright>
    <lastBuildDate>Sun, 01 Nov 2026 00:00:00 +1300</lastBuildDate>
    <atom:link href="https://jared.lynskey.co.nz/vi/tags/decision-making/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Tài liệu ra quyết định (decision document) là gì? Hướng dẫn thực tế kèm mẫu</title>
      <link>https://jared.lynskey.co.nz/vi/posts/2024/2024-12-03-decision-docs/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/vi/posts/2024/2024-12-03-decision-docs/</guid>
      <pubDate>Tue, 03 Dec 2024 00:00:00 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>decision-making</category>
      <category>documentation</category>
      <category>ADR</category>
      <category>architecture</category>
      <category>team alignment</category>
      <description>Tài liệu ra quyết định (decision document) ghi lại một lựa chọn ngay lúc đưa ra: bối cảnh, các phương án đã cân nhắc và lý do chọn, để sáu tháng sau không ai phải tranh luận lại. Cách viết ADR và RFC mà mọi người thật sự dùng, kèm ADR mẫu và mẫu tài liệu.</description>
      <content:encoded><![CDATA[<p>Đội nào cũng phải ra quyết định. Nhưng phần lớn các đội lại quên mất vì sao mình đã quyết như vậy. Sáu tháng sau, có người hỏi &ldquo;sao hồi đó mình chọn PostgreSQL mà không chọn MongoDB?&rdquo;, chẳng ai còn nhớ những ràng buộc lúc ấy, thế là cả cuộc tranh luận lại diễn ra từ đầu, mà thường còn ít người tham gia hơn lần trước.</p>
<p>Tài liệu ra quyết định sinh ra để giải quyết đúng chuyện đó. Gọi là ADR, RFC hay decision log cũng được, cái tên không quan trọng. Quan trọng là ghi lại bối cảnh, các phương án và lập luận ngay tại thời điểm lựa chọn. Năm nay, khi quản lý một đội lập trình viên, tôi càng thấm giá trị của loại tài liệu này hơn bao giờ hết: có nó thì tổ chức có trí nhớ thật, không có thì chỉ còn lại những lời truyền miệng.</p>
<hr>

<h3 class="relative group">Vì sao đáng bỏ công
    <div id="vì-sao-đáng-bỏ-công" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#v%c3%ac-sao-%c4%91%c3%a1ng-b%e1%bb%8f-c%c3%b4ng" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Cái lợi dễ thấy nhất là không phải cãi nhau về cùng một chuyện hai lần. &ldquo;Ơ, chiến lược quản lý phiên bản (versioning) cho API mình chốt rồi mà nhỉ?&rdquo; Khi có một bản ghi rõ ràng về điều đã quyết và lý do, chuyện gì đã xong sẽ nằm yên, và cả đội dồn sức vào làm thay vì quay lại đi con đường cũ.</p>
<p>Cái lợi âm thầm hơn thì phải một thời gian mới lộ ra. Dự án kéo dài hàng tháng, hàng năm, người đến rồi người đi, thứ còn lại chỉ là mã nguồn. Mã nguồn cho bạn biết <em>điều gì</em> đã được quyết, nhưng không bao giờ cho biết <em>vì sao</em>. Tài liệu ra quyết định thì giữ lại được lập luận: lúc đó có những ràng buộc gì, phương án nào đã bị loại, ai là người chốt. Người mới vào có bối cảnh để hiểu, thay vì chỉ nghe kể lại. Những quyết định liên quan tới nhiều đội cũng nhận được sự đồng thuận thật, vì ai cũng thấy các yếu tố đã được cân nhắc thế nào, chứ không chỉ thấy kết luận cuối cùng. Và khi tài liệu ghi rõ ai ra quyết định, ai đóng góp ý kiến, thì phần việc tiếp theo sẽ có người thật sự chịu trách nhiệm.</p>
<hr>

<h3 class="relative group">Khi nào nên viết
    <div id="khi-nào-nên-viết" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#khi-n%c3%a0o-n%c3%aan-vi%e1%ba%bft" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Không phải quyết định nào cũng đáng một tài liệu. Tôi chỉ viết khi quyết định đó:</p>
<ul>
<li><strong>Tốn kém nếu muốn quay đầu</strong>: chọn bộ công nghệ (tech stack) như framework, cơ sở dữ liệu hay nhà cung cấp điện toán đám mây; chọn mẫu kiến trúc (vi dịch vụ (microservices) hay nguyên khối (monolith), hướng sự kiện hay yêu cầu-phản hồi); chọn nhà cung cấp bên thứ ba; hay cách tiếp cận về bảo mật và tuân thủ</li>
<li><strong>Có tác động lâu dài</strong>: hợp đồng API mà các hệ thống bên ngoài phụ thuộc vào, mô hình dữ liệu trải qua nhiều dịch vụ, hoặc những thay đổi phá vỡ các mẫu thiết kế đã thành nếp</li>
<li><strong>Liên quan tới nhiều đội</strong>: bất cứ thứ gì cần nhiều đội hoặc các bên liên quan không làm kỹ thuật cùng đồng ý, các quyết định về phân bổ nguồn lực và thứ tự ưu tiên</li>
<li><strong>Là kết quả của một đợt <a href="https://jared.lynskey.co.nz/vi/posts/2023/2023-10-18-spike/" >spike</a></strong>: khi một đợt tìm hiểu có giới hạn thời gian vừa kết thúc, hãy ghi lại những gì tìm được và quyết định rút ra trước khi mọi người quên sạch</li>
</ul>
<p>Với những quyết định dễ đảo ngược, những chi tiết triển khai nội bộ trong đội, hay những thứ gần như không ảnh hưởng ra ngoài phạm vi trực tiếp của bạn, thì bỏ qua thủ tục. Một tài liệu không ai cần tới thì chỉ là bài tập về nhà.</p>
<hr>

<h3 class="relative group">Vòng đời
    <div id="vòng-đời" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#v%c3%b2ng-%c4%91%e1%bb%9di" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
</span></span><span class="line"><span class="cl">│   Draft     │ ──► │   Review    │ ──► │  Approved   │ ──► │ Implemented │
</span></span><span class="line"><span class="cl">│  Proposed   │     │  Feedback   │     │  Accepted   │     │  Completed  │
</span></span><span class="line"><span class="cl">└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘
</span></span><span class="line"><span class="cl">                           │
</span></span><span class="line"><span class="cl">                           ▼
</span></span><span class="line"><span class="cl">                    ┌─────────────┐
</span></span><span class="line"><span class="cl">                    │  Rejected/  │
</span></span><span class="line"><span class="cl">                    │  Superseded │
</span></span><span class="line"><span class="cl">                    └─────────────┘</span></span></code></pre></div></div>
<p>Người viết phác thảo vấn đề và các giải pháp có thể chọn. Sau đó các bên liên quan đọc và góp ý. Đây là giai đoạn làm nên giá trị của cả quá trình, vì đây là lúc các giả định bị chất vấn và những điểm mù lộ ra. Người ra quyết định (thường là trưởng nhóm kỹ thuật, kiến trúc sư hoặc người phụ trách sản phẩm) chốt lần cuối, đội bắt tay triển khai, và nếu thực tế buộc phải thay đổi giữa chừng thì tài liệu được cập nhật theo. Có tài liệu chết ngay ở vòng góp ý, có tài liệu về sau bị thay thế khi hoàn cảnh đổi khác. Trường hợp nào cũng phải đánh dấu cho rõ, vì một tài liệu &ldquo;accepted&rdquo; đã lỗi thời chính là cái bẫy cho người tiếp theo tìm thấy nó.</p>
<hr>

<h3 class="relative group">Tài liệu thế nào thì đáng đọc
    <div id="tài-liệu-thế-nào-thì-đáng-đọc" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#t%c3%a0i-li%e1%bb%87u-th%e1%ba%bf-n%c3%a0o-th%c3%ac-%c4%91%c3%a1ng-%c4%91%e1%bb%8dc" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Bắt đầu từ vấn đề, đừng bắt đầu từ giải pháp bạn thích nhất. Mình đang giải quyết chuyện gì, vì sao lúc này chuyện đó quan trọng, và nếu không làm gì thì sẽ ra sao? Khi mọi người còn chưa thống nhất vấn đề là gì, thì tranh luận về giải pháp chỉ là diễn kịch.</p>
<p>Tiếp theo, đưa ra các phương án thật sự, ít nhất hai hoặc ba, kể cả khi bạn đã nghiêng hẳn về một cái. Mỗi phương án cần có: mô tả ngắn, ưu và nhược điểm, ước lượng công sức sơ bộ (ước theo cỡ áo S/M/L/XL là đủ), cùng các rủi ro và cách bạn sẽ giảm thiểu chúng. Có ghi lại các phương án thay thế thì người đọc sau này mới hiểu vì sao phương án được chọn lại thắng.</p>
<p>Nói thẳng ra những đánh đổi. &ldquo;Chúng tôi chọn ra thị trường nhanh hơn, chấp nhận kiến trúc không được đẹp.&rdquo; &ldquo;Chúng tôi chấp nhận vận hành phức tạp hơn để đổi lấy khả năng mở rộng quy mô tốt hơn.&rdquo; &ldquo;Chúng tôi ưu tiên trải nghiệm của lập trình viên hơn hiệu năng thuần.&rdquo; Chỉ vài câu như vậy thôi đã giúp người đọc sau này nhiều hơn cả chục trang phân tích.</p>
<p>Neo cuộc thảo luận vào những thứ cụ thể: đoạn mã minh hoạ giải pháp sẽ trông ra sao, sơ đồ tương tác giữa các hệ thống, liên kết tới các bản thử nghiệm khái niệm (proof of concept) từ những đợt <a href="https://jared.lynskey.co.nz/vi/posts/2023/2023-10-18-spike/" >spike</a>. Thảo luận chung chung thì chỉ sinh ra quyết định chung chung.</p>
<p>Cuối cùng, đặt hạn chót: khi nào phải ra quyết định, ai phải góp ý trước ngày nào, và những việc gì đang bị kẹt lại trong lúc chờ. Quyết định mà không có hạn chót thì sẽ bị treo mãi.</p>
<hr>

<h3 class="relative group">Ví dụ: Architecture Decision Record (ADR)
    <div id="ví-dụ-architecture-decision-record-adr" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#v%c3%ad-d%e1%bb%a5-architecture-decision-record-adr" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Dưới đây là một ví dụ thực tế về tài liệu ra quyết định:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># ADR-001: API Authentication Strategy
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Status:**</span> Accepted
</span></span><span class="line"><span class="cl"><span class="gs">**Date:**</span> 2024-11-15
</span></span><span class="line"><span class="cl"><span class="gs">**Decision Maker:**</span> Sarah Chen (Platform Architect)
</span></span><span class="line"><span class="cl"><span class="gs">**Contributors:**</span> Backend Team, Security Team, Mobile Team
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Context
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Our public API currently uses API keys for authentication. As we expand to
</span></span><span class="line"><span class="cl">support third-party integrations and mobile apps, we need a more robust
</span></span><span class="line"><span class="cl">authentication mechanism that supports:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Token expiration and refresh
</span></span><span class="line"><span class="cl"><span class="k">-</span> Scoped permissions
</span></span><span class="line"><span class="cl"><span class="k">-</span> User-level authentication (not just service-level)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Decision
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">We will implement OAuth 2.0 with JWT tokens for API authentication.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Options Considered
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Option 1: OAuth 2.0 with JWT (Recommended)
</span></span></span><span class="line"><span class="cl">**Description:** Industry-standard protocol with self-contained tokens
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">| Pros | Cons |
</span></span><span class="line"><span class="cl">|------|------|
</span></span><span class="line"><span class="cl">| Industry standard, well-documented | More complex initial implementation |
</span></span><span class="line"><span class="cl">| Self-contained tokens reduce database lookups | Tokens cannot be revoked instantly |
</span></span><span class="line"><span class="cl">| Broad library support | Requires refresh token management |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Effort:**</span> Medium (2-3 sprints)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Option 2: Session-based Authentication
</span></span></span><span class="line"><span class="cl">**Description:** Traditional server-side sessions with cookies
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">| Pros | Cons |
</span></span><span class="line"><span class="cl">|------|------|
</span></span><span class="line"><span class="cl">| Simple to implement | Not suitable for mobile apps |
</span></span><span class="line"><span class="cl">| Easy to revoke sessions | Requires sticky sessions or shared session store |
</span></span><span class="line"><span class="cl">| Familiar to most developers | Doesn&#39;t scale as well |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Effort:**</span> Small (1 sprint)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Option 3: Custom Token System
</span></span></span><span class="line"><span class="cl">**Description:** Build our own token-based authentication
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">| Pros | Cons |
</span></span><span class="line"><span class="cl">|------|------|
</span></span><span class="line"><span class="cl">| Fully customizable | Reinventing the wheel |
</span></span><span class="line"><span class="cl">| No external dependencies | Security risks from custom implementation |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Effort:**</span> Large (4+ sprints)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Consequences
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">-</span> Mobile team can implement standard OAuth flows
</span></span><span class="line"><span class="cl"><span class="k">-</span> We&#39;ll need to set up a token refresh mechanism
</span></span><span class="line"><span class="cl"><span class="k">-</span> API documentation will need updates for OAuth flows
</span></span><span class="line"><span class="cl"><span class="k">-</span> Existing API key users will need a migration path (6-month deprecation)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## References
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">-</span> [<span class="nt">OAuth 2.0 RFC 6749</span>](<span class="na">https://tools.ietf.org/html/rfc6749</span>)
</span></span><span class="line"><span class="cl"><span class="k">-</span> Internal spike document: [<span class="nt">Authentication Options Spike</span>](<span class="na">/spikes/auth-spike-2024</span>)
</span></span><span class="line"><span class="cl">- Security team review: SEC-2024-042</span></span></code></pre></div></div>
<hr>

<h3 class="relative group">Mẫu tài liệu, cứ lấy về mà dùng
    <div id="mẫu-tài-liệu-cứ-lấy-về-mà-dùng" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#m%e1%ba%abu-t%c3%a0i-li%e1%bb%87u-c%e1%bb%a9-l%e1%ba%a5y-v%e1%bb%81-m%c3%a0-d%c3%b9ng" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Lấy mẫu (template) này làm điểm xuất phát, rồi cắt gọt cho vừa với đội của bạn:</p>
<table>
	<thead>
			<tr>
					<th><strong>Mục</strong></th>
					<th><strong>Nội dung</strong></th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Tên quyết định/vấn đề</strong></td>
					<td>[Tiêu đề ngắn gọn, nói rõ nội dung]</td>
			</tr>
			<tr>
					<td><strong>Trạng thái</strong></td>
					<td>[Draft / In Review / Accepted / Rejected / Superseded]</td>
			</tr>
			<tr>
					<td><strong>Mức độ ảnh hưởng</strong></td>
					<td>[Cao / Trung bình / Thấp]</td>
			</tr>
			<tr>
					<td><strong>Người phụ trách</strong></td>
					<td>[Người dẫn dắt quá trình ra quyết định]</td>
			</tr>
			<tr>
					<td><strong>Người ra quyết định</strong></td>
					<td>[Người có quyền quyết cuối cùng]</td>
			</tr>
			<tr>
					<td><strong>Hạn chót</strong></td>
					<td>[Ngày phải ra quyết định]</td>
			</tr>
	</tbody>
</table>

<h4 class="relative group">Mô tả vấn đề
    <div id="mô-tả-vấn-đề" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#m%c3%b4-t%e1%ba%a3-v%e1%ba%a5n-%c4%91%e1%bb%81" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p><em>Mình đang giải quyết vấn đề gì? Vì sao nó quan trọng? Không làm gì thì phải trả giá thế nào?</em></p>

<h4 class="relative group">Bối cảnh
    <div id="bối-cảnh" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#b%e1%bb%91i-c%e1%ba%a3nh" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p><em>Nêu bối cảnh, lịch sử và các chi tiết liên quan. Dẫn liên kết tới những tài liệu liên quan, các quyết định trước đó, hoặc kết quả spike.</em></p>

<h4 class="relative group">Ràng buộc
    <div id="ràng-buộc" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#r%c3%a0ng-bu%e1%bb%99c" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p><em>Giải pháp nào cũng phải tuân theo những giới hạn hay yêu cầu gì?</em></p>
<ul>
<li>Ràng buộc về ngân sách</li>
<li>Yêu cầu về tiến độ</li>
<li>Ràng buộc kỹ thuật (hệ thống hiện có, kỹ năng của đội)</li>
<li>Yêu cầu về tuân thủ hoặc bảo mật</li>
</ul>

<h4 class="relative group">Các giải pháp đã cân nhắc
    <div id="các-giải-pháp-đã-cân-nhắc" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#c%c3%a1c-gi%e1%ba%a3i-ph%c3%a1p-%c4%91%c3%a3-c%c3%a2n-nh%e1%ba%afc" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<table>
	<thead>
			<tr>
					<th><strong>Phương án</strong></th>
					<th><strong>Mô tả</strong></th>
					<th><strong>Ưu điểm</strong></th>
					<th><strong>Nhược điểm</strong></th>
					<th><strong>Công sức</strong></th>
					<th><strong>Rủi ro</strong></th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Phương án 1</strong></td>
					<td><em>Mô tả</em></td>
					<td><em>Ưu A, Ưu B</em></td>
					<td><em>Nhược A, Nhược B</em></td>
					<td><em>S/M/L/XL</em></td>
					<td><em>Thấp/TB/Cao</em></td>
			</tr>
			<tr>
					<td><strong>Phương án 2</strong></td>
					<td><em>Mô tả</em></td>
					<td><em>Ưu A, Ưu B</em></td>
					<td><em>Nhược A, Nhược B</em></td>
					<td><em>S/M/L/XL</em></td>
					<td><em>Thấp/TB/Cao</em></td>
			</tr>
			<tr>
					<td><strong>Phương án 3</strong></td>
					<td><em>Mô tả</em></td>
					<td><em>Ưu A, Ưu B</em></td>
					<td><em>Nhược A, Nhược B</em></td>
					<td><em>S/M/L/XL</em></td>
					<td><em>Thấp/TB/Cao</em></td>
			</tr>
	</tbody>
</table>

<h4 class="relative group">Đề xuất
    <div id="đề-xuất" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%c4%91%e1%bb%81-xu%e1%ba%a5t" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p><em>Nêu phương án bạn đề xuất, và tóm tắt vì sao với các ràng buộc và đánh đổi hiện có, đó là lựa chọn tốt nhất.</em></p>

<h4 class="relative group">Quyết định
    <div id="quyết-định" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#quy%e1%ba%bft-%c4%91%e1%bb%8bnh" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p><em>Chốt xong thì ghi lại quyết định cuối cùng. Nếu khác với đề xuất, giải thích lý do.</em></p>

<h4 class="relative group">Hệ quả
    <div id="hệ-quả" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#h%e1%bb%87-qu%e1%ba%a3" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p><em>Quyết định này kéo theo những gì? Cần làm tiếp những việc gì?</em></p>

<h4 class="relative group">Việc cần làm
    <div id="việc-cần-làm" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#vi%e1%bb%87c-c%e1%ba%a7n-l%c3%a0m" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<table>
	<thead>
			<tr>
					<th><strong>Việc cần làm</strong></th>
					<th><strong>Người phụ trách</strong></th>
					<th><strong>Hạn chót</strong></th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><em>Việc 1</em></td>
					<td><em>Tên</em></td>
					<td><em>Ngày</em></td>
			</tr>
			<tr>
					<td><em>Việc 2</em></td>
					<td><em>Tên</em></td>
					<td><em>Ngày</em></td>
			</tr>
	</tbody>
</table>

<h4 class="relative group">Tài liệu tham khảo
    <div id="tài-liệu-tham-khảo" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#t%c3%a0i-li%e1%bb%87u-tham-kh%e1%ba%a3o" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p><em>Liên kết tới các tài liệu liên quan, nguồn bên ngoài, kết quả spike, hoặc các quyết định trước đó.</em></p>
<hr>

<h3 class="relative group">Làm sao để thói quen này bám rễ
    <div id="làm-sao-để-thói-quen-này-bám-rễ" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#l%c3%a0m-sao-%c4%91%e1%bb%83-th%c3%b3i-quen-n%c3%a0y-b%c3%a1m-r%e1%bb%85" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Lưu tài liệu ở một chỗ cố định, chẳng hạn một thư mục riêng trong kho mã nguồn (repo) hay một không gian trên wiki, vì một quyết định không ai tìm thấy thì cũng như chưa từng có. Viết thật gọn nhẹ thôi; tài liệu mà mất cả mấy ngày mới viết xong thì sẽ chẳng bao giờ có ai viết. Nhắc tới chúng trong chú thích trong mã, thông điệp commit và pull request, để phần &ldquo;vì sao&rdquo; luôn đi liền với phần &ldquo;cái gì&rdquo;. Khi một quyết định bị thay thế, đừng xoá tài liệu cũ, mà hãy đánh dấu nó là superseded rồi dẫn liên kết sang tài liệu mới; giữ lại lịch sử mới là mục đích. Và hãy mang các quyết định cũ ra xem lại trong những <a href="https://jared.lynskey.co.nz/vi/posts/2023/2023-09-01-retrospecs/" >buổi họp nhìn lại (retrospective)</a>: cái nào vẫn còn đứng vững, cái nào bây giờ bạn sẽ quyết khác đi.</p>
<p>Những kiểu thất bại thì cũng dễ đoán y như vậy. Phân tích mãi mà không quyết được: hãy đặt hạn chót, quyết dựa trên thông tin đang có, và nhớ rằng phần lớn quyết định đều có thể xem xét lại. Góp ý cho có, chỉ để đóng dấu mà không bao giờ có phản biện thật, thì chỉ thêm quy trình chứ không thêm giá trị. Tài liệu viết xong rồi bỏ đó, không dẫn tới hành động nào, còn tệ hơn là không có tài liệu. Quá nhiều chi tiết cũng là một lỗi: tài liệu nên nói về vì sao và cái gì, không phải làm thế nào; phần triển khai là việc của bản đặc tả kỹ thuật. Và khi các bên liên quan bất đồng, hãy ghi lại ý kiến phản đối. Quyết định có thể vẫn giữ nguyên, nhưng chính lời phản đối đó là bối cảnh mà một năm sau sẽ có người cần tới.</p>
<p>Hãy bắt đầu từ quyết định quan trọng tiếp theo của bạn. Cứ viết ra, dù còn thô, rồi vừa làm vừa chỉnh lại quy trình. Mỗi cuộc họp &ldquo;sao hồi đó mình chọn X?&rdquo; không cần diễn ra nữa vì ai đó chỉ việc mở ADR ra đọc, là thêm một tiếng đồng hồ đội bạn lấy lại được.</p>
<hr>

<h3 class="relative group">Đọc thêm
    <div id="đọc-thêm" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%c4%91%e1%bb%8dc-th%c3%aam" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p><strong>Bài viết liên quan trên blog này:</strong></p>
<ul>
<li><a href="https://jared.lynskey.co.nz/vi/posts/2023/2023-10-18-spike/" >Tìm hiểu về spike trong phát triển phần mềm Agile</a> - làm một đợt spike để thu thập thông tin trước khi chốt quyết định lớn</li>
<li><a href="https://jared.lynskey.co.nz/vi/posts/2023/2023-09-01-retrospecs/" >Họp nhìn lại: sức mạnh của vòng lặp phản hồi</a> - xem lại các quyết định cũ như một phần của quá trình cải tiến liên tục</li>
<li><a href="https://jared.lynskey.co.nz/vi/posts/2023/2023-10-08-planning-an-api/" >Lên kế hoạch cho một API</a> - áp dụng tư duy tài liệu ra quyết định vào thiết kế API</li>
<li><a href="https://jared.lynskey.co.nz/vi/posts/2024/2024-01-04-githubforprojectmanagement/" >Dùng GitHub để quản lý dự án</a> - để tài liệu ra quyết định nằm ngay cạnh mã nguồn</li>
</ul>
<p><strong>Tài liệu bên ngoài:</strong></p>
<ul>
<li><a href="https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions"  target="_blank" rel="noreferrer">Documenting Architecture Decisions - Michael Nygard</a> - bài viết gốc đã giúp ADR trở nên phổ biến</li>
<li><a href="https://adr.github.io/"  target="_blank" rel="noreferrer">ADR GitHub Organization</a> - công cụ, mẫu tài liệu và ví dụ cho Architecture Decision Record</li>
<li><a href="https://www.industrialempathy.com/posts/design-docs-at-google/"  target="_blank" rel="noreferrer">Design Docs at Google</a> - cách Google viết tài liệu thiết kế</li>
<li><a href="https://rust-lang.github.io/rfcs/"  target="_blank" rel="noreferrer">Quy trình RFC của Rust</a> - quy trình RFC của ngôn ngữ Rust, được ghi chép rất kỹ</li>
<li><a href="https://engineering.atspotify.com/2020/04/when-should-i-write-an-architecture-decision-record/"  target="_blank" rel="noreferrer">Mẫu Decision Record của Spotify</a> - góc nhìn của Spotify về chuyện khi nào nên viết ADR</li>
</ul>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2024/2024-12-03-decision-docs/featured.jpg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>Dùng GitHub Issues để ra quyết định và quản lý dự án: cách làm của Alan, kèm mẫu issue</title>
      <link>https://jared.lynskey.co.nz/vi/posts/2024/2024-01-04-githubforprojectmanagement/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/vi/posts/2024/2024-01-04-githubforprojectmanagement/</guid>
      <pubDate>Tue, 09 Apr 2024 00:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>GitHub</category>
      <category>GitHub Issues</category>
      <category>Project Management</category>
      <category>Decision Making</category>
      <category>Async Communication</category>
      <category>Remote Work</category>
      <category>Team</category>
      <description>Cách Alan thay gần hết các cuộc họp bằng GitHub issue viết thành văn: quyết định nào mới đáng mở issue, các vai trò trong mô hình LOCI, những quy tắc khi viết, một mẫu issue bạn có thể bỏ ngay vào thư mục .github/ISSUE_TEMPLATE, và khi nào nên dựng thêm một GitHub Project bên trên các issue.</description>
      <content:encoded><![CDATA[<p>Có một <a href="https://alan.com/en/healthybusiness/media/a/asynchronous-decisions"  target="_blank" rel="noreferrer">bài viết</a> mà tôi cứ đọc đi đọc lại, của Alan, một công ty bảo hiểm sức khỏe ở Pháp, kể về cách họ ra quyết định. Nói ngắn gọn: thay vì đặt lịch họp, họ mở một GitHub issue rồi tranh luận bằng chữ. Giờ chính tôi cũng đang quản lý một đội, nên lần này tôi ngồi ghi chép cẩn thận. Dưới đây là phần tóm lược hệ thống của họ, có xen vài nhận xét của riêng tôi.</p>

<h2 class="relative group">Vì sao họ bỏ họp
    <div id="vì-sao-họ-bỏ-họp" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#v%c3%ac-sao-h%e1%bb%8d-b%e1%bb%8f-h%e1%bb%8dp" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Điểm xuất phát của họ chắc bạn cũng thấy quen. Không ai chuẩn bị gì, họp thì bắt đầu muộn, và ai nói to nhất thì người đó thắng, bất kể đúng hay sai. Một tiếng sau bạn bước ra còn rối hơn lúc bước vào, và bắt đầu lục ngăn kéo xem còn viên paracetamol nào không.</p>
<p>Ban đầu Alan thử sửa lại cách họp: tối đa 15 phút, chương trình họp rõ ràng, họp xong bắt buộc phải có quyết định. Nhưng không duy trì được. Thảo luận cứ lan man, chẳng ai nhớ ai đã nói gì, còn người vắng mặt hay làm việc từ xa thì coi như chịu thiệt. Thế là họ chuyển hẳn sang viết.</p>
<p>Những lợi ích họ nêu ra, tôi thấy đều đúng. Viết buộc bạn phải chậm lại và suy nghĩ thật sự, nên cuộc thảo luận sâu hơn và lập luận chặt chẽ hơn. Mọi thứ được ghi lại rõ ràng, thay vì mỗi người nhớ một ít. Tranh luận không còn là cuộc thi xem ai ăn nói giỏi hơn. Và vì diễn đàn mở cho cả công ty, ai cũng có thể góp ý, chứ không chỉ những người tình cờ có mặt trong phòng họp.</p>

<h2 class="relative group">GitHub làm diễn đàn chung của công ty
    <div id="github-làm-diễn-đàn-chung-của-công-ty" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#github-l%c3%a0m-di%e1%bb%85n-%c4%91%c3%a0n-chung-c%e1%bb%a7a-c%c3%b4ng-ty" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Diễn đàn đó chính là GitHub, một nền tảng vốn sinh ra để rà soát mã (code review), và Alan cứ thế vui vẻ &ldquo;mượn&rdquo; nó cho việc khác. Cách thiết lập đơn giản đến mức hơi ngại:</p>
<ol>
<li>Tạo một tài khoản GitHub.</li>
<li>Tạo một kho mã (repository) riêng tư không chứa dòng mã nào (kho của họ tên là &ldquo;Topics&rdquo;).</li>
<li>Thêm một hệ thống nhãn (label) để phân loại các cuộc thảo luận.</li>
<li>Dùng tab Issues: issue đang mở là thảo luận đang diễn ra, issue đã đóng là quyết định đã chốt.</li>
</ol>
<p>Họ đã vượt mốc 17,000 issue. Tức là có ngần ấy cuộc họp không bao giờ phải diễn ra, và, phần tôi thích nhất, họ có cả một lịch sử tra cứu được về lý do vì sao mỗi quyết định lại đi theo hướng đó. Nếu muốn lật lại một quyết định cũ, bạn có thể đọc trước xem lần trước những lập luận nào đã thắng.</p>

<h2 class="relative group">Khi nào nên mở issue
    <div id="khi-nào-nên-mở-issue" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#khi-n%c3%a0o-n%c3%aan-m%e1%bb%9f-issue" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Không phải quyết định nào cũng đáng mở một issue. Họ lọc bằng bốn câu hỏi: ai sẽ bị ảnh hưởng? có dễ quay lại không? gấp đến mức nào? mình có cần thêm bối cảnh trước khi quyết không?</p>
<p><figure><span class="mc-img"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="hình minh họa"
    width="1390"
    height="1213"
    src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/decisionchart_hu_9ca1837f8ecdf619.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/decisionchart_hu_9ca1837f8ecdf619.webp 800w, https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/decisionchart_hu_8ecbad24825e93ec.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/decisionchart_hu_c84e7ceb7d35c8e2.webp"></span></figure>
</p>
<p>Đại khái, quyết định nào tác động lớn và khó quay lại thì đưa lên diễn đàn, còn lại cứ để trên Slack. Họ dựa vào cách phân biệt &ldquo;cửa một chiều&rdquo; và &ldquo;cửa hai chiều&rdquo;. Quyết định một chiều là loại muốn quay lại thì quá tốn kém hoặc quá đau (ví dụ của họ là tăng giá), nên được xử lý đầy đủ bằng văn bản. Quyết định hai chiều thì dễ quay lại, tệ nhất cũng chỉ mất chút công sức, nên không cần thủ tục rườm rà.</p>

<h2 class="relative group">LOCI: ai làm gì
    <div id="loci-ai-làm-gì" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#loci-ai-l%c3%a0m-g%c3%ac" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Mỗi cuộc thảo luận đều phân vai theo mô hình LOCI: Lead, Owner, Consulted, Informed.</p>
<p>Lead chịu trách nhiệm về thành công của quyết định và đảm bảo cả đội hiểu rõ bối cảnh. Ngay từ đầu, Lead nói rõ mình muốn tham gia sâu đến đâu, sau đó tin tưởng giao cho Owner, chịu trách nhiệm về những gì đội làm ra, và chỉ lên tiếng khi thực sự không đồng ý. Mỗi thảo luận chỉ có đúng một Lead.</p>
<p>Owner là người chốt quyết định cuối cùng và kéo dự án đi tới. Owner giữ cho những người tham gia luôn nắm được tình hình và góp ý đúng hạn, tìm hiểu vấn đề, mở và đóng issue, rồi thông báo quyết định. Nếu vướng một bức tường không tự vượt qua được thì Owner tìm đến Lead. Mỗi quyết định chỉ có đúng một Owner.</p>
<p>Consulted là những người mà ý kiến của họ thực sự ảnh hưởng tới việc cân nhắc được mất. Họ phải góp ý kịp thời, dù chỉ để nói &ldquo;tôi không có gì thêm&rdquo;, và phải lên tiếng cảnh báo (đẩy lên Lead nếu cần) khi thấy quyết định đang sai nghiêm trọng. Alan giới hạn nhóm này khoảng sáu người, vì càng thêm người góp ý thì càng tốn thêm thời gian.</p>
<p>Informed thì đơn giản là những người được báo tin, thường là sau khi quyết định đã chốt. Đây là giao tiếp một chiều, không ai chờ họ phản hồi. Owner là người quyết định ai bị ảnh hưởng đủ nhiều để cần được thông báo.</p>
<p>Đó là cách làm cho từng quyết định. Với cả một dự án, tôi ghi những điều này ra một lần, thành một <a href="https://jared.lynskey.co.nz/vi/posts/2023/2023-06-02-project-frameworks-for-future-cto/" >kế hoạch truyền thông dự án</a>: ai cần được biết điều gì, bao lâu một lần, và ai là người báo cho họ.</p>

<h2 class="relative group">Một issue gồm những gì
    <div id="một-issue-gồm-những-gì" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#m%e1%bb%99t-issue-g%e1%bb%93m-nh%e1%bb%afng-g%c3%ac" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Issue nào cũng dùng chung một mẫu (template). Mẫu này vừa giúp suy nghĩ rõ ràng hơn, vừa ngầm dạy các bạn mới vào nghề cách bóc tách một vấn đề:</p>
<ul>
<li>Phạm vi (Scope): lý do có cuộc thảo luận này, kèm một dòng hay bị xem nhẹ là &ldquo;issue này KHÔNG bàn về…&rdquo;</li>
<li>Bối cảnh và tài liệu: đường dẫn tới các thảo luận và tài liệu trước đó</li>
<li>LOCI: ai là Lead, Owner, Consulted, Informed</li>
<li>Hạn chót: góp ý trước khi nào, khi nào đóng issue, khi nào cần có giải pháp</li>
<li>Đề xuất giải pháp: một phương án cụ thể, hoặc vài lựa chọn để cân nhắc</li>
<li>Câu hỏi: hỏi thẳng từng người cụ thể để xác nhận hoặc bác bỏ từng giả định cụ thể, để issue không thành lá thư bỏ vào chai thả trôi</li>
</ul>
<p><figure><span class="mc-img"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="hình minh họa"
    width="1390"
    height="715"
    src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/gitpreview_hu_154de40eb6124f02.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/gitpreview_hu_154de40eb6124f02.webp 800w, https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/gitpreview_hu_ab103b11817c0ef0.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/gitpreview_hu_aada79d3a582942a.webp"></span></figure>
</p>

<h2 class="relative group">Quy tắc viết để mọi thứ không bị ì
    <div id="quy-tắc-viết-để-mọi-thứ-không-bị-ì" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#quy-t%e1%ba%afc-vi%e1%ba%bft-%c4%91%e1%bb%83-m%e1%bb%8di-th%e1%bb%a9-kh%c3%b4ng-b%e1%bb%8b-%c3%ac" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Tranh luận bằng chữ cũng có thể lê thê y như tranh luận bằng miệng, nên họ đặt ra quy tắc. Viết ngắn gọn. Họ trích lời Boileau: &ldquo;Điều gì đã nghĩ thấu thì sẽ nói ra rõ ràng.&rdquo; Nếu bạn không viết được nó ra một cách đơn giản, tức là bạn vẫn chưa thực sự chắc. Mọi thứ viết ra đều phải qua phép thử &ldquo;Thì sao?&rdquo;: nếu bình luận của bạn dẫn tới hệ quả gì mà người đọc chưa thấy ngay, hãy nói thẳng ra.</p>
<p>Với Owner, việc theo sát về sau quan trọng không kém lúc mở đầu. Phải giữ cho cuộc thảo luận bám vào &ldquo;câu hỏi triệu đô&rdquo;, tức đúng cái điểm vướng thực sự quan trọng, thay vì để nó tan vào tiểu tiết. Thường xuyên tóm tắt lại những gì đã thống nhất và những gì còn bỏ ngỏ. Còn nhắc nhở qua Slack thì chỉ là phương án cuối cùng, dành cho những phần góp ý đã quá hạn hoặc chuyện thực sự gấp.</p>
<p><figure><span class="mc-img"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="hình minh họa"
    width="1390"
    height="910"
    src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/slackmessage_hu_b208cd2844b5ba3a.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/slackmessage_hu_b208cd2844b5ba3a.webp 800w, https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/slackmessage_hu_f44bfed068b95993.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/slackmessage_hu_3f37871d11c679c.webp"></span></figure>
</p>
<p>Owner cũng ẩn đi những bình luận không giúp cuộc thảo luận tiến lên. Ai cũng phải thạo cách định dạng trên GitHub, từ tiêu đề, chú thích cuối trang, bảng cho tới phím tắt, vì khi viết thì hình thức gần như quan trọng ngang nội dung.</p>

<h2 class="relative group">Không cần đồng thuận, không có khán giả
    <div id="không-cần-đồng-thuận-không-có-khán-giả" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#kh%c3%b4ng-c%e1%ba%a7n-%c4%91%e1%bb%93ng-thu%e1%ba%adn-kh%c3%b4ng-c%c3%b3-kh%c3%a1n-gi%e1%ba%a3" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Có hai quy tắc giữ cho cách làm này không biến thành kiểu quyết định theo hội đồng.</p>
<p>Thứ nhất, Owner ra quyết định theo kiểu mà Alan gọi là &ldquo;nhà độc tài sáng suốt&rdquo;. Họ tìm hiểu các ý tưởng, cân nhắc rủi ro, chất vấn đồng nghiệp, nhưng không đi tìm sự đồng thuận và cũng không bắt buộc phải làm theo mọi điều người khác nói. Alan nói thẳng họ không phải một nền dân chủ: nhân viên nào cũng là cổ đông, và lợi ích của công ty đặt trên lợi ích của một đội hay một cá nhân. Khi Owner đã khá chắc về một hướng đi, họ quyết, mọi người cùng làm thử, và khi đã thấy được tác động thì cùng nhìn lại xem quyết định đó đúng hay sai.</p>
<p>Thứ hai, số người tham gia được kiểm soát. Quy tắc &ldquo;hai chiếc pizza&rdquo; của Jeff Bezos cũng đúng với cách làm việc bất đồng bộ (async): issue càng đông người thì mỗi người càng góp ít. Quá khoảng sáu người là hiệu ứng khán giả xuất hiện, và chất lượng góp ý đi xuống. Chuyện thông báo cũng theo cùng tinh thần đó. Alan tin rằng ai cũng đã tự cấu hình thông báo GitHub cho mình (vào Settings, rồi tick &ldquo;Web and Mobile&rdquo; ở cả &ldquo;Participating&rdquo; lẫn &ldquo;Watching&rdquo;), nên việc gắn thẻ (tag) thẳng tên người trong phần Câu hỏi được giữ ở mức tối thiểu.</p>

<h2 class="relative group">Những gì tôi học được
    <div id="những-gì-tôi-học-được" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#nh%e1%bb%afng-g%c3%ac-t%c3%b4i-h%e1%bb%8dc-%c4%91%c6%b0%e1%bb%a3c" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Bạn không bao giờ kể lại được trọn vẹn một cuộc họp cho người vắng mặt, nhưng một quyết định đã viết ra thì ai cũng đọc được. Alan không nói đây là hệ thống tốt nhất hay duy nhất, chỉ là hệ thống hợp với họ: ít bị ngắt quãng hơn, ít hiệu ứng khán giả hơn, và quyết định được đưa ra sau khi đã lùi lại một bước để nhìn, với đầy đủ dữ kiện trên giấy. Tôi chưa định chuyển mọi quyết định của đội mình sang GitHub issue, nhưng cái mẫu dưới đây thì sẽ vào thẳng kho mã của chúng tôi.</p>

<h3 class="relative group">Mẫu đề xuất, dùng làm mẫu issue (issue template) trên GitHub
    <div id="mẫu-đề-xuất-dùng-làm-mẫu-issue-issue-template-trên-github" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#m%e1%ba%abu-%c4%91%e1%bb%81-xu%e1%ba%a5t-d%c3%b9ng-l%c3%a0m-m%e1%ba%abu-issue-issue-template-tr%c3%aan-github" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Hãy lưu nội dung dưới đây thành tệp <code>.github/ISSUE_TEMPLATE/decision.md</code> trong kho mã mà bạn dùng làm diễn đàn, và mỗi lần có người mở issue mới, GitHub sẽ gợi ý sẵn mẫu này. Các mục trong mẫu là của Alan; phần LOCI và nhãn là tôi thêm vào.</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Quyết định</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">about</span><span class="p">:</span><span class="w"> </span><span class="l">Đề xuất một quyết định và thu thập góp ý bằng văn bản</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[Quyết định] &#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">labels</span><span class="p">:</span><span class="w"> </span><span class="l">decision</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Phạm vi
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> Mục tiêu của issue này là ...
</span></span><span class="line"><span class="cl"><span class="k">-</span> Issue này KHÔNG bàn về ...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Vì sao tôi mở issue này
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## LOCI
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> Lead:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Owner:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Consulted:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Informed:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Mốc thời gian
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> Góp ý trước ngày:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Chốt quyết định trước ngày:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Bối cảnh và tài liệu
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Đề xuất
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## Câu hỏi</span></span></code></pre></div></div>

<h2 class="relative group">Nên dùng GitHub Issues hay GitHub Projects?
    <div id="nên-dùng-github-issues-hay-github-projects" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#n%c3%aan-d%c3%b9ng-github-issues-hay-github-projects" aria-label="Cọc dấu">#</a>
    </span>
    
</h2>
<p>Nếu bạn đang tính dùng GitHub để quản lý dự án theo nghĩa rộng hơn, thì nên biết hai phần này làm hai việc khác nhau. GitHub Issues là nơi diễn ra cuộc thảo luận, và khi issue đã đóng thì là nơi lưu lại quyết định. Còn một GitHub Project là một bảng công việc, ở dạng cột kiểu Kanban (board) hoặc dạng bảng tính (table), đặt chồng lên các issue của một hay nhiều kho mã, với các trường (field) do bạn tự định nghĩa như trạng thái, người phụ trách hay hạn chót. Với một diễn đàn ra quyết định như của Alan, chỉ cần nhãn và danh sách issue là đủ. Hãy thêm một Project khi bạn muốn thấy mọi quyết định đang mở trên cùng một màn hình, sắp xếp theo ngày phải chốt, và khi bạn bắt đầu theo dõi cả các đầu việc phát triển, bàn giao sản phẩm ở cùng chỗ đó. Đó cũng là lúc phần lớn các đội rốt cuộc dùng cả hai.</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2024/2024-01-04-githubforprojectmanagement/featured.jpg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>Desirability là gì? Điều gì khiến người ta khao khát một sản phẩm</title>
      <link>https://jared.lynskey.co.nz/vi/posts/2023/2023-09-27-what-is-desirable/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/vi/posts/2023/2023-09-27-what-is-desirable/</guid>
      <pubDate>Wed, 27 Sep 2023 00:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Desirability</category>
      <category>Decision-Making</category>
      <category>Personal Taste</category>
      <category>Irresistibility</category>
      <category>Appeal</category>
      <category>Influence</category>
      <description>Desirability là mức độ người ta muốn có một thứ gì đó, vượt ra ngoài chuyện họ có cần nó hay không. Ý nghĩa của nó trong thiết kế sản phẩm, những đặc điểm khiến một thứ trở nên đáng khao khát, và cách kiểm chứng điều đó trước khi bắt tay vào làm.</description>
      <content:encoded><![CDATA[<p>Desirability là mức độ người ta muốn có một thứ gì đó: sức hút mà nó tạo ra, vượt ra ngoài chuyện họ có thật sự cần nó hay không. Một thứ đáng khao khát là thứ đáng để sở hữu, đáng để mong muốn, và người ta sẽ chọn nó, trả tiền cho nó hay chịu chờ để có nó, dù vẫn có những lựa chọn rẻ hơn hoặc dễ hơn. Trong thiết kế sản phẩm, từ này mang nghĩa hẹp hơn. Đó là một trong ba phép thử mà một ý tưởng sản phẩm phải vượt qua, bên cạnh tính khả thi (feasibility: mình có làm ra được không?) và tính bền vững về kinh doanh (viability: nó có nuôi sống được một mô hình kinh doanh không?). Desirability hỏi rằng những người mà sản phẩm nhắm tới có thực sự muốn nó hay không.</p>
<p>Vì sao người ta lại muốn những thứ họ muốn? Tôi nghĩ về câu hỏi này nhiều hơn mình tưởng. Lúc mới viết bài này, tôi đang làm cho một nền tảng mà người dùng bàn chuyện mỹ phẩm suốt cả ngày, và chuyện vì sao một sản phẩm được săn lùng còn một món gần như y hệt lại chẳng ai ngó ngàng thì gần như là toàn bộ bài toán kinh doanh. Gu thì dĩ nhiên mỗi người mỗi khác, nhưng những quy luật nằm bên dưới lại nhất quán đến bất ngờ.</p>

<h4 class="relative group">Desirability, feasibility và viability
    <div id="desirability-feasibility-và-viability" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#desirability-feasibility-v%c3%a0-viability" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p>Cách nhìn qua ba lăng kính này bắt nguồn từ tư duy thiết kế (design thinking), và đã trở thành cách phổ biến để các đội sản phẩm kiểm tra một ý tưởng trước khi dồn sức vào nó. Điểm hữu ích là mỗi lăng kính thất bại theo một kiểu khác nhau. Một sản phẩm làm ra được, có lãi, mà không ai muốn dùng là kiểu thất bại kinh điển của startup: kỹ thuật chỉn chu, giá cả hợp lý, và bị ngó lơ. Còn một sản phẩm ai cũng muốn nhưng không làm ra được, hoặc không kiếm ra tiền, thì ít ra cũng thất bại vì một lý do mà bạn có thể thấy trước.</p>
<p>Desirability là lăng kính mà các đội hay bỏ qua nhất, vì nó khó đo nhất và cũng dễ bị mặc định nhất. Ai trong đội cũng đã muốn thứ mình đang làm rồi. Điều đó chẳng nói lên được gì về những người khác.</p>
<p>Phần còn lại của bài viết nói về những yếu tố tạo nên desirability, rồi đến cách kiểm chứng nó.</p>

<h4 class="relative group">Phải dùng được, và dùng được lâu
    <div id="phải-dùng-được-và-dùng-được-lâu" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ph%e1%ba%a3i-d%c3%b9ng-%c4%91%c6%b0%e1%bb%a3c-v%c3%a0-d%c3%b9ng-%c4%91%c6%b0%e1%bb%a3c-l%c3%a2u" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p>Mong muốn thường bắt đầu từ công dụng rất giản dị: món đồ bếp giúp bạn tiết kiệm được mười phút thật, chiếc điện thoại cứ thế giữ cho bạn luôn kết nối. Nhưng chỉ hữu dụng thôi thì mới dừng ở mức &ldquo;cũng được&rdquo;. Những thứ người ta thật sự thèm muốn phải làm tốt vượt trội việc của chúng, và giữ được phong độ đó lâu dài. Chất lượng và độ bền là thứ biến một món hàng mua về thành một vật sở hữu mà người ta sẵn sàng bênh vực, như một chiếc xe cổ hay một con dao dùng lâu hơn cả đời chủ. Chẳng ai mê mẩn một thứ mà họ biết trước là sẽ hỏng.</p>

<h4 class="relative group">Phải khiến bạn cảm thấy điều gì đó
    <div id="phải-khiến-bạn-cảm-thấy-điều-gì-đó" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ph%e1%ba%a3i-khi%e1%ba%bfn-b%e1%ba%a1n-c%e1%ba%a3m-th%e1%ba%a5y-%c4%91i%e1%bb%81u-g%c3%ac-%c4%91%c3%b3" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p>Thẩm mỹ có sức hút mạnh hơn ta muốn thừa nhận. Đường nét của một chiếc xe thể thao hay cách bày biện một món ăn ngon đã hút mắt bạn trước cả khi lý trí kịp lên tiếng. Và những mong muốn mạnh nhất là mong muốn thuộc về cảm xúc: niềm vui, nỗi hoài niệm, cảm giác được thuộc về một nơi nào đó. Một món đồ chơi sờn cũ từ thời thơ ấu chẳng qua được bài kiểm tra công năng nào, vậy mà vẫn không tài nào vứt đi được. Cá nhân hoá cũng đánh vào đúng bản năng ấy. Một thứ được làm riêng cho bạn thì mang cảm giác là của bạn, điều mà bản đại trà không bao giờ có được.</p>

<h4 class="relative group">Người khác quyết định nhiều hơn ta tưởng
    <div id="người-khác-quyết-định-nhiều-hơn-ta-tưởng" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ng%c6%b0%e1%bb%9di-kh%c3%a1c-quy%e1%ba%bft-%c4%91%e1%bb%8bnh-nhi%e1%bb%81u-h%c6%a1n-ta-t%c6%b0%e1%bb%9fng" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p>Sự khao khát một phần là do xã hội tạo nên. Trào lưu, sự tán thưởng của những người xung quanh và chuẩn mực văn hoá lặng lẽ định hướng những gì ta muốn. Sự khan hiếm cũng vậy: phiên bản giới hạn, đá quý hiếm, món đồ chỉ có một. Độ hiếm ngầm báo rằng muốn có thứ này là bạn đã bước chân vào một câu lạc bộ nhỏ. Rồi danh tiếng lại khuếch đại tất cả. Những lời khen nức nở trong phần đánh giá và lời truyền miệng khiến người ta thấy muốn thứ đó là an toàn. Ở nền tảng mỹ phẩm đó, ngày nào tôi cũng thấy vòng lặp này diễn ra: một người review được nhiều người yêu thích, một sản phẩm chỉ sản xuất số lượng ít, và một tuần sau là cháy hàng.</p>

<h4 class="relative group">Bài toán tiền nong vẫn phải hợp lý
    <div id="bài-toán-tiền-nong-vẫn-phải-hợp-lý" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#b%c3%a0i-to%c3%a1n-ti%e1%bb%81n-nong-v%e1%ba%abn-ph%e1%ba%a3i-h%e1%bb%a3p-l%c3%bd" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p>Giá cao không giết chết mong muốn, nhưng cảm giác bị hớ thì có. Người ta sẵn lòng trả thêm cho đồ xa xỉ, nhưng vẫn quay lưng với bất cứ thứ gì có vẻ không đáng đồng tiền mồ hôi nước mắt. Và ngày càng nhiều người đưa cả giá trị sống của mình vào cùng phép tính đó: một món đồ có được làm ra theo cách bền vững, có đạo đức hay không giờ có thể đẩy nó lên hoặc kéo nó xuống trong danh sách mong muốn của rất nhiều người. Kể cả tôi.</p>

<h4 class="relative group">Làm sao kiểm chứng một thứ có thực sự được khao khát
    <div id="làm-sao-kiểm-chứng-một-thứ-có-thực-sự-được-khao-khát" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#l%c3%a0m-sao-ki%e1%bb%83m-ch%e1%bb%a9ng-m%e1%bb%99t-th%e1%bb%a9-c%c3%b3-th%e1%bb%b1c-s%e1%bb%b1-%c4%91%c6%b0%e1%bb%a3c-khao-kh%c3%a1t" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p>Cái bẫy của desirability là hỏi thẳng người ta thì không ăn thua. Hỏi &ldquo;Bạn có dùng thứ này không?&rdquo; thì gần như ai cũng lịch sự trả lời có, vì nói có thì chẳng tốn gì. Những phép thử hiệu quả đều yêu cầu người ta bỏ ra một thứ gì đó, như thời gian, tiền bạc, địa chỉ email hay một thói quen, rồi quan sát xem họ có chịu bỏ ra không.</p>
<p>Hỏi về quá khứ, đừng hỏi về tương lai. Câu &ldquo;Kể tôi nghe lần gần nhất bạn gặp vấn đề này, và lúc đó bạn đã xử lý ra sao&rdquo; sẽ cho bạn thấy hành vi thật. Nếu không ai nhớ nổi lần gần nhất là khi nào, thì vấn đề đó chưa đủ nhức nhối để người ta muốn có giải pháp.</p>
<p>Dựng một &ldquo;cánh cửa giả&rdquo; (fake door). Đó là một trang đích (landing page), hoặc một nút bấm trong sản phẩm hiện có, dành cho một thứ chưa hề tồn tại, rồi bạn đếm xem bao nhiêu người bấm vào hoặc để lại email. Nghe thì hơi láu cá, nhưng đây là tín hiệu trung thực rẻ nhất mà bạn có được. Chỉ cần nói rõ ở phía bên kia cánh cửa rằng thứ này sắp ra mắt.</p>
<p>Đề nghị một cam kết. Danh sách chờ thì là tín hiệu yếu, còn đặt hàng trước hay đặt cọc thì mạnh. Người ta sẵn sàng đăng ký đủ thứ, nhưng chỉ trả tiền cho thứ họ thực sự muốn.</p>
<p>Với một thứ người ta đã dùng rồi, hãy hỏi họ sẽ cảm thấy thế nào nếu không được dùng nó nữa. Trong giới làm sản phẩm có một quy tắc kinh nghiệm khá phổ biến: nếu khoảng 40% người dùng trả lời là sẽ &ldquo;rất thất vọng&rdquo;, thì bạn đang có một thứ người ta thực sự muốn. Thước đo này khá thô, nhưng vẫn tốt hơn nhiều so với việc hỏi người ta có thích nó không.</p>
<p>Và hãy nhìn vào những gì người ta làm, thay vì những gì người ta nói. Tính năng nào được dùng đến lần thứ hai, tính năng nào người ta tự quay lại mà không cần nhắc, và họ phàn nàn điều gì khi nó bị hỏng. Những lời phàn nàn ở đây bị đánh giá thấp. Chẳng ai phàn nàn vì mất đi một thứ mà họ vốn không muốn.</p>

<h4 class="relative group">Ghép tất cả lại với nhau
    <div id="ghép-tất-cả-lại-với-nhau" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#gh%c3%a9p-t%e1%ba%a5t-c%e1%ba%a3-l%e1%ba%a1i-v%e1%bb%9bi-nhau" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p>Không đặc điểm nào tự mình gánh nổi một sản phẩm. Nhưng hội tụ được vài cái, như thật sự hữu ích, làm chắc chắn, đẹp mắt, hơi hiếm một chút, được những người bạn tin tưởng đứng ra bảo chứng, là bạn có những món người ta sẵn sàng xếp hàng để mua. Phần còn lại phần lớn là nhờ tiếp thị (marketing).</p>

<h4 class="relative group">Tóm lại
    <div id="tóm-lại" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#t%c3%b3m-l%e1%ba%a1i" aria-label="Cọc dấu">#</a>
    </span>
    
</h4>
<p>Desirability là mức độ người ta muốn có một thứ gì đó, vượt ra ngoài chuyện họ có cần nó hay không. Trong thiết kế sản phẩm, đó là lăng kính &ldquo;người ta có muốn thứ này không?&rdquo;, đứng cạnh tính khả thi và tính bền vững về kinh doanh. Nó đến từ sự hữu ích bền lâu, sức hút về cảm xúc hay thẩm mỹ, sự bảo chứng từ người khác cùng sự khan hiếm, và một mức giá khiến người ta thấy xứng đáng. Bạn không thể tìm ra nó bằng cách hỏi người ta có dùng thứ đó không. Hãy kiểm chứng bằng cách đề nghị họ bỏ ra một thứ có thật, rồi quan sát xem họ làm gì.</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2023/2023-09-27-what-is-desirable/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
  </channel>
</rss>
