<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>YANG&apos;s Blog</title><description>🧑‍💻 Head of R&amp;D for an Education SaaS product 💪 Focused on productivity tools, AI workflows, and digital life practices 🐶 An ordinary working professional, one child, one dog</description><link>https://blog.ly85.dev/</link><language>en</language><image><url>https://blog.ly85.dev/assets/logo.png</url><title>YANG&apos;s Blog</title><link>https://blog.ly85.dev/</link></image><item><title>In the AI Coding Era, a Programmer&apos;s Real Core Competitiveness</title><link>https://blog.ly85.dev/en/posts/ai-coding-core-competitiveness/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/ai-coding-core-competitiveness/</guid><description>AI is not replacing programmers. It is replacing inflated pseudo-skills. This article breaks down the four capabilities that become most valuable in the AI coding era.</description><pubDate>Wed, 04 Mar 2026 01:44:56 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/ai-coding-core-competitiveness-en.jpg&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;As tools like OpenClaw, Claude Code, and Codex become part of daily development, many people ask the same question: will programmers be replaced?&lt;/p&gt;
&lt;p&gt;I think a more accurate conclusion is this: AI is not compressing the value of programmers as a profession. It is compressing the value of “pseudo-skills” that were overvalued during the industry bubble.&lt;/p&gt;
&lt;h2 id=&quot;what-is-being-eliminated-is-not-people-but-low-leverage-work-patterns&quot;&gt;What Is Being Eliminated Is Not People, but Low-Leverage Work Patterns&lt;/h2&gt;
&lt;p&gt;In recent years, many “busy-looking” skills have been rapidly absorbed by AI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assembling code from templates&lt;/li&gt;
&lt;li&gt;Solving problems by copy-pasting answers&lt;/li&gt;
&lt;li&gt;Relying on overtime and raw effort to push delivery&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not the same as engineering capability. They were simply mispriced as “high output” in a specific market phase. Now AI can generate components, complete unit tests, and refactor boilerplate in seconds, so that value is naturally being repriced.&lt;/p&gt;
&lt;p&gt;So the question is no longer “Will I be replaced?” It becomes “Is my value built on capabilities that are hard for AI to replace?”&lt;/p&gt;
&lt;h2 id=&quot;the-four-most-valuable-capabilities-in-the-ai-era&quot;&gt;The Four Most Valuable Capabilities in the AI Era&lt;/h2&gt;
&lt;h3 id=&quot;1-system-design-capability&quot;&gt;1) System Design Capability&lt;/h3&gt;
&lt;p&gt;AI can write code, but it cannot define system boundaries and constraints for you.&lt;br&gt;
A valuable engineer has to answer these first:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why does this piece of code exist?&lt;/li&gt;
&lt;li&gt;What responsibility does it have in the system?&lt;/li&gt;
&lt;li&gt;How does it couple with upstream and downstream modules?&lt;/li&gt;
&lt;li&gt;Are future extension and testing costs under control?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The shift from “writing code” to “designing a closed loop” is fundamentally about defining rules, so AI can execute with consistent quality inside those rules.&lt;/p&gt;
&lt;h3 id=&quot;2-critical-thinking&quot;&gt;2) Critical Thinking&lt;/h3&gt;
&lt;p&gt;The traditional path is “build first, debug later.”&lt;br&gt;
A higher-level path is “anticipate risk first, then decide implementation.”&lt;/p&gt;
&lt;p&gt;At the solution stage, you need to proactively identify:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Whether hidden assumptions hold&lt;/li&gt;
&lt;li&gt;Whether boundary conditions are covered&lt;/li&gt;
&lt;li&gt;Whether exception paths are recoverable&lt;/li&gt;
&lt;li&gt;Whether performance and security risks are handled upfront&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI can generate runnable code, but it does not automatically own business consequences. The engineer’s value is turning “runnable” into “production-ready, evolvable, and accountable.”&lt;/p&gt;
&lt;h3 id=&quot;3-rigorous-written-communication&quot;&gt;3) Rigorous Written Communication&lt;/h3&gt;
&lt;p&gt;Many people treat prompting as “knowing how to write prompts.”&lt;br&gt;
At the core, it is the ability to communicate clearly.&lt;/p&gt;
&lt;p&gt;Whether in requirement clarification, design review, or cross-team collaboration, more precise communication means less rework.&lt;br&gt;
Every constraint you write for AI and every requirement you write for teammates rely on the same core skill: remove ambiguity, add context, and define acceptance criteria.&lt;/p&gt;
&lt;h3 id=&quot;4-clear-logical-thinking&quot;&gt;4) Clear Logical Thinking&lt;/h3&gt;
&lt;p&gt;Logical thinking is the foundation of all engineering work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breaking down complex problems&lt;/li&gt;
&lt;li&gt;Building causal chains&lt;/li&gt;
&lt;li&gt;Identifying key variables&lt;/li&gt;
&lt;li&gt;Making explainable technical trade-offs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As AI takes on more execution work, human value will continue to concentrate on “think clearly before acting.”&lt;/p&gt;
&lt;h2 id=&quot;three-role-shifts-for-programmers&quot;&gt;Three Role Shifts for Programmers&lt;/h2&gt;
&lt;p&gt;In the AI coding era, engineers are moving through three clear transitions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;From code producer to closed-loop designer&lt;br&gt;
Core shift: from “how to write” to “what should be written and what should not.”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From task executor to solution designer&lt;br&gt;
Core shift: from “doing it manually” to “defining rules so AI can execute reliably.”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From feature implementer to quality gatekeeper&lt;br&gt;
Core shift: from “done is enough” to “defining what good actually means.”&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is not a downgrade. It is a return to the essence of engineering: programmers are not typists; they are problem solvers for complex systems.&lt;/p&gt;
&lt;h2 id=&quot;a-practical-upgrade-path&quot;&gt;A Practical Upgrade Path&lt;/h2&gt;
&lt;p&gt;If you want to complete one capability upgrade in three months, follow this sequence:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;For every requirement, write the problem definition and acceptance criteria before asking AI to code.&lt;/li&gt;
&lt;li&gt;Before each merge, run a “counterexample check”: failure paths, boundary conditions, and rollback strategy.&lt;/li&gt;
&lt;li&gt;Force short design notes for every major task: objective, constraints, approach, risks, and trade-offs.&lt;/li&gt;
&lt;li&gt;Treat AI output as first draft, and finish with human review for architecture consistency and quality gates.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you keep doing this, you will feel the difference clearly: you are no longer competing with AI on typing speed. You are using AI to amplify engineering judgment.&lt;/p&gt;
&lt;h2 id=&quot;closing&quot;&gt;Closing&lt;/h2&gt;
&lt;p&gt;AI has not made programmers unimportant.&lt;br&gt;
It has only made pseudo-skills expire faster, while making real skills stand out faster.&lt;/p&gt;
&lt;p&gt;When AI handles execution and humans define what “good systems, good code, and good delivery” mean, that may be the most natural next phase of engineering collaboration.&lt;/p&gt;</content:encoded></item><item><title>The Rise of OpenClaw - 2026 as Year One for Self-Hosted AI Agents</title><link>https://blog.ly85.dev/en/posts/openclaw-2026-agent-revolution/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/openclaw-2026-agent-revolution/</guid><description>Starting from a near-miss email deletion incident, this article reviews OpenClaw&apos;s path from breakout growth to ecosystem expansion, and analyzes the opportunities, risks, and practical adoption path for self-hosted AI agents in 2026.</description><pubDate>Sat, 28 Feb 2026 02:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Note: Metrics such as project popularity and community scale in this post are point-in-time snapshots as of 2026-02-28.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;a-near-disaster-in-automation&quot;&gt;A Near-Disaster in Automation&lt;/h2&gt;
&lt;p&gt;In late February 2026, Summer Yue, head of Meta AI alignment, shared a close call on social media: her self-hosted AI agent almost deleted several critical work emails during a cleanup run. She stopped it at the last stage and avoided a chain reaction of follow-up issues.&lt;/p&gt;
&lt;p&gt;What matters here is not that the incident was rare, but that it was typical. The moment we grant execution permissions to an agent, the risk model changes. If a chat assistant gives a wrong answer, the result is usually a bad response. If an executable agent makes a wrong move, the outcome can be operational damage.&lt;/p&gt;
&lt;h2 id=&quot;from-personal-project-to-foundation-governance&quot;&gt;From Personal Project to Foundation Governance&lt;/h2&gt;
&lt;p&gt;OpenClaw was initiated by Austrian developer Peter Steinberger. The project evolved in name from Clawdbot to Moltbot and then to OpenClaw, but its core goal stayed the same: run agents locally with strong user control, instead of relying fully on cloud-hosted services.&lt;/p&gt;
&lt;p&gt;In February 2026, Steinberger announced that he had joined OpenAI. At the same time, OpenClaw made it clear it would continue as an open-source project under a foundation governance model. That signals two things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The industry value of self-hosted agents has been validated by major players.&lt;/li&gt;
&lt;li&gt;Community-driven development and open ecosystem dynamics remain core to the project.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;why-openclaw-broke-out-at-this-moment&quot;&gt;Why OpenClaw Broke Out at This Moment&lt;/h2&gt;
&lt;p&gt;The answer is not a single breakthrough, but multiple factors converging.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Model capabilities crossed the practical threshold.
Multi-step task understanding, tool use, and structured outputs are much more stable than two years ago.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Local hardware economics improved.
Apple Silicon and consumer GPUs made it feasible to run a capable always-on agent.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;User expectations shifted.
People no longer want only answers. They want AI to actually complete work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Privacy and compliance pressure reshaped architecture choices.
In finance, healthcare, and government scenarios, data sovereignty is not optional.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;a-more-practical-architecture-view&quot;&gt;A More Practical Architecture View&lt;/h2&gt;
&lt;p&gt;The following is a conceptual diagram, not a one-to-one mapping of official implementation details. It explains how OpenClaw-like systems are commonly layered.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;+------------------+     +------------------+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;|  User Channels   | --&gt; |  Gateway Server  |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| WhatsApp/Telegram|     |  (Gateway Layer) |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Discord/Slack... |     +--------+---------+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;+------------------+              |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                                  v&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    +--------------------------+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    |      Agent Runner        |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    | (Runtime &amp;#x26; Scheduling)   |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    | Lifecycle, state, recovery|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    +------------+-------------+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                                 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                                 v&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    +--------------------------+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    |     Agentic Loop         |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    | (Decision &amp;#x26; Execution)   |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    | Select, call, verify, loop|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    +------------+-------------+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                                 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                                 v&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    +--------------------------+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    |     Response Path        |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    |   (Result Delivery)      |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    | Notify, summarize, alert |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                    +--------------------------+&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Compared to chat-only assistants, the key difference is the Agentic Loop: it does not stop at generating text, but keeps orchestrating tools until task state advances or completes.&lt;/p&gt;
&lt;h2 id=&quot;skill-ecosystem-and-memory-value-and-limits&quot;&gt;Skill Ecosystem and Memory: Value and Limits&lt;/h2&gt;
&lt;p&gt;OpenClaw’s appeal comes from two sides: the skill ecosystem and memory controllability.&lt;/p&gt;
&lt;p&gt;On skills, the community has shown a clear trend of scaled contributions across office automation, web operations, file workflows, and API integration. Exact counts change quickly, so official docs and repository stats should be treated as the source of truth.&lt;/p&gt;
&lt;p&gt;On memory, OpenClaw leans toward a file-readable, auditable structure. For developers and teams, this is easier to version, review, and permission than opaque storage.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;memory/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── preferences.md      # user preferences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── tasks.md            # task queue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── contacts.md         # contacts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── knowledge/          # knowledge base&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── tech.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── finance.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── personal.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The upside is control. The tradeoff is memory hygiene work: periodic cleanup, conflict resolution, and backup policy discipline.&lt;/p&gt;
&lt;h2 id=&quot;three-long-suppressed-demands&quot;&gt;Three Long-Suppressed Demands&lt;/h2&gt;
&lt;p&gt;OpenClaw’s growth looks less like marketing luck and more like pent-up demand being released.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Privacy and data sovereignty.
Enterprises are increasingly unwilling to accept default cloud upload for sensitive data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Subscription fatigue and cost uncertainty.
As teams stack multiple AI subscriptions, budget predictability quickly degrades.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;System-level control.
If critical capability is fully bound to third-party APIs, pricing, rate limits, and policy shifts become business risk.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;who-should-adopt-openclaw-now&quot;&gt;Who Should Adopt OpenClaw Now&lt;/h2&gt;
&lt;p&gt;Not everyone should self-host immediately. A better decision framework is to evaluate constraints and goals.&lt;/p&gt;
&lt;p&gt;Best early adopters:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Teams with strict data residency requirements.&lt;/li&gt;
&lt;li&gt;Engineering teams with clear automation scenarios and willingness to invest in operations.&lt;/li&gt;
&lt;li&gt;Individual builders treating agents as production systems rather than demos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Poor immediate fit:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Teams without a stable workload and adopting mainly for hype.&lt;/li&gt;
&lt;li&gt;Organizations without basic monitoring, backup, and permission management.&lt;/li&gt;
&lt;li&gt;Users expecting zero-maintenance, instant setup, and zero risk.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;minimum-safety-checklist-do-this-before-scaling&quot;&gt;Minimum Safety Checklist (Do This Before Scaling)&lt;/h2&gt;
&lt;p&gt;If an agent is about to enter production flow, at least these five controls should be in place:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Permission tiers.
Isolate high-risk actions and default-deny write operations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Confirmation thresholds for risky actions.
Deletion, transfer, and external send actions must require explicit second-step confirmation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;End-to-end audit logs.
Capture trigger source, context, tool calls, outcomes, and rollback metadata.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rollback capability.
Ensure critical operations have reversible paths instead of irreversible execution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Backup and recovery drills.
Backups without restore testing are not real backups.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;cost-model-run-the-three-ledger-check&quot;&gt;Cost Model: Run the Three-Ledger Check&lt;/h2&gt;
&lt;p&gt;“Self-hosted is cheaper” is not always true. Evaluate with three ledgers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Hardware and power cost.
Driven by model size, runtime, peak load, and local electricity pricing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Model and inference cost.
Local models are not automatically free; cloud APIs are not always expensive. Call pattern matters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Operations and labor cost.
Deployment, monitoring, incident handling, and migration are real costs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A practical approach is to run a 4-8 week PoC on one business-critical scenario, then calculate TCO using real workload data before scaling.&lt;/p&gt;
&lt;h2 id=&quot;industry-impact-real-shift-not-overnight-replacement&quot;&gt;Industry Impact: Real Shift, Not Overnight Replacement&lt;/h2&gt;
&lt;p&gt;2026 may become a key year for self-hosted agents, but a key year does not mean full replacement. A more credible path is coexistence:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cloud agents continue to serve low-friction general use cases.&lt;/li&gt;
&lt;li&gt;Self-hosted agents go deeper in privacy-sensitive and control-critical contexts.&lt;/li&gt;
&lt;li&gt;Hybrid architectures become the enterprise default.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That also changes the developer skill profile: beyond prompts and workflows, teams need permissions design, observability, rollback strategy, and local deployment engineering.&lt;/p&gt;
&lt;h2 id=&quot;closing&quot;&gt;Closing&lt;/h2&gt;
&lt;p&gt;Summer Yue’s near-miss email incident highlights a core shift in the agent era: the central question is no longer “Can it talk?” but “Can it execute safely?”&lt;/p&gt;
&lt;p&gt;OpenClaw matters not only because it went viral, but because it moved the “executable AI + user control” path into mainstream industry discussion. For developers, this is a revaluation of engineering priorities. For enterprises, it is a fresh architecture and governance decision.&lt;/p&gt;
&lt;p&gt;Whether 2026 will ultimately be remembered as year one of self-hosted AI agents is for history to decide. What is already clear is that AI competition is moving from conversation quality to execution quality and governance quality.&lt;/p&gt;</content:encoded></item><item><title>My 2022</title><link>https://blog.ly85.dev/en/posts/my-2022/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/my-2022/</guid><description>A look back at my 2022 in reading, writing, health, and goals for the new year.</description><pubDate>Mon, 09 Feb 2026 01:44:56 GMT</pubDate><content:encoded>&lt;h2 id=&quot;a-few-reflections&quot;&gt;A Few Reflections&lt;/h2&gt;
&lt;p&gt;Looking back on 2022, it felt like the looping magical realism of Latin America in Garcia Marquez’s &lt;em&gt;One Hundred Years of Solitude&lt;/em&gt;. I went through my first ever transfer quarantine. Just when I thought the year would end in an endless cycle of pandemic controls, the sudden reopening in December closed the year with an online wave of mourning. It was a hard year for everyone.&lt;/p&gt;
&lt;p&gt;The first line of the BBC’s 2022 global recap was: 2022 was a long journey. It started with the Russia-Ukraine war and ended with Messi winning the World Cup, which at least put a relatively rounded ending on a long and difficult year.&lt;/p&gt;
&lt;p&gt;As I reflect on the experiences and changes of the year, I feel that as a grain of sand in the times, we can only drift with the current of history. As ordinary people we cannot change much; we can only change ourselves and live earnestly. Here are some small gains from my year.&lt;/p&gt;
&lt;h2 id=&quot;review&quot;&gt;Review&lt;/h2&gt;
&lt;h2 id=&quot;reading-and-writing&quot;&gt;Reading and Writing&lt;/h2&gt;
&lt;h3 id=&quot;printed-books&quot;&gt;Printed Books&lt;/h3&gt;
&lt;p&gt;11 total&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Novels (6)
&lt;ul&gt;
&lt;li&gt;A Lifelong Journey (Ren Shi Jian)&lt;/li&gt;
&lt;li&gt;The Three-Body Problem&lt;/li&gt;
&lt;li&gt;Siddhartha&lt;/li&gt;
&lt;li&gt;Ren Sheng Hai Hai&lt;/li&gt;
&lt;li&gt;To Live&lt;/li&gt;
&lt;li&gt;One Hundred Years of Solitude&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Social sciences (4)
&lt;ul&gt;
&lt;li&gt;From the Soil (Xiang Tu Zhong Guo)&lt;/li&gt;
&lt;li&gt;Sapiens: A Brief History of Humankind&lt;/li&gt;
&lt;li&gt;Israel: A Nation Reborn (Yi Se Lie: Yi Ge Min Zu De Chong Sheng)&lt;/li&gt;
&lt;li&gt;Guns, Germs, and Steel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;History (1)
&lt;ul&gt;
&lt;li&gt;Wan Gu Jiang He&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;audiobooks&quot;&gt;Audiobooks&lt;/h3&gt;
&lt;p&gt;Fan Deng: 9,247 minutes (about 154 hours), 131 titles&lt;/p&gt;
&lt;h3 id=&quot;blog&quot;&gt;Blog&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Technical posts published: 3&lt;/li&gt;
&lt;li&gt;WeChat official account followers: 85 -&gt; 156&lt;/li&gt;
&lt;li&gt;Reads: close to 5,000&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;health-and-exercise&quot;&gt;Health and Exercise&lt;/h2&gt;
&lt;p&gt;Outdoor activities: 2 hikes (far too few)&lt;/p&gt;
&lt;p&gt;Weight loss: sadly, no change &lt;img src=&quot;https://s.w.org/images/core/emoji/17.0.2/svg/1f602.svg&quot; alt=&quot;joy&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;plans-for-the-new-year&quot;&gt;Plans for the New Year&lt;/h2&gt;
&lt;p&gt;In 2022 I listened to quite a lot of audio, but I didn’t read enough physical books, so I need to increase that. I also missed my target for technical articles, which means I need to beat my procrastination. Health-wise I’m okay, but my exercise is embarrassingly low. I must step it up in 2023 because the future is all about immunity.&lt;/p&gt;
&lt;p&gt;Some small goals for 2023&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Health and exercise
&lt;ul&gt;
&lt;li&gt;Outdoor activities: 15 times&lt;/li&gt;
&lt;li&gt;Sleep before 11:30 PM every night&lt;/li&gt;
&lt;li&gt;Lose 5 kg&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Build my personal brand
&lt;ul&gt;
&lt;li&gt;Publish 10 technical posts&lt;/li&gt;
&lt;li&gt;Increase WeChat followers by 100%&lt;/li&gt;
&lt;li&gt;Independent blog visits exceed 10k&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Read more
&lt;ul&gt;
&lt;li&gt;Print books: 18&lt;/li&gt;
&lt;li&gt;Audiobooks: 10,000+ minutes&lt;/li&gt;
&lt;li&gt;Start reading notes (5 posts)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Improve English listening and speaking
&lt;ul&gt;
&lt;li&gt;Keep my Duolingo streak&lt;/li&gt;
&lt;li&gt;Watch TED in English&lt;/li&gt;
&lt;li&gt;Follow creators who teach listening skills and study systematically&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;a-note-to-my-2023-self&quot;&gt;A Note to My 2023 Self&lt;/h2&gt;
&lt;p&gt;Mai Jia wrote a line in &lt;em&gt;Ren Sheng Hai Hai&lt;/em&gt; (recently echoed by He Wei, the top CCTV World Cup commentator):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is only one kind of heroism: to see the world as it is and still love it. — Romain Rolland&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In 2023, I hope my family and friends stay healthy. Even if the world is still a mess, I want to keep believing in and loving life, and keep believing that effort leads to better outcomes.&lt;/p&gt;</content:encoded></item><item><title>A 2025 Summary from GPT: This Mirror Is a Bit Harsh</title><link>https://blog.ly85.dev/en/posts/my-2025/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/my-2025/</guid><description>A GPT-perspective review of high-density accumulation and structural stagnation in 2025, analyzing behavior patterns and proposing action design.</description><pubDate>Mon, 22 Dec 2025 09:02:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;GPT’s annual summary of me. Prompt below:
Every New Year’s Day I write an email to my future self for the next year. In that letter I am 100% honest, recording real gains, growth, achievements, judgments, thoughts, dilemmas, hesitations, and unresolved questions. I also think carefully about what I truly want in each important dimension of life in the next year, and the choices and costs I may face. I hope you can view me as a long-term observer: calm, and even a bit of “harsh reality”. Do not encourage me or avoid sharp questions. Remind me of the things I easily ignore, avoid, or rationalize. Please be objective in description and evaluation, and help me recall as many facts and details as possible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is not written for a “better self,” but for the &lt;strong&gt;real self&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;From the standpoint of a long-term observer, looking back on 2025: this is not just a summary, but a reckoning with recurring patterns and habitual self-justifications. What follows is neither comfort nor encouragement, but a &lt;strong&gt;mirror that pulls no punches&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;1-put-the-facts-on-the-table-high-density-accumulation-and-structural-stagnation&quot;&gt;&lt;strong&gt;1. Put the Facts on the Table: High-Density Accumulation and Structural Stagnation&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. This year was not “stagnant,” but far from a “breakthrough”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You did a lot, and it was high-density, long-term, reusable work. You were not slacking. Your effort shows in three core areas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Technical Leadership&lt;/strong&gt;: In a long-running education SaaS system, you clearly stepped into the role of a &lt;strong&gt;systemic rebuilder&lt;/strong&gt;. Layered architecture, business middle platform, migration blueprint… You are no longer stuck on “how to code” but on “which capabilities should exist” and “which organizational forms will drag the system down.”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Exploration&lt;/strong&gt;: Your AI usage is beyond “tool play.” You built a &lt;strong&gt;personal AI workflow&lt;/strong&gt; and started thinking about AI capability platforms, agent marketplaces, and AI as a system-level capability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Creation&lt;/strong&gt;: You kept running a &lt;strong&gt;second cognitive outlet&lt;/strong&gt;. Blog restructuring, content system building, and topic methodology accumulation. You already know what content will be “saved” and what is just self-amusement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. The brutal gap&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But the equally clear fact is this: &lt;strong&gt;no domain has formed an external anchor where people immediately think of you.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;All your effort has been “potential energy” accumulation, but that potential has not been allowed to release into “kinetic energy.” No project has created a &lt;strong&gt;structural change that cannot be ignored&lt;/strong&gt; (position, income, time sovereignty). You remain in a state of “more prepared than ever, but still not on the field.”&lt;/p&gt;
&lt;h2 id=&quot;2-pattern-recognition-how-you-imprison-yourself-with-perfection&quot;&gt;&lt;strong&gt;2. Pattern Recognition: How You Imprison Yourself with “Perfection”&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Why does this “high energy, low efficiency” pattern happen? With deeper inspection, several hidden behavior patterns emerge:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Addicted to “controllable complexity”&lt;/strong&gt;
You habitually stand in a place that looks risky but is highly controllable. Technical refactoring is risky, but you have experience and authority; content creation can be paused anytime without hurting survival; AI investment is costly but requires no immediate commitment. You rarely put yourself in a situation where &lt;strong&gt;“if this judgment is wrong, I must pay a real price.”&lt;/strong&gt; This is not cowardice; it is the “side effect of safety” brought by ability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Escaping “execution anxiety” into “direction anxiety”&lt;/strong&gt;
You are no longer anxious about “am I working hard enough” or “is my tech good enough,” but about harder questions: “Is this path dependency?” “Am I helping others complete a grand narrative?” &lt;strong&gt;This kind of anxiety will not disappear by working harder.&lt;/strong&gt; It is often evidence of growth, but it can easily become an excuse for stagnation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. “System completeness” as a security blanket&lt;/strong&gt;
Your obsession with “complete,” “closed loop,” and “clear layering” is both an advantage and the highest-level cover. It keeps you in &lt;strong&gt;“not ready until I prepare more”&lt;/strong&gt; mode, with constant reasons to avoid putting something into the real world for validation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. A variant of long-termism: procrastination&lt;/strong&gt;
You believe in long-term value, but you are rationalizing every present indecision as “part of the long term.”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You know some choices will only be harder in three years, yet you still choose “observe one more year.”&lt;/li&gt;
&lt;li&gt;You already know the ceiling of certain directions, yet you still tell yourself “accumulate a bit more.”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long-termism should compress hesitation, not extend it forever.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;3-key-questions-three-interrogations-for-next-year&quot;&gt;&lt;strong&gt;3. Key Questions: Three Interrogations for Next Year&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;When you write to your future self, do not give answers. Honestly respond to these three questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;If one year later I am still standing in the same place, what am I avoiding right now?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Which choices have I already vetoed many times under the banner of “rationality”?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If I can only lose security in one dimension (time, money, reputation), which would I choose?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;4-insights-and-frameworks-breaking-the-deadlock&quot;&gt;&lt;strong&gt;4. Insights and Frameworks: Breaking the Deadlock&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;To end this phase of “highly awake, constantly preparing, not yet landing,” you need a new mental framework:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Find the minimum effective dose of “irreversible commitment”&lt;/strong&gt;
What you need is not more awareness, but a single &lt;strong&gt;irreversible commitment&lt;/strong&gt;. Such decisions are often not elegant, not perfect, even a bit awkward. But that does not mean you must go all-in and gamble.&lt;/p&gt;
&lt;p&gt;You need an intermediate state: real constraint (skin in the game) without destructive damage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Distinguish “direction confusion” from “fear in disguise”&lt;/strong&gt;
Run a diagnostic test: if you had three months of completely free time, what would you do? If the answer comes quickly and clearly, you are not confused, you are just afraid. If so, you need commitment mechanisms, not more thinking.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. The time window of potential energy&lt;/strong&gt;
Do not assume “accumulation” always works. In some fields, accumulation has exponential effects, but opportunity windows (like the AI wave) and the rising cost of trial with age are real. &lt;strong&gt;If potential energy is not released, it will eventually depreciate into a heavy sense of “unfulfilled talent.”&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;5-action-design-create-structural-change&quot;&gt;&lt;strong&gt;5. Action Design: Create Structural Change&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;If you do not actively create structural change, change will not happen by itself. In 2026, commit to gradual restructuring in three dimensions:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Time structure change&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Goal&lt;/strong&gt;: time you truly control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt;: allocate X fixed hours each week to work that does not depend on a single employment relationship. This is not “spare time”; it is “seed time.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Income structure change&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Goal&lt;/strong&gt;: not dependent on a single employment relationship.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt;: set a concrete milestone such as “side income reaches Y% of main income.” You can even set a required micro-commercial loop: even if you earn just one dollar, run the whole process end-to-end.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Identity structure change&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Goal&lt;/strong&gt;: how others introduce you to a third party.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt;: in certain circles, proactively introduce yourself with a new label. No longer “the technical lead of a system,” but “[your new identity].”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. A concrete test&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt;: choose one project, set a public deadline, and introduce external supervision (or prepaid cost). Make “preparation” itself a public, binding action.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusion-this-is-a-choice&quot;&gt;&lt;strong&gt;Conclusion: This Is a Choice&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;This essay is itself a curious paradox: you are using “build a complete cognitive system” to criticize the pattern of “using systems to delay action.”&lt;/p&gt;
&lt;p&gt;So let this summary be the last time you only “build cognition.”&lt;/p&gt;
&lt;p&gt;This is not to create anxiety, but to make time feel heavy again.
&lt;strong&gt;You are not lost.&lt;/strong&gt;
&lt;strong&gt;You are more like someone standing at a crossroads, unwilling to admit that you already see the direction.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How long will you stand here?
&lt;strong&gt;That itself is a choice.&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title>Zootopia 2: The Cost of Harmony?</title><link>https://blog.ly85.dev/en/posts/zootopia-2-harmony-cost/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/zootopia-2-harmony-cost/</guid><description>Analyzes how Zootopia 2 shifts from personal prejudice to institutional and structural oppression, and reflects on the limits of liberal multiculturalism and the &quot;melting pot.&quot;</description><pubDate>Mon, 15 Dec 2025 02:47:05 GMT</pubDate><content:encoded>&lt;h2 id=&quot;from-fairy-tale-to-allegory&quot;&gt;From Fairy Tale to Allegory&lt;/h2&gt;
&lt;p&gt;When children laugh at Judy and Nick’s adventures in the theater, adult viewers should realize that Zootopia 2 is far more than a family-friendly animation. The sequel continues the tradition of wrapping complex sociological questions in a colorful animal world, but its critical edge goes deeper.&lt;/p&gt;
&lt;p&gt;If the 2016 Zootopia exposed personal prejudice and hidden discrimination, the 2025 sequel turns its camera on a more fundamental question: how oppression is woven into social structures themselves. This is no longer a moral fable about “good people can be biased too,” but a systematic critique of colonial history, spatial politics, and inherited power.&lt;/p&gt;
&lt;p&gt;The English title Zootopia is a carefully designed paradox: “Zoo” (cage) plus “Utopia” (ideal society). It hints that the city, though seemingly perfect, is built on exclusion and control. The sequel’s job is to tear away the utopian mask and show the violent foundations beneath the prosperity.&lt;/p&gt;
&lt;h2 id=&quot;revealing-three-layers-of-structural-oppression&quot;&gt;Revealing Three Layers of Structural Oppression&lt;/h2&gt;
&lt;p&gt;The most important theoretical contribution of Zootopia 2 is its presentation of oppression as a three-layer structure, moving from the surface down to the roots.&lt;/p&gt;
&lt;h3 id=&quot;personal-level-bias&quot;&gt;Personal-Level Bias&lt;/h3&gt;
&lt;p&gt;This was the focus of the first film and the starting point of the sequel. Judy carrying fox repellent spray and blurting out offensive remarks to Nick reveals the mechanics of implicit bias and microaggressions. Even people who see themselves as progressive can unconsciously reproduce discriminatory logic.&lt;/p&gt;
&lt;p&gt;In the sequel, that personal bias extends to fear of reptiles. Gary, a gentle and even timid snake, stands in stark contrast to the city’s image of reptiles as “cold-blooded killers.” This contrast is no longer about biology; it is pure cultural construction. Reptiles are demonized simply because they are “other.”&lt;/p&gt;
&lt;h3 id=&quot;institutional-discrimination&quot;&gt;Institutional Discrimination&lt;/h3&gt;
&lt;p&gt;The police system itself becomes an object of scrutiny. Judy, as the “first bunny officer,” experiences not just tokenism but a broader mechanism of exclusion. The mandatory “partner counseling” for Judy and Nick looks like therapy on the surface, but in practice is discipline imposed by the institution on nonconforming behavior.&lt;/p&gt;
&lt;p&gt;A deeper critique is that the film hints at the police as guardians of power. Judy and Nick may be heroes, but they operate inside the system and rely on state violence to “save” oppressed groups. This extends the critique of the first film: a “white savior” and “blue lives matter” narrative that still places hope in establishment goodwill rather than empowering the oppressed to resist.&lt;/p&gt;
&lt;h3 id=&quot;structural-and-systemic-oppression&quot;&gt;Structural and Systemic Oppression&lt;/h3&gt;
&lt;p&gt;This is the most subversive part of the sequel. It reveals that discrimination is not only in people’s minds or in written policies, but solidified in the city’s physical space itself.&lt;/p&gt;
&lt;p&gt;The climate wall system, the segregation of Marsh Market, and the historical absence of reptiles all point to one core proposition: Zootopia’s prosperity rests on the systematic exclusion of certain groups. This is not a conspiracy by a single politician, but the original violence embedded in the city’s construction.&lt;/p&gt;
&lt;h2 id=&quot;metaphors&quot;&gt;Metaphors&lt;/h2&gt;
&lt;h3 id=&quot;a-the-absence-and-return-of-reptiles&quot;&gt;A. The Absence and Return of Reptiles&lt;/h3&gt;
&lt;p&gt;The complete absence of reptiles in the first film is revealed as a historical expulsion, directly echoing the logic of settler colonialism:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First, stigmatize the indigenous. A manipulated murder case (a snake killing a turtle) labels the whole group as “dangerous” and “savage.”&lt;/li&gt;
&lt;li&gt;Second, physical expulsion. Reptiles are driven out of the city core and their community, Reptile Ravine, is destroyed or repurposed.&lt;/li&gt;
&lt;li&gt;Third, historical erasure. Their contribution to the city (inventing climate wall technology) is erased, and the credit is given to the colonial Lynxley family.&lt;/li&gt;
&lt;li&gt;Finally, a legitimizing narrative. The city’s “founding myth” casts the founders as heroes and justifies the expulsion as a matter of “security.”&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;b-the-climate-wall-system&quot;&gt;B. The Climate Wall System&lt;/h3&gt;
&lt;p&gt;In the first film, the climate wall is framed as a technological miracle that allows species with different climate needs to coexist. The sequel flips this optimistic reading:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The climate wall is not a tool of inclusion, but a weapon of segregation.&lt;/li&gt;
&lt;li&gt;It divides the city into climate zones, a physical embodiment of spatial separation.&lt;/li&gt;
&lt;li&gt;The design of arid and cold zones deliberately excludes reptiles’ survival needs, a form of “environmental violence.”&lt;/li&gt;
&lt;li&gt;Control of the wall’s maintenance and expansion sits with the Lynxley family, making it a tool to monopolize resources and control movement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;c-marsh-market&quot;&gt;C. Marsh Market&lt;/h3&gt;
&lt;p&gt;Marsh Market is the most symbolic setting in the sequel. Built on wetlands and connected by boardwalks and pipes, it carries a bayou slum vibe. It is Zootopia’s “reverse side”:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spatial marginalization: cut off from the city core, it becomes a gathering place for reptiles, aquatic mammals, and other “unwanted” groups.&lt;/li&gt;
&lt;li&gt;Economic marginalization: smuggling and black markets flourish, not because of moral failure but because residents are excluded from the legal economy.&lt;/li&gt;
&lt;li&gt;Cultural marginalization: the area has its own vitality and community culture, yet is seen by the mainstream as “dangerous” and “chaotic.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Lynxley family plans to expand Tundratown, which means swallowing Marsh Market. This is a blunt metaphor for gentrification:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Under the banner of “urban development,” low-income communities are displaced, land is converted into high-value real estate, and original residents are left with nowhere to go.&lt;/li&gt;
&lt;li&gt;The “independence” of Marsh Market residents is essentially abandonment and exclusion, not true autonomy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;d-the-lynxley-family&quot;&gt;D. The Lynxley Family&lt;/h3&gt;
&lt;p&gt;The Lynxley family is the perfect embodiment of elite power:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stealing innovation: climate wall technology was invented by reptiles, yet the Lynxley family claims it and patents it. This reveals the violent nature of intellectual property under capitalism: whoever controls law and power can legitimize others’ creations as their own.&lt;/li&gt;
&lt;li&gt;Historical revision: by controlling education and public narratives, they cast themselves as “city builders” and erase reptiles from history.&lt;/li&gt;
&lt;li&gt;Inherited power: wealth and influence pass down generations, forming a fixed ruling class. Even the “fallen” heir Bobert can easily mobilize smuggling networks and antique resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;from-we-are-the-same-to-accepting-our-differences&quot;&gt;From “We Are the Same” to “Accepting Our Differences”&lt;/h2&gt;
&lt;p&gt;This thematic shift exposes the inner dilemma of liberal pluralism.&lt;/p&gt;
&lt;h3 id=&quot;the-first-films-optimism-the-assimilation-illusion&quot;&gt;The First Film’s Optimism: The Assimilation Illusion&lt;/h3&gt;
&lt;p&gt;The slogan “Anyone can be anything” is essentially an assimilationist narrative. It assumes that once prejudice is removed, everyone can gain equal opportunity within the existing system.&lt;/p&gt;
&lt;p&gt;Judy becoming a cop and Nick “going straight” both happen by adapting to and integrating into the mainstream system. This narrative ignores a fundamental question: what if the system itself is the source of oppression?&lt;/p&gt;
&lt;h3 id=&quot;the-sequels-compromise-the-cost-of-acknowledging-differences&quot;&gt;The Sequel’s Compromise: The Cost of Acknowledging Differences&lt;/h3&gt;
&lt;p&gt;The sequel retreats from “we are the same” to “accept our differences.” It seems more mature, but actually reveals a deep sense of powerlessness:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Biological differences are not easily changed: foxes do not understand hugs, elephants fear mice, and herbivores’ smiles look like provocation to predators. These details suggest some differences are deeply rooted and cannot be erased through “mutual understanding.”&lt;/li&gt;
&lt;li&gt;Limits of inclusion: Judy and Nick’s painful faces when eating insects to respect reptiles, and seals refusing coins and touch yet still being ignored, show how difficult true cross-cultural understanding is.&lt;/li&gt;
&lt;li&gt;The nature of compromise: “accepting differences” often means marginalized groups must adapt and sacrifice. In the film, reptiles work to fit into Zootopia rather than the city changing itself to welcome them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This shift is, in effect, a critique of multiculturalism as ideology. It shows that “tolerance” and “respect” alone cannot solve structural inequality. Real justice requires a fundamental redistribution of power, not just the acknowledgment of difference.&lt;/p&gt;
&lt;h2 id=&quot;the-irony-of-the-name-zootopia&quot;&gt;The Irony of the Name Zootopia&lt;/h2&gt;
&lt;p&gt;The name itself is a precise critical tool.&lt;/p&gt;
&lt;h3 id=&quot;the-double-meaning-of-zoo&quot;&gt;The Double Meaning of “Zoo”&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A zoo: a cage for humans to observe animals, where animals are classified, displayed, and controlled.&lt;/li&gt;
&lt;li&gt;A city of animals: seemingly free, yet planned, monitored, and managed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-false-promise-of-utopia&quot;&gt;The False Promise of “Utopia”&lt;/h3&gt;
&lt;p&gt;When Thomas More coined “Utopia,” the etymology already carried a double meaning: “eu-topia” (good place) and “ou-topia” (no place). Zootopia is exactly such a “no-place” good place. It promises equality and inclusion, but that promise rests on systematic exclusion of certain groups.&lt;/p&gt;
&lt;h3 id=&quot;the-collapse-of-the-melting-pot-myth&quot;&gt;The Collapse of the “Melting Pot” Myth&lt;/h3&gt;
&lt;p&gt;America has long styled itself as a “melting pot” where cultures blend. That narrative hides a harsh reality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Integration equals assimilation: minorities must give up their cultural identity and adopt the mainstream.&lt;/li&gt;
&lt;li&gt;Selective inclusion: only those who “fit the standard” are accepted, while others are expelled or marginalized.&lt;/li&gt;
&lt;li&gt;Ongoing segregation: real-world racial segregation and economic stratification never disappear, they just take more hidden forms.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zootopia’s surface prosperity is built on Marsh Market’s poverty, the absence of reptiles, and the Lynxley family’s monopoly. This utopia is, at its core, an exclusive space of privilege.&lt;/p&gt;
&lt;p&gt;The ending scene, with different groups peacefully making burgers together, is warm. But the line “territorial animals always feel the urge to expand” tells the truth: power struggles are permanent, and harmony is temporary.&lt;/p&gt;
&lt;h2 id=&quot;a-sociology-textbook-in-fairy-tale-clothing&quot;&gt;A Sociology Textbook in Fairy-Tale Clothing&lt;/h2&gt;
&lt;p&gt;Zootopia 2 uses animal allegory to weave settler colonialism, racist urban planning, and intellectual property violence into what looks like a light adventure.&lt;/p&gt;
&lt;p&gt;The most unsettling part is not what it reveals, but that after revealing it, the film cannot provide answers. The final harmonious image is fragile because power structures remain unchanged, economic inequality persists, and spatial segregation continues. That line about territorial animals is the film’s most honest moment: it admits there may be no perfect solution.&lt;/p&gt;
&lt;p&gt;Ultimately, Zootopia 2 matters because it asks the right questions even if it cannot offer radical answers. It invites viewers to think rather than feed them conclusions. It acknowledges complexity instead of selling easy hope.&lt;/p&gt;
&lt;p&gt;In an era that increasingly rejects complexity, that is a radical stance in itself.&lt;/p&gt;
&lt;p&gt;When children grow up and rewatch this film, they will realize that the scenes that once made them laugh were actually a prophecy of the world they will face. The answers that were not spoken are waiting for their generation to find.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Author’s note: personal opinion, for reference only.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>What Has AI Changed for Me?</title><link>https://blog.ly85.dev/en/posts/ai-what-changed/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/ai-what-changed/</guid><description>From a gentle singularity, I reflect on how AI rewrote the way I work, amplified my abilities, and reshaped my sense of purpose.</description><pubDate>Tue, 02 Dec 2025 05:33:05 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AI-Change.jpg&quot; alt=&quot;Cover&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;introduction-a-gentle-singularity&quot;&gt;Introduction: A Gentle Singularity&lt;/h2&gt;
&lt;p&gt;Over the past two years, I have felt like I was standing on a strange boundary: on one side is the familiar old world, driven by experience, manpower, processes, and projects; on the other is a new world accelerating forward, with AI seeping into every crack like groundwater.&lt;/p&gt;
&lt;p&gt;Every quarter I analyze AI news, trends, and products, and I binge AI-related podcasts during my commute. That is just the environment I live in.&lt;/p&gt;
&lt;p&gt;Yesterday I saw a video from Tim that opened with a chilling experiment: “draw a picture of a person drowning in the deep sea, struggling to breathe.” Nine human artists spent an hour on it, while six AI models took only 15 seconds. The harsher truth was that the AI images were high quality, highly varied in style, and could be regenerated endlessly.&lt;/p&gt;
&lt;p&gt;That contrast sharpened a question that has been bothering me for a long time: is AI a wave, or a lighthouse? When AI can replace an hour of my effort in 15 seconds, what is the meaning of my existence? Is it a tool that changes the outside world, or a program that rewrites me?&lt;/p&gt;
&lt;p&gt;Looking back, the changes AI brought me can be split into three layers: a structural rewrite of how I work, an exponential amplification of my capabilities, and a quiet shift in my life trajectory.&lt;/p&gt;
&lt;h2 id=&quot;ai-turned-me-from-a-task-doer-into-a-system-architect&quot;&gt;AI Turned Me from a “Task Doer” into a “System Architect”&lt;/h2&gt;
&lt;p&gt;In the past, writing an architecture document was a war of willpower. Words, diagrams, structure, details, every part had to be built from scratch.&lt;/p&gt;
&lt;p&gt;Now the process feels like collaborative engineering: I propose the core framework and AI expands the structure; I add business context and AI fills in the logic chain; I identify risks and AI offers alternative paths.&lt;/p&gt;
&lt;p&gt;A document that used to take at least three days can now take just one night. The quality is often higher because I can spend more energy polishing concepts rather than grinding through sentences.&lt;/p&gt;
&lt;p&gt;Tim’s video offers an even harsher footnote: his team once spent an entire year making a special-effects shot for “Galaxy Train.” In a traditional workflow, that would take five professional VFX artists for more than half a year (around 500 hours). But in 2025, the AI model Veo3 generated the same train-through-the-galaxy scene in two minutes, even with sound effects.&lt;/p&gt;
&lt;p&gt;This is the “paradox of effort”: the more time and labor we pour into pure execution, the less meaningful the outcome may be, because AI evolves faster than we can refine our craft. The software skills and tricks we used to study late into the night can be devalued instantly.&lt;/p&gt;
&lt;p&gt;In short: AI lifted me from “executor” to “structural engineer.” I am no longer just finishing tasks; I am designing systems.&lt;/p&gt;
&lt;h2 id=&quot;ai-expanded-my-personal-ability-into-a-small-team&quot;&gt;AI Expanded My “Personal Ability” into a Small Team&lt;/h2&gt;
&lt;p&gt;If human ability is like a motherboard, AI is a plug-in expansion card you can attach at any time.&lt;/p&gt;
&lt;p&gt;When I write code, it becomes a pair programmer. When I write system plans, it becomes an architect. When I create content, it becomes an editor, a scriptwriter, a media library, and an idea engine. When I need to talk to a financial advisor, it instantly switches into a financial analyst.&lt;/p&gt;
&lt;p&gt;That ability to “switch professions on demand” first shocked me, then made me dependent, and now feels calm and normal, as if I have a 24/7 “shadow team” always on standby.&lt;/p&gt;
&lt;p&gt;More importantly, it made me redefine a single word: boundary.&lt;/p&gt;
&lt;p&gt;Before, I would think, “I am not good at this, I probably cannot do it.” Now it becomes, “Let me try. With AI as a safety net, it will not be too bad.”&lt;/p&gt;
&lt;p&gt;So I started trying things I used to avoid: rebuilding my blog, creating content, understanding macroeconomics, preparing learning paths for my child. I began to connect across multiple domains and no longer feared crossing boundaries.&lt;/p&gt;
&lt;p&gt;This is not inflation. It is a world quietly opened.&lt;/p&gt;
&lt;h2 id=&quot;ai-helped-me-reshape-the-meaning-of-work&quot;&gt;AI Helped Me Reshape the “Meaning of Work”&lt;/h2&gt;
&lt;p&gt;This might be the deepest change.&lt;/p&gt;
&lt;p&gt;For a long time, work felt alienating: trivial, fragmented, passive, like a gear inside a machine.&lt;/p&gt;
&lt;p&gt;But once I started using AI, I realized I was turning myself from a gear into a system designer. That shift itself is meaning.&lt;/p&gt;
&lt;p&gt;When I design a two-year system evolution plan for my company, I am using AI to pull what I wanted to do but could not, back into my capability range.&lt;/p&gt;
&lt;p&gt;When I design a learning path for my child, I am using AI to turn a father’s anxiety into deliberate action.&lt;/p&gt;
&lt;p&gt;When I keep writing, I am using AI to turn accumulated experience into reusable knowledge assets, instead of scattered, temporary skills.&lt;/p&gt;
&lt;p&gt;In other words, AI let me see that many things in work and life were not “I am not capable” but “I lack the right tools.” Once the tools arrived, my participation in the world was reactivated.&lt;/p&gt;
&lt;p&gt;But that reactivation is not only about efficiency, it is about connection. Tim’s video told the story of the band “Deep Sea Breathing” and its singer, 57, which gave me a deeper understanding of “the meaning of work.”&lt;/p&gt;
&lt;p&gt;57 had a serious illness, lost hearing, and faced a surgery with only a 60-70% success rate. He said something that broke my heart: “I am not afraid of life ending early. I am afraid that one day I will not be able to hear anything.” To help him fulfill his dream, the team rushed to finish the “Galaxy Train” MV before he went into surgery.&lt;/p&gt;
&lt;p&gt;The surgery did not go perfectly. There was no miracle. He lost 30 kilograms, and his hearing did not improve much. But on the day the MV was released, 57 successfully proposed to his partner. In that moment, the efficiency of production and the precision of special effects (things AI can easily surpass) did not matter. What mattered was the bond between people that the project carried.&lt;/p&gt;
&lt;p&gt;The meaning of work is not only about designing systems or boosting efficiency. It is about whether, through those systems, we can transmit love and courage. AI can generate perfect images, but it cannot understand the nervous sweat of a proposal, nor recreate the smell of dreams in a 60-yuan rehearsal room.&lt;/p&gt;
&lt;h2 id=&quot;so-what-do-we-still-have&quot;&gt;So What Do We Still Have?&lt;/h2&gt;
&lt;p&gt;If AI can do everything, faster, stronger, smarter than us, what do we have left?&lt;/p&gt;
&lt;p&gt;Tim’s video gave a soul-piercing answer: “Maybe only experience. Experience shapes each of our unique souls.”&lt;/p&gt;
&lt;p&gt;When you see your mother’s gray hair, your thoughts do not stop there. When you step onto your old campus and smell the classrooms, your memory is instantly awakened. These moments of feeling and these unique life experiences cannot be calculated or simulated by AI. AI cannot see through you, because it has not lived your life.&lt;/p&gt;
&lt;p&gt;The final metaphor in the video about a “train” is deeply moving: in AI’s logic, trains are slow, heavy, inefficient, nowhere near fiber optics or rockets. It may not understand why humans feel attached to such an outdated vehicle. But trains have something special: “Even if boarding means separation, as long as the tracks remain and we still remember each other, one day we will meet again.”&lt;/p&gt;
&lt;p&gt;Every time I finish overtime and drive home, I choose Gulou Avenue, even though the Second Ring Road is faster late at night. Besides speed, there are other things that matter.&lt;/p&gt;
&lt;p&gt;This helped me see the other side of the AI revolution: AI can be the rocket that roars past, taking us higher to explore the boundaries of cognition. But we are still the person sitting by the train window (or driving), holding the hand of someone beside us and feeling our heartbeat.&lt;/p&gt;
&lt;p&gt;Efficiency belongs to AI. Experience belongs to humans.&lt;/p&gt;
&lt;h2 id=&quot;the-value-of-ai-is-never-replacement-but-upgrade&quot;&gt;The Value of AI Is Never Replacement, but Upgrade&lt;/h2&gt;
&lt;p&gt;It brings efficiency, but also direction. It changes work, but also changes mindset. It accelerates professional growth, but also reshapes self-understanding.&lt;/p&gt;
&lt;p&gt;I do not know what the future holds, but at least right now I can feel one thing clearly: AI is not just a tech trend, it is a personal revolution. It forces us to hand over inefficient labor in exchange for more precious experiences and connections, and I happen to be in the center of that revolution.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Author’s note: personal opinion, for reference only.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>What Is a Tariff? Why Is Trump Raising Tariffs on China Again?</title><link>https://blog.ly85.dev/en/posts/what-is-tariff/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/what-is-tariff/</guid><description>From definitions and functions of tariffs to US tariff history and political logic, plus impacts on consumers, companies, and global trade.</description><pubDate>Sun, 27 Apr 2025 09:11:11 GMT</pubDate><content:encoded>&lt;p&gt;I recently talked with a friend who does import-export business in the US. He has already paused imports from China and switched to transshipment or sourcing from other countries. His reason was simple: &lt;strong&gt;the US raised tariffs again&lt;/strong&gt;, margins got crushed, and the business no longer works.&lt;/p&gt;
&lt;p&gt;Influenced by that, I rushed to order a new Mac. I was afraid that if I waited and the tariffs landed, prices would rise and consumers like us would pay the price.&lt;/p&gt;
&lt;p&gt;That sparked my curiosity: &lt;strong&gt;what are tariffs really? Why does the US like to talk about them? How much do they affect ordinary people?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Over the past few weeks I did some research and put together this beginner-friendly guide to help explain the logic behind tariffs.&lt;/p&gt;
&lt;h2 id=&quot;1-what-is-a-tariff-from-toll-to-geopolitical-weapon&quot;&gt;&lt;strong&gt;1. What Is a Tariff? From “Toll” to Geopolitical Weapon&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id=&quot;1-what-is-a-tariff&quot;&gt;&lt;strong&gt;1. What is a tariff?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;A tariff is essentially &lt;strong&gt;a tax imposed by the government on goods that cross borders&lt;/strong&gt;. You can think of it as a modern “toll” or “protection fee.”&lt;/p&gt;
&lt;p&gt;For example, if you buy a pair of sneakers from abroad, when the goods enter Chinese customs, the state collects a tax based on the declared price. That tax is a tariff.&lt;/p&gt;
&lt;h3 id=&quot;2-what-are-its-three-main-functions&quot;&gt;&lt;strong&gt;2. What are its three main functions?&lt;/strong&gt;&lt;/h3&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Explanation&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Fiscal revenue&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;A key source of revenue for early states; still important for developing countries&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Trade protection&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Raises foreign goods prices to protect domestic industries&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Political bargaining tool&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Used to threaten or sanction other countries, e.g., the Trump-era “trade war”&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;In modern economies, tariffs are no longer just “taxes” but &lt;strong&gt;comprehensive national policy tools&lt;/strong&gt; with strong strategic attributes.&lt;/p&gt;
&lt;h2 id=&quot;2-the-us-and-tariffs-a-tangled-history&quot;&gt;&lt;strong&gt;2. The US and Tariffs: A Tangled History&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id=&quot;1-tariffs-are-an-old-friend-of-the-us&quot;&gt;&lt;strong&gt;1. Tariffs are an “old friend” of the US&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;In the early years of the US, the federal government had no personal income tax; &lt;strong&gt;almost all fiscal revenue came from tariffs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;One trigger of the Civil War was the South’s opposition to high tariffs set by the North (protecting Northern industry and hurting Southern agriculture).&lt;/li&gt;
&lt;li&gt;So US reliance on tariffs did not begin with Trump; it is “in the family.”&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-trump-governing-with-tariffs&quot;&gt;&lt;strong&gt;2. Trump: Governing with tariffs&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Starting in 2018, the Trump administration launched &lt;strong&gt;four rounds of tariff actions&lt;/strong&gt; against China.&lt;/li&gt;
&lt;li&gt;Covered more than $360 billion of Chinese exports.&lt;/li&gt;
&lt;li&gt;Average US tariffs on Chinese goods rose from 3.1% to 21% (source: Peterson Institute for International Economics, 2020).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-why-can-he-raise-them-at-will&quot;&gt;&lt;strong&gt;3. Why can he “raise them at will”?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;US law gives the president many unilateral tools to raise tariffs:&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Legal provision&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Allows tariffs on the grounds of…&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Section 301&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Retaliatory tariffs against trading partners&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Section 232&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;”National security” tariffs (e.g., steel, aluminum)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;IEEPA&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;In emergencies, tariffs, asset freezes, embargoes (used against fentanyl)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;3-a-new-tariff-storm-is-it-just-trump-showmanship&quot;&gt;&lt;strong&gt;3. A New Tariff Storm: Is It Just “Trump Showmanship”?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;During the 2024 campaign, Trump proposed more aggressive tariff plans:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Up to &lt;strong&gt;125% tariffs&lt;/strong&gt; on Chinese goods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;25% tariffs&lt;/strong&gt; on neighbors like Canada and Mexico, citing “drugs and illegal immigration”&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;global 10% baseline tariff&lt;/strong&gt;, because “other countries take advantage”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These statements are partly campaign theatrics, but they also reflect that the US is treating tariffs as a normal national policy tool.&lt;/p&gt;
&lt;h2 id=&quot;4-why-does-the-us-keep-raising-tariffs-surface-vs-deep-logic&quot;&gt;&lt;strong&gt;4. Why Does the US Keep Raising Tariffs? Surface vs Deep Logic&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id=&quot;surface-level-reasons-official-narrative&quot;&gt;&lt;strong&gt;Surface-level reasons (official narrative)&lt;/strong&gt;&lt;/h3&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Reason&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Trade deficit is too large&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;China exports far more to the US than the US exports to China&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Protect manufacturing jobs&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Promote “manufacturing reshoring”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;National security&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Sensitive areas like chips, rare earths, fentanyl&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;deeper-layer-the-us-triple-dilemma&quot;&gt;&lt;strong&gt;Deeper layer: the US “triple dilemma”&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&quot;1-triffin-dilemma-side-effects-of-dollar-hegemony&quot;&gt;&lt;strong&gt;1. Triffin dilemma: side effects of dollar hegemony&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;As the issuer of the “world currency,” the US must continuously export dollars (i.e., buy from other countries) to meet global dollar demand.&lt;/li&gt;
&lt;li&gt;This leads to &lt;strong&gt;long-term trade deficits and hollowing-out of manufacturing&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;To maintain dollar hegemony, manufacturing must be sacrificed. This is the Triffin dilemma.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;2-rust-belt-votes-and-populist-demand&quot;&gt;&lt;strong&gt;2. Rust Belt votes and populist demand&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Traditional manufacturing regions in the US Midwest have long faced high unemployment and economic stagnation.&lt;/li&gt;
&lt;li&gt;Trump’s base is working-class voters in these “Rust Belt” areas.&lt;/li&gt;
&lt;li&gt;“Tariffs on China” can trigger their &lt;strong&gt;sense of deprivation + nationalist emotions&lt;/strong&gt;. It is a powerful political tool.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;3-high-fiscal-deficits-need-hidden-taxation&quot;&gt;&lt;strong&gt;3. High fiscal deficits, need “hidden taxation”&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;US national debt has exceeded $34 trillion (as of end-2024, source: US Treasury).&lt;/li&gt;
&lt;li&gt;Tariffs are not just trade policy but also &lt;strong&gt;a way to tax domestic consumers&lt;/strong&gt;, increasing fiscal revenue without directly raising income taxes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;5-do-tariffs-work-highly-contested&quot;&gt;&lt;strong&gt;5. Do Tariffs Work? Highly Contested&lt;/strong&gt;&lt;/h2&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Pro arguments&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Con arguments&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Short-term protection for manufacturing&lt;/td&gt;&lt;td&gt;Distorts price mechanisms and reduces resource allocation efficiency&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Increase government revenue&lt;/td&gt;&lt;td&gt;Burdens companies and consumers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;A bargaining tool&lt;/td&gt;&lt;td&gt;Disrupts global supply chain cooperation&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;According to a 2021 report from the US Congressional Budget Office (CBO), &lt;strong&gt;93% of the tariff cost in the last trade war was borne by US firms and consumers&lt;/strong&gt;, not Chinese exporters.&lt;/p&gt;
&lt;h2 id=&quot;6-who-pays-for-tariffs-consumers-and-companies&quot;&gt;&lt;strong&gt;6. Who Pays for Tariffs? Consumers and Companies&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Although factors like RMB depreciation can offset some impact in the short term, in the long run:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;US consumers&lt;/strong&gt; bear most of the cost through higher prices;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Companies in both China and the US&lt;/strong&gt; must sacrifice on margins, capacity, and supply chains;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global trade&lt;/strong&gt; becomes more uncertain, accelerating supply-chain “de-Chinaization.”&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Tariffs are a weapon that “seems to hit others but actually hits yourself and the global market.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;7-summary&quot;&gt;&lt;strong&gt;7. Summary&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The US keeps wielding tariffs. On the surface, it attacks opponents, but in essence it tries to use power to respond to its &lt;strong&gt;structural problems&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Side effects of dollar hegemony&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Industrial hollowing and populism&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High deficits and debt-driven fiscal imbalance&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this process, China is simply the most convenient “imagined enemy.”&lt;/p&gt;
&lt;p&gt;No matter who becomes president in the future, &lt;strong&gt;tariffs will only be used more often and will not disappear&lt;/strong&gt;. This is a reflection of global “de-globalization” and geopolitical fragmentation.&lt;/p&gt;
&lt;h2 id=&quot;appendix--a-simple-guide-to-tariffs-the-dollar-system-and-us-debt&quot;&gt;&lt;strong&gt;Appendix | A Simple Guide to Tariffs, the Dollar System, and US Debt&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id=&quot;tariff-terms&quot;&gt;&lt;strong&gt;Tariff terms&lt;/strong&gt;&lt;/h3&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Term&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Simple explanation&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Tariff&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;A tax on imported goods&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Baseline tariff&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;The default rate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Reciprocal tariff&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;A matching response to another country’s tariff policy&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;what-is-swift&quot;&gt;&lt;strong&gt;What is SWIFT?&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A “messaging system” for secure transfers between banks.&lt;/li&gt;
&lt;li&gt;It does not move money itself, only sends instructions.&lt;/li&gt;
&lt;li&gt;Analogy: the “logistics network” of banking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-bretton-woods-system&quot;&gt;&lt;strong&gt;The Bretton Woods System&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A global monetary system established in 1944, with the dollar pegged to gold and other currencies pegged to the dollar.&lt;/li&gt;
&lt;li&gt;It laid the foundation for dollar hegemony.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;triffin-dilemma&quot;&gt;&lt;strong&gt;Triffin Dilemma&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The world wants dollars, so the US must keep exporting dollars (buy, buy, buy).&lt;/li&gt;
&lt;li&gt;But too many dollars weakens trust.&lt;/li&gt;
&lt;li&gt;The contradiction between “globalizing the dollar” and “US self-interest.”&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-global-role-of-us-treasuries&quot;&gt;&lt;strong&gt;The Global Role of US Treasuries&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Absorb excess dollars globally, serving as the credit anchor of the dollar.&lt;/li&gt;
&lt;li&gt;Provide low-cost financing for the US government.&lt;/li&gt;
&lt;li&gt;Form a loop with the dollar: &lt;strong&gt;“dollars -&gt; buy Treasuries -&gt; the US spends again”&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see, &lt;strong&gt;tariffs are far from a simple “economic issue.”&lt;/strong&gt; They are a node where politics, fiscal policy, currency, and international order intertwine.&lt;/p&gt;</content:encoded></item><item><title>How Small Teams Implement Agile Development</title><link>https://blog.ly85.dev/en/posts/small-team-iteration-1-0/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/small-team-iteration-1-0/</guid><description>You can’t manage what you don’t measure.</description><pubDate>Mon, 14 Apr 2025 06:29:01 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;You can’t manage what you don’t measure. – Peter Drucker&lt;br&gt;
If you can’t measure it, you can’t manage it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a famous quote from Peter Drucker, the father of modern management. For project management and agile development, the prerequisite is to connect the data and make it visible and measurable—only then can you see it and manage it.&lt;/p&gt;
&lt;p&gt;This article uses a SaaS product as an example to explain how a “small team” can implement agile development in practice.&lt;/p&gt;
&lt;h1 id=&quot;why-implement-it&quot;&gt;Why Implement It&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Progress is opaque; we don’t know where the work actually is.&lt;/li&gt;
&lt;li&gt;Delayed releases become the norm, and we don’t know when things will ship.&lt;/li&gt;
&lt;li&gt;After releases, we feel uneasy and don’t know when issues or failures will appear.&lt;/li&gt;
&lt;li&gt;Communication cost is too high, and RD/FE/QA/PM are frequently misaligned.&lt;/li&gt;
&lt;li&gt;Requirements are inserted arbitrarily and frequently, without cost awareness.&lt;/li&gt;
&lt;li&gt;It’s unclear whether the R&amp;#x26;D workload is normal, overloaded, or underutilized.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In internet startups, demand and limited resources are always in conflict. Finding balance, focusing limited resources on strategic needs, and keeping team rhythm and morale are the pain points that agile management aims to solve. It also provides answers to the problems above.&lt;/p&gt;
&lt;h1 id=&quot;tools-we-use&quot;&gt;Tools We Use&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;The tools you use shape the way you work.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Atlassian Confluence&lt;/li&gt;
&lt;li&gt;Atlassian Jira&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;how-to-do-it-well&quot;&gt;How to Do It Well&lt;/h1&gt;
&lt;p&gt;“Requirement Review ➡️ Design Review ➡️ Development ➡️ Testing ➡️ Acceptance ➡️ Release ➡️ Post-Assessment”&lt;/p&gt;
&lt;p&gt;To make product and R&amp;#x26;D processes visible, controllable, and synchronized, we adopted a &lt;strong&gt;four-board&lt;/strong&gt; agile management model. The boards and their functions are as follows:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Public Requirement Board (Kanban Board)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Use this board to build a public requirement pool and collect requests from cross-functional stakeholders. Market feedback is routed here promptly. Board type: Kanban.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-01.jpg&quot; title=&quot;看板&quot; decoding=&quot;async&quot; alt=&quot;看板&quot;&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Requirement Board (Kanban Board)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Build a lifecycle for requirements and visualize flow across stages: “Backlog – Review – Scheduling – Design – Development – Release.”&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-02.jpg&quot; title=&quot;需求看板&quot; decoding=&quot;async&quot; alt=&quot;需求看板&quot;&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Task Efficiency Board (Scrum Board)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Predefine release windows so everyone can see schedule risk early. Product, engineering, and requesters can communicate quickly to sync changes or progress.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-03.jpg&quot; title=&quot;任务效能看板&quot; decoding=&quot;async&quot; alt=&quot;任务效能看板&quot;&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Bug Board (Kanban Board)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Track bug counts by type within the iteration clearly.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-04.jpg&quot; title=&quot;BUG看板&quot; decoding=&quot;async&quot; alt=&quot;BUG看板&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;public-requirement-management-public-requirement-board&quot;&gt;Public Requirement Management (Public Requirement Board)&lt;/h1&gt;
&lt;p&gt;Our company is in the education SaaS space. Public requirements mainly come from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Key customers (schools)&lt;/li&gt;
&lt;li&gt;Daily user feedback (teachers, students, parents)&lt;/li&gt;
&lt;li&gt;Sales channels&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We identify and filter fake, minor, or non-strategic requests here. Managing the many requests from business stakeholders is still hard. Common sources include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sales&lt;/li&gt;
&lt;li&gt;Marketing&lt;/li&gt;
&lt;li&gt;Internal (product roadmap / other)&lt;/li&gt;
&lt;li&gt;User experience feedback&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Customer success, sales, and other stakeholders can submit public requirements on this board. Product managers filter and research them, then convert them into product requirements and move them into the product backlog. The &lt;strong&gt;Public Requirement Board&lt;/strong&gt; card fields typically include: requirement description, source, reporter, and owner.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-05.jpg&quot; title=&quot;公开需求看板&quot; decoding=&quot;async&quot; alt=&quot;公开需求看板&quot;&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;If a requirement has very low value or will definitely not be done, move it directly to Done.&lt;/li&gt;
&lt;li&gt;If it has some value or needs analysis, move it to Research &amp;#x26; Discussion. After confirmation, move it to Done.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;product-rd-requirement-management-requirement-board&quot;&gt;Product R&amp;#x26;D Requirement Management (Requirement Board)&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Requirement categories&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Internally, we split requirements into two types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Product requirements: iteration, urgent, and routine requirements proposed by PMs&lt;/li&gt;
&lt;li&gt;Technical requirements: refactoring and improvement work for stability, scalability, and maintainability&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Requirement priority&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;An old saying goes: “An army must have a justification.” Requirements should, too. To help engineers understand importance and urgency, priority levels are essential.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Product requirement levels&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;P0: critical tasks that must be completed as fast as possible; can reassign people, pause other projects, and require overtime&lt;/li&gt;
&lt;li&gt;P1: very important tasks with a deadline; cannot be delayed; if a P0 appears, overtime is needed to protect the P1 deadline&lt;/li&gt;
&lt;li&gt;P2: important and impactful tasks with a deadline; can be postponed when P0/P1 appear (most tasks)&lt;/li&gt;
&lt;li&gt;P3: nice-to-have tasks, lowest priority&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Technical requirement levels&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;T0: major performance or security issues, requires urgent fixes&lt;/li&gt;
&lt;li&gt;T1: scalability or performance risks, usually handled as separate tasks&lt;/li&gt;
&lt;li&gt;T2: design or general performance issues, often improved during iterations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Product requirement management (Requirement Board)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PMs and engineers communicate through PRDs. Engineering ultimately develops and tests based on PRDs, so the first step is creating a PRD. PRDs are managed flexibly. Some PMs use Lanhu, others use MockingBot. To unify archiving, we store PRDs in Confluence (the detailed link can point to any tool). When creating in Confluence, use a template, as shown below:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-06.jpg&quot; title=&quot;需求模板&quot; decoding=&quot;async&quot; alt=&quot;需求模板&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;Main contents include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Background description&lt;/li&gt;
&lt;li&gt;Business goals&lt;/li&gt;
&lt;li&gt;Requirement links and feature list (stories)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;strong&gt;Requirement Board&lt;/strong&gt; has four swimlanes: P0, P1, below P1, and Technical Requirements. To make searching easier, we added common keywords to quick search. Each card includes: priority level, due date, and owner.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-07.jpg&quot; title=&quot;泳道图&quot; decoding=&quot;async&quot; alt=&quot;泳道图&quot;&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Technical requirement management (Requirement Board)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Examples include data structure changes or architecture improvements (e.g., switching to Apollo for config). These are considered technical requirements. Their display and board behavior is basically the same as product requirements and also appears on the &lt;strong&gt;Requirement Board&lt;/strong&gt;.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-08.jpg&quot; title=&quot;技术需求看板&quot; decoding=&quot;async&quot; alt=&quot;技术需求看板&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;technical-task-management-task-efficiency-board&quot;&gt;Technical Task Management (Task Efficiency Board)&lt;/h1&gt;
&lt;p&gt;This stage transitions from requirements to development. The tasks here include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Development tasks: RD, FE&lt;/li&gt;
&lt;li&gt;Developer self-testing: RD, FE&lt;/li&gt;
&lt;li&gt;Test case writing: QA&lt;/li&gt;
&lt;li&gt;Test case execution: QA&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These tasks mainly come from two sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Product requirements&lt;/li&gt;
&lt;li&gt;Technical requirements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We use the &lt;strong&gt;Task Efficiency Board&lt;/strong&gt; to manage them. Before starting, drag the product or technical requirements to be iterated from the Backlog, as shown:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-09.jpg&quot; title=&quot;Backlog&quot; decoding=&quot;async&quot; alt=&quot;Backlog&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;Then create sub-tasks under each product/technical requirement in the &lt;strong&gt;Requirement Board&lt;/strong&gt;, as shown:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-10.jpg&quot; title=&quot;创建子任务&quot; decoding=&quot;async&quot; alt=&quot;创建子任务&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;After creation, you can view parent/child task details and see effort tracking:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-11.jpg&quot; title=&quot;父子任务&quot; decoding=&quot;async&quot; alt=&quot;父子任务&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;Start the sprint and set the timeline:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-03.jpg&quot; title=&quot;Sprint Start&quot; decoding=&quot;async&quot; alt=&quot;Sprint Start&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;RD, QA, and FE fill in their daily work logs before the end of each day so we can track effort:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-12.jpg&quot; title=&quot;Work Report&quot; decoding=&quot;async&quot; alt=&quot;Work Report&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;bug-management-bug-board&quot;&gt;Bug Management (Bug Board)&lt;/h1&gt;
&lt;p&gt;Bugs created during a sprint appear on the &lt;strong&gt;Bug Board&lt;/strong&gt;. The workflow is: Open ➡️ In Progress ➡️ Resolved ➡️ Closed.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-13.jpg&quot; title=&quot;BUG看板&quot; decoding=&quot;async&quot; alt=&quot;BUG看板&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;We classify bug types as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Functional defects&lt;/li&gt;
&lt;li&gt;UI improvements&lt;/li&gt;
&lt;li&gt;Feature improvements&lt;/li&gt;
&lt;li&gt;Performance issues&lt;/li&gt;
&lt;li&gt;Security-related issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After the iteration ends, QA analyzes bug statistics and produces a test report. We created a unified Confluence template for test reports. The main contents look like this:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-14.jpg&quot; title=&quot;测试报告&quot; decoding=&quot;async&quot; alt=&quot;测试报告&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-1-15.jpg&quot; title=&quot;测试报告&quot; decoding=&quot;async&quot; alt=&quot;测试报告&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;
&lt;p&gt;Lifecycle management for requirements and efficiency is customized to our product and team stage. It should continue evolving as people and phases change. Below are the core processes and methods we use in Jira and Confluence:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4 boards
&lt;ul&gt;
&lt;li&gt;Public Requirement Board: handles “key customer demands” and “user experience issues” from market/sales-facing teams&lt;/li&gt;
&lt;li&gt;Requirement Board: manages product and technical requirements&lt;/li&gt;
&lt;li&gt;Task Efficiency Board: manages development phase tasks and effort tracking across RD/FE/QA&lt;/li&gt;
&lt;li&gt;Bug Board: manages five bug categories within iterations: feature improvements, functional defects, UI improvements, performance issues, and security-related issues&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2 templates
&lt;ul&gt;
&lt;li&gt;Product requirement template: manages product requirements&lt;/li&gt;
&lt;li&gt;Test report template: summarizes bugs and testing after each iteration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At this stage, we’ve only implemented a small part of agile management. Many more practices will be added and refined over time.&lt;/p&gt;
&lt;p&gt;Agile management exists to deliver products quickly and reliably. Don’t let the pursuit of agile tools distract you from the real goals.&lt;/p&gt;</content:encoded></item><item><title>Git Commit Guidelines</title><link>https://blog.ly85.dev/en/posts/git-commit-guidelines/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/git-commit-guidelines/</guid><description>Why commit conventions matter, an Angular GitHub example, and how to enforce the workflow with Commitizen, Husky, commitlint, and standard-version.</description><pubDate>Mon, 14 Apr 2025 06:14:55 GMT</pubDate><content:encoded>&lt;h1 id=&quot;why-we-need-it&quot;&gt;Why We Need It&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Reduce review cost by making changes and impact obvious.&lt;/li&gt;
&lt;li&gt;Standardize the team’s commit habits and improve engineering discipline.&lt;/li&gt;
&lt;li&gt;Use a consistent format so tools can generate changelogs automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/git-commit-guidelines-01.png&quot; title=&quot;Github DEMO&quot; decoding=&quot;async&quot; alt=&quot;Github DEMO&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;github-angular-demo&quot;&gt;GitHub Angular Demo&lt;/h1&gt;
&lt;p&gt;The Angular project on GitHub follows a strict Git message convention for daily commits and release management. Below is a snapshot of its commit history and the changelog generated from those commits.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/git-commit-guidelines-02.png&quot; title=&quot;Github ChangeLog&quot; decoding=&quot;async&quot; alt=&quot;Github ChangeLog&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;which-standard-to-follow&quot;&gt;Which Standard to Follow&lt;/h1&gt;
&lt;p&gt;The most commonly used convention is the AngularJS standard.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines&quot;&gt;angular/angular.js&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Includes three parts: Header, Body, and Footer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;type&gt;(&amp;#x3C;scope&gt;): &amp;#x3C;subject&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// blank line&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;body&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// blank line&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;footer&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;header&quot;&gt;Header&lt;/h2&gt;
&lt;p&gt;Header includes three fields: type (required), scope (optional), and subject (required).&lt;/p&gt;
&lt;p&gt;No line should exceed 100 characters.&lt;/p&gt;
&lt;h3 id=&quot;type&quot;&gt;type&lt;/h3&gt;
&lt;p&gt;Type describes the commit category. Common types include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;feat: A new feature&lt;/li&gt;
&lt;li&gt;fix: A bug fix&lt;/li&gt;
&lt;li&gt;docs: Documentation only changes&lt;/li&gt;
&lt;li&gt;style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)&lt;/li&gt;
&lt;li&gt;refactor: A code change that neither fixes a bug nor adds a feature&lt;/li&gt;
&lt;li&gt;perf: A code change that improves performance&lt;/li&gt;
&lt;li&gt;test: Adding missing or correcting existing tests&lt;/li&gt;
&lt;li&gt;chore: Changes to the build process or auxiliary tools and libraries such as documentation generation&lt;/li&gt;
&lt;li&gt;revert: Reverts a previous commit&lt;/li&gt;
&lt;li&gt;build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)&lt;/li&gt;
&lt;li&gt;ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the type is &lt;code&gt;feat&lt;/code&gt; or &lt;code&gt;fix&lt;/code&gt;, the commit will appear in the changelog. For other types, decide whether they should be included.&lt;/p&gt;
&lt;h3 id=&quot;scope&quot;&gt;scope&lt;/h3&gt;
&lt;p&gt;Scope describes the area affected, such as data layer, controller, or view layer. It varies by project.&lt;/p&gt;
&lt;h3 id=&quot;subject&quot;&gt;subject&lt;/h3&gt;
&lt;p&gt;Subject is a short description of the commit’s purpose.&lt;/p&gt;
&lt;h2 id=&quot;body&quot;&gt;Body&lt;/h2&gt;
&lt;p&gt;Body is a detailed description of the commit and can be multi-line.&lt;/p&gt;
&lt;h2 id=&quot;footer&quot;&gt;Footer&lt;/h2&gt;
&lt;p&gt;Footer is used only in two cases.&lt;/p&gt;
&lt;h3 id=&quot;breaking-changes&quot;&gt;Breaking changes&lt;/h3&gt;
&lt;p&gt;If the current code is incompatible with the previous version, start the Footer with &lt;code&gt;BREAKING CHANGE&lt;/code&gt;, followed by a description, rationale, and migration steps.&lt;/p&gt;
&lt;h3 id=&quot;closing-issues&quot;&gt;Closing issues&lt;/h3&gt;
&lt;p&gt;If the commit targets an issue, you can close it in the Footer.&lt;/p&gt;
&lt;p&gt;Example: Closes #123, #245, #992&lt;/p&gt;
&lt;h1 id=&quot;tooling-constraints&quot;&gt;Tooling Constraints&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Our goal is to generate and enforce conventions through tools.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;commitizen&quot;&gt;Commitizen&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/commitizen/cz-cli&quot;&gt;commitizen/cz-cli&lt;/a&gt; replaces &lt;code&gt;git commit&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;git cz&lt;/code&gt; command to generate commit messages that follow the convention.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Install (make sure npm is installed first)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Global install of commitizen&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm install commitizen -g&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You also need to specify an adapter for Commitizen, such as &lt;code&gt;cz-conventional-changelog&lt;/code&gt; (a preset that follows the Angular convention), so Commitizen can generate compliant messages.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Go to your repo root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cd your_repo_root_path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Initialize package.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm init --yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Set the adapter for commitizen&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;commitizen init cz-conventional-changelog --save-dev --save-exact&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you can use &lt;code&gt;git cz&lt;/code&gt; for commits.&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/git-commit-guidelines-03.png&quot; decoding=&quot;async&quot; alt=&quot;Commit例子&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;However, if you still use &lt;code&gt;git commit -m &quot;&quot;&lt;/code&gt;, Git will accept it, which isn’t what we want. We need format enforcement, so we add commitlint + Husky.&lt;/p&gt;
&lt;h2 id=&quot;commitlint--husky&quot;&gt;Commitlint + Husky&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/marionebl/commitlint&quot;&gt;commitlint&lt;/a&gt; checks commit message format.&lt;/p&gt;
&lt;p&gt;If a commit does not match the target convention, it should be rejected.&lt;/p&gt;
&lt;p&gt;The best way to validate commit messages is via git hooks, so we use Husky.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# In your repo root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm install --save-dev @commitlint/{config-conventional,cli}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm install husky --save-dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Add to the end of package.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&quot;husky&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;hooks&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      &quot;commit-msg&quot;: &quot;commitlint -E HUSKY_GIT_PARAMS&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    } &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Create commitlint.config.js in the repo root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;module.exports = {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  extends: [&apos;@commitlint/config-conventional&apos;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  rules: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;type-enum&apos;: [2, &apos;always&apos;, [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     &quot;feat&quot;, &quot;fix&quot;, &quot;docs&quot;, &quot;style&quot;, &quot;refactor&quot;, &quot;perf&quot;, &quot;test&quot;, &quot;build&quot;, &quot;ci&quot;, &quot;chore&quot;, &quot;revert&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   ]],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;scope-empty&apos;: [2, &apos;never&apos;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;subject-full-stop&apos;: [0, &apos;never&apos;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;subject-case&apos;: [0, &apos;never&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now try &lt;code&gt;git commit -m &quot;test&quot;&lt;/code&gt; and you should see it blocked:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/git-commit-guidelines-04.png&quot; title=&quot;Git Hooks例子&quot; decoding=&quot;async&quot; alt=&quot;Git Hooks例子&quot;&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;standard-version&quot;&gt;Standard Version&lt;/h2&gt;
&lt;p&gt;With the tooling above, your commit messages should follow the Angular convention. That also makes it easy to use a tool like &lt;code&gt;standard-version&lt;/code&gt; to generate CHANGELOGs and even semantic versions.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# In your repo root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm install --save-dev standard-version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Add a script to package.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &quot;scripts&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;release&quot;: &quot;standard-version&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Generate changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# First time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm run release -- --first-release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Later&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm run release&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A CHANGELOG.md file will be generated in the repo root:&lt;/p&gt;
&lt;figure class=&quot;wp-block-image&quot;&gt;
&lt;img src=&quot;https://s2.loli.net/2024/02/04/v75XCrs8zeyHuZA.png&quot; title=&quot;Change Log&quot; decoding=&quot;async&quot; alt=&quot;Change Log&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;how-to-use-it-in-a-project&quot;&gt;How to Use It in a Project&lt;/h1&gt;
&lt;p&gt;After completing the steps above, you’ll end up with a &lt;code&gt;package.json&lt;/code&gt;. Commit only &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;commitlint.config.js&lt;/code&gt; to your repo.&lt;/p&gt;
&lt;p&gt;Add &lt;code&gt;node_modules&lt;/code&gt; and &lt;code&gt;package-lock.json&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When someone clones the project, they can run &lt;code&gt;npm install&lt;/code&gt; in the repo root to set everything up.&lt;/p&gt;
&lt;p&gt;PS: If npm mirrors are unstable overseas, you can switch to the Taobao registry.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm config set registry https://registry.npm.taobao.org&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded></item><item><title>Git Branch Guidelines</title><link>https://blog.ly85.dev/en/posts/git-branch-guidelines/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/git-branch-guidelines/</guid><description>Daily development pain points, the goals of branch management, and our team’s Git branching model.</description><pubDate>Mon, 14 Apr 2025 06:11:02 GMT</pubDate><content:encoded>&lt;h1 id=&quot;problems-we-face-in-day-to-day-development&quot;&gt;Problems We Face in Day-to-Day Development&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;When we need to hotfix a production bug, how should we branch? Do we change &lt;code&gt;develop&lt;/code&gt; or &lt;code&gt;master&lt;/code&gt; directly?&lt;/li&gt;
&lt;li&gt;We often have multiple parallel features with different release dates, owned by different sub-teams. Managing these parallel tracks and shipping the correct code is hard.&lt;/li&gt;
&lt;li&gt;Everyone names branches differently, and interpretations vary. Right before release we discover the wrong branches were merged.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;goals-of-branch-management&quot;&gt;Goals of Branch Management&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Commit code to the branch where it belongs.&lt;/li&gt;
&lt;li&gt;Be able to switch to the stable production code at any time.&lt;/li&gt;
&lt;li&gt;Develop multiple versions in parallel.&lt;/li&gt;
&lt;li&gt;Make the purpose of each branch clear and ensure operations match that purpose.&lt;/li&gt;
&lt;li&gt;Use Git to manage iterations, hotfixes, and feature development.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;a-reference-from-a-predecessor&quot;&gt;A Reference From a Predecessor&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;A successful Git branching model&lt;br&gt;
By Vincent Driessen on Tuesday, January 05, 2010&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;A successful Git branching model&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is not official Git or GitHub documentation. It’s a personal summary based on that author’s team at the time, so it doesn’t map directly to our current workflow. After studying Git Flow, we defined our own team conventions.&lt;/p&gt;
&lt;h1 id=&quot;our-conventions&quot;&gt;Our Conventions&lt;/h1&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/git-branch-guidelines-01.jpg&quot; title=&quot;我们的Git分支模型&quot; decoding=&quot;async&quot; alt=&quot;我们的Git分支模型&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;feature/sprintXX&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purpose: new feature iteration development&lt;/li&gt;
&lt;li&gt;Environment: DEV&lt;/li&gt;
&lt;li&gt;Create: from &lt;code&gt;develop&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete: after release&lt;/li&gt;
&lt;li&gt;Restriction: none&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;test/sprintXX&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purpose: testing for new feature iterations&lt;/li&gt;
&lt;li&gt;Environment: FAT&lt;/li&gt;
&lt;li&gt;Create: from feature branch (before each test, merge &lt;code&gt;develop&lt;/code&gt; into &lt;code&gt;feature&lt;/code&gt;, then merge &lt;code&gt;feature&lt;/code&gt; into &lt;code&gt;test&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Delete: after release&lt;/li&gt;
&lt;li&gt;Restriction: No Push / developer merge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;hotfix/yyyyMMdd&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purpose: production issue fix&lt;/li&gt;
&lt;li&gt;Environment: FAT&lt;/li&gt;
&lt;li&gt;Create: from &lt;code&gt;master&lt;/code&gt; (after release, merge back to &lt;code&gt;master&lt;/code&gt; and &lt;code&gt;develop&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Delete: after release&lt;/li&gt;
&lt;li&gt;Restriction: none&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;develop&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purpose: contains the latest feature code, base for &lt;code&gt;feature/sprintXX&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Restriction: No Push / developer merge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;master&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purpose: stable code&lt;/li&gt;
&lt;li&gt;Environment: PROD&lt;/li&gt;
&lt;li&gt;Restriction: No Push / merge by limited maintainers&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;branch-operations&quot;&gt;Branch Operations&lt;/h1&gt;
&lt;h2 id=&quot;use-rebase-on-featuresprintxx-branches&quot;&gt;Use rebase on &lt;code&gt;feature/sprintXX&lt;/code&gt; branches&lt;/h2&gt;
&lt;p&gt;To keep a clean commit graph. &lt;code&gt;git pull&lt;/code&gt; defaults to merge, so you can use rebase:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;git pull --rebase&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# also set a global config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;git config --global pull.rebase true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;git config --global branch.autoSetupRebase always&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;use-no-ff-for-merges&quot;&gt;Use &lt;code&gt;no-ff&lt;/code&gt; for merges&lt;/h2&gt;
&lt;p&gt;Fast-forward merges produce a straight line and hide the branch history. Using &lt;code&gt;--no-ff&lt;/code&gt; makes feature branch merges explicit:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Merge sprint01 into develop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;git merge --no-ff feature/sprint01&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded></item><item><title>Code Review Practice</title><link>https://blog.ly85.dev/en/posts/code-review-practice/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/code-review-practice/</guid><description>What is Code Review? Google says the biggest thing that makes its code so good is code review.</description><pubDate>Mon, 14 Apr 2025 05:52:08 GMT</pubDate><content:encoded>&lt;h1 id=&quot;what-is-code-review&quot;&gt;What Is Code Review&lt;/h1&gt;
&lt;p&gt;Google Code Review’s description&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The biggest thing that makes Google’s code so good is simple: code review. At Google, no code, for any product, for any project, gets checked in until it gets a positive review.&lt;/p&gt;
&lt;p&gt;The reason Google’s code is so good is simple: code review. At Google, no code for any product or project gets merged without review.&lt;/p&gt;
&lt;p&gt;It is a culture, not a policy.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;why-its-needed&quot;&gt;Why It’s Needed&lt;/h1&gt;
&lt;h2 id=&quot;pain-points-at-work&quot;&gt;Pain Points at Work&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Everyone’s code style is inconsistent&lt;/li&gt;
&lt;li&gt;Interfaces, classes, and names are inconsistent&lt;/li&gt;
&lt;li&gt;Deep logic problems are hard to catch via tests&lt;/li&gt;
&lt;li&gt;Complaints like “Who designed this? So many traps (maybe it was me months ago)”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-it-brings&quot;&gt;What It Brings&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Better code quality&lt;/li&gt;
&lt;li&gt;Team knowledge sharing&lt;/li&gt;
&lt;li&gt;Unified team standards&lt;/li&gt;
&lt;li&gt;A shared culture of good code&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;what-to-review&quot;&gt;What to Review&lt;/h1&gt;
&lt;h2 id=&quot;google-review-principles&quot;&gt;Google Review Principles&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://google.github.io/eng-practices/review/reviewer/looking-for.html&quot;&gt;What to look for in a code review&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Design: Is the code well-designed and appropriate for your system?&lt;/li&gt;
&lt;li&gt;Functionality: Does the code behave as the author likely intended? Is the way the code behaves good for its users?&lt;/li&gt;
&lt;li&gt;Complexity: Could the code be made simpler? Would another developer be able to easily understand and use this code when they come across it in the future?&lt;/li&gt;
&lt;li&gt;Tests: Does the code have correct and well-designed automated tests?&lt;/li&gt;
&lt;li&gt;Naming: Did the developer choose clear names for variables, classes, methods, etc.?&lt;/li&gt;
&lt;li&gt;Comments: Are the comments clear and useful?&lt;/li&gt;
&lt;li&gt;Style: Does the code follow our style guides?&lt;/li&gt;
&lt;li&gt;Documentation: Did the developer also update relevant documentation?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;our-review-principles&quot;&gt;Our Review Principles&lt;/h2&gt;
&lt;h3 id=&quot;architecture-and-design&quot;&gt;Architecture and Design&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;S.O.L.I.D
&lt;ul&gt;
&lt;li&gt;Single Responsibility Principle (SRP)&lt;/li&gt;
&lt;li&gt;Open/Closed Principle (OCP)&lt;/li&gt;
&lt;li&gt;Liskov Substitution Principle (LSP)&lt;/li&gt;
&lt;li&gt;Interface Segregation Principle (ISP)&lt;/li&gt;
&lt;li&gt;Dependency Inversion Principle (DIP)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Consistent behavior
&lt;ul&gt;
&lt;li&gt;Is caching consistent? Is error handling consistent? Are error messages consistent?&lt;/li&gt;
&lt;li&gt;Do the same logic/behavior go through the same code path? Another symptom of low-quality code is that the same behavior/logic appears in different places or is triggered in different ways, without a unified code path, or with copy-pasted implementations everywhere, making maintenance very hard.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DRY principle (Don’t repeat yourself)&lt;/li&gt;
&lt;li&gt;Program to interfaces, not implementations&lt;/li&gt;
&lt;li&gt;Robustness
&lt;ul&gt;
&lt;li&gt;Are corner cases fully considered? Is the logic robust? Any potential bugs?&lt;/li&gt;
&lt;li&gt;Any memory leaks? Any circular dependencies (language-specific, e.g., Objective‑C)? Any wild pointers?&lt;/li&gt;
&lt;li&gt;Thread safety? Data access consistency?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Error handling
&lt;ul&gt;
&lt;li&gt;Good error handling? e.g., network errors, IO errors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Efficiency / performance
&lt;ul&gt;
&lt;li&gt;For frequent messages or large data, are time‑consuming operations handled properly?&lt;/li&gt;
&lt;li&gt;What’s the time complexity of critical algorithms? Any potential performance bottlenecks?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;style&quot;&gt;Style&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Engineering conventions (project structure, layering, naming, etc.)&lt;/li&gt;
&lt;li&gt;Apollo configuration conventions&lt;/li&gt;
&lt;li&gt;Naming conventions (interfaces, classes, methods, variables, etc.)&lt;/li&gt;
&lt;li&gt;Code style (braces, spaces, line breaks, indentation)&lt;/li&gt;
&lt;li&gt;Comment conventions (required comments)&lt;/li&gt;
&lt;li&gt;Logging conventions (log what’s necessary)&lt;/li&gt;
&lt;li&gt;DB SQL conventions&lt;/li&gt;
&lt;li&gt;URL conventions&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;how-to-do-code-review&quot;&gt;How to Do Code Review&lt;/h1&gt;
&lt;h2 id=&quot;team-prerequisites&quot;&gt;Team Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Git Branch Model&lt;/li&gt;
&lt;li&gt;Git commit messages (should clearly describe changes)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-to-trigger&quot;&gt;When to Trigger&lt;/h2&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/code-review-practice-01.png&quot; title=&quot;Git分支模型&quot; decoding=&quot;async&quot; alt=&quot;Git分支模型&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/code-review-practice-02.png&quot; title=&quot;Review流程&quot; decoding=&quot;async&quot; alt=&quot;Review流程&quot;&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitLab&lt;/li&gt;
&lt;li&gt;SonarQube&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cnblogs.com/dotey/p/11216430.html?hmsr=toutiao.io&amp;#x26;utm_campaign=toutiao.io&amp;#x26;utm_medium=toutiao.io&amp;#x26;utm_source=toutiao.io&quot;&gt;Code Review最佳实践&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s?__biz=Mzg3NjU1NzM1Mw==&amp;#x26;mid=2247487384&amp;#x26;idx=1&amp;#x26;sn=5ef9d9123eccafc9bdb59a40f01306cf&amp;#x26;chksm=cf312adef846a3c86b19c526cd3263ac7b7f1f79088d538482813d02854643a26bfdc8e0f76e&amp;#x26;token=1491313091&amp;#x26;lang=zh_CN#rd&quot;&gt;来，一起品品 Google 的 Code Review 规范&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s/R9e-2MbfBAcc1kCOZNRuYw&quot;&gt;如何在团队中做好Code Review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/31786640&quot;&gt;【译】如何用人类的方式进行 Code Review（二）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://juejin.cn/post/6844903425587544071&quot;&gt;Code Review 最佳实践&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/82324809&quot;&gt;设计模式之SOLID原则&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://juejin.cn/post/6844904032264257549&quot;&gt;如何在团队中做好Code Review&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>As an R&amp;D Leader, How to Summarize</title><link>https://blog.ly85.dev/en/posts/as-leader-how-to-summary/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/as-leader-how-to-summary/</guid><description>Why summarize? &quot;When actions fail, seek the cause in yourself&quot; (Mencius). Reflection helps us become better people and teams.</description><pubDate>Mon, 14 Apr 2025 03:58:33 GMT</pubDate><content:encoded>&lt;h1 id=&quot;why-summarize&quot;&gt;Why Summarize&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;“When actions fail, seek the cause in yourself.” — &lt;em&gt;Mencius&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Learning to look for reasons in ourselves can help us become better people.&lt;/p&gt;
&lt;p&gt;Whether for individuals or teams, doing a targeted year-end summary (preferably data-driven) is very helpful for finding problems and improving.&lt;/p&gt;
&lt;p&gt;Avoid summarizing just for the sake of summarizing. We should use objective facts (data is a good tool) to find the causes behind problems, then try to change and improve.&lt;/p&gt;
&lt;h1 id=&quot;preparation&quot;&gt;Preparation&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;A thinking framework is more important than the thinking content.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;avoid-a流水账&quot;&gt;Avoid a流水账&lt;/h2&gt;
&lt;p&gt;As an R&amp;#x26;D leader, when summarizing I first avoid a流水账 (chronological diary). Don’t start by thinking “what we did this year,” because that easily gets lost in details.&lt;/p&gt;
&lt;h2 id=&quot;think-what-kind-of-team-do-we-need&quot;&gt;Think: What Kind of Team Do We Need?&lt;/h2&gt;
&lt;p&gt;As a child, we were often asked, “What kind of person do you want to become?” Managing a team follows the same logic: first think about “what kind of team we need.” At the start of 2021, our guiding idea was “become a professional team,” and over the following year we adhered to that principle.&lt;/p&gt;
&lt;h2 id=&quot;guiding-principles-for-team-building&quot;&gt;Guiding Principles for Team Building&lt;/h2&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-summary-01.png&quot; title=&quot;指导思想&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;abstract-the-teams-work-categories&quot;&gt;Abstract the Team’s Work Categories&lt;/h2&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-summary-02.png&quot; title=&quot;工作分类&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;my-approach&quot;&gt;My Approach&lt;/h1&gt;
&lt;h2 id=&quot;what-we-did&quot;&gt;What We Did&lt;/h2&gt;
&lt;p&gt;Recommend describing key items according to the work categories.&lt;/p&gt;
&lt;h2 id=&quot;what-we-achieved-what-we-didnt&quot;&gt;What We Achieved, What We Didn’t&lt;/h2&gt;
&lt;p&gt;Compare what we did with objective data feedback and the goals set at the beginning of the year. Analyze the gaps, find root causes, and provide improvement ideas for the next year.&lt;/p&gt;
&lt;h2 id=&quot;share-personal-or-team-how-to-insights-methods&quot;&gt;Share Personal or Team “How-To” Insights (Methods)&lt;/h2&gt;
&lt;p&gt;The intent is to raise team cognition: giving a fish is not as good as teaching how to fish.&lt;/p&gt;
&lt;h1 id=&quot;my-2021-summary-partial&quot;&gt;My 2021 Summary (Partial)&lt;/h1&gt;
&lt;h2 id=&quot;what-we-did-1&quot;&gt;What We Did&lt;/h2&gt;
&lt;p&gt;Iteration&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-summary-03.png&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-summary-04.png&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-summary-05.png&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Arch&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Backend
&lt;ul&gt;
&lt;li&gt;Content too sensitive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Frontend
&lt;ul&gt;
&lt;li&gt;Content too sensitive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Assets&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tools&lt;/li&gt;
&lt;li&gt;Servers and environments&lt;/li&gt;
&lt;li&gt;Code planning &amp;#x26; design
&lt;ul&gt;
&lt;li&gt;Content too sensitive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Team&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Architecture
&lt;ul&gt;
&lt;li&gt;Content too sensitive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Incentives
&lt;ul&gt;
&lt;li&gt;Content too sensitive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Activities
&lt;ul&gt;
&lt;li&gt;Content too sensitive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-summary-06.png&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-summary-07.png&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;what-we-achieved-what-we-didnt-1&quot;&gt;What We Achieved, What We Didn’t&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Content too sensitive&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;share-personal-or-team-how-to-insights-methods-1&quot;&gt;Share Personal or Team “How-To” Insights (Methods)&lt;/h2&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-summary-08.png&quot; title=&quot;做事心得&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;</content:encoded></item><item><title>As an R&amp;D Leader, How to Plan</title><link>https://blog.ly85.dev/en/posts/as-leader-howt-to-plan/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/as-leader-howt-to-plan/</guid><description>In Q2 we reviewed iteration results and OKRs, then had to break down Q3 OKRs. That experience exposed how vague “listing problems and setting goals” can be.</description><pubDate>Mon, 14 Apr 2025 03:49:59 GMT</pubDate><content:encoded>&lt;h1 id=&quot;real-world-planning&quot;&gt;Real-World Planning&lt;/h1&gt;
&lt;p&gt;In the Q2 that just ended, we reviewed iteration results and OKRs, and then immediately had to break down Q3 OKRs. During that process, I talked with a few teammates and found that most people see planning as listing problems, setting some targets for each, and then executing. This makes target accuracy, logical consistency, and even whether something is truly a goal highly uncertain.&lt;/p&gt;
&lt;h1 id=&quot;methods-of-planning&quot;&gt;Methods of Planning&lt;/h1&gt;
&lt;p&gt;The way we plan reflects how we think when facing problems. Here we need to understand two basic logical analysis methods: &lt;strong&gt;deduction&lt;/strong&gt; and &lt;strong&gt;induction&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;deduction&quot;&gt;Deduction&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;A method of reasoning that starts from a theory reflecting objective laws and infers unknown parts of a thing from its known parts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;example&quot;&gt;Example&lt;/h3&gt;
&lt;p&gt;Aristotle’s classic syllogism is a form of deduction.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Major premise: All humans die.
Minor premise: Socrates is human.
Conclusion: Socrates will die.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the premises are correct, the conclusion is correct.&lt;/p&gt;
&lt;h2 id=&quot;induction&quot;&gt;Induction&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;A method of reasoning that, based on a series of experiences or knowledge materials, finds the basic or common laws they follow and assumes other similar things will follow those laws as well.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;example-1&quot;&gt;Example&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Premise: My aunt made money with P2P, my younger aunt made money with P2P, coworker A made money with P2P. Conclusion: I will also make money with P2P.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a typical inductive inference: because we observe many people making money with P2P, we conclude that we can too, and we make a prediction about the future.&lt;/p&gt;
&lt;h2 id=&quot;which-method-we-should-use&quot;&gt;Which Method We Should Use&lt;/h2&gt;
&lt;p&gt;From the examples, it is clear that induction has risks: it treats the past performance of a thing as the thing’s inherent attribute, so it assumes the future trend will be the same.&lt;/p&gt;
&lt;p&gt;With deduction, as long as the premises are correct, the conclusion is correct. Therefore, when we use deduction, we must ensure our major and minor premises are truly correct.&lt;/p&gt;
&lt;p&gt;The method I use here is &lt;strong&gt;deduction&lt;/strong&gt;.&lt;/p&gt;
&lt;h1 id=&quot;the-value-of-planning&quot;&gt;The Value of Planning&lt;/h1&gt;
&lt;h2 id=&quot;identify-key-tasks&quot;&gt;Identify “Key Tasks”&lt;/h2&gt;
&lt;p&gt;The primary value of planning is to find the most important parts for the team or organization within complex reality, and then concentrate resources on execution.&lt;/p&gt;
&lt;h2 id=&quot;think-from-the-whole&quot;&gt;Think from the Whole&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Those who do not plan for the long term cannot plan for the short term; those who do not plan for the whole cannot plan for a part. — Chen Danran (Qing Dynasty)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another value of planning is to think from the whole and from first principles, ensuring our plan is logical, reflects objective laws, and is based on the right premises.&lt;/p&gt;
&lt;p&gt;As the definition of deduction says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A method of reasoning that starts from a theory reflecting objective laws and infers unknown parts of a thing from its known parts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;make-goals-everyones-goals&quot;&gt;Make Goals Everyone’s Goals&lt;/h2&gt;
&lt;p&gt;After planning, we should clearly explain the analytical reasoning and “why” behind the plan to the team. Only when everyone truly understands the plan can they execute the goals well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A very important job of an R&amp;#x26;D leader is to “identify key tasks,” find team and technical architecture problems, make systematic plans, and guide the team to solve them.&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&quot;a-6-month-planning-demo-for-a-saas-product&quot;&gt;A 6-Month Planning Demo for a SaaS Product&lt;/h1&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/How-to-plan-01.png&quot; title=&quot;分析思路&quot; decoding=&quot;async&quot; alt=&quot;分析思路&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/How-to-plan-02.png&quot; title=&quot;分析思路&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;</content:encoded></item><item><title>R&amp;D Management Practice with Structural Thinking</title><link>https://blog.ly85.dev/en/posts/dev-structural-thinking/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/dev-structural-thinking/</guid><description>Starting from the idea of &quot;begin with the end in mind,&quot; this post explains why structured thinking matters in R&amp;D management and how it guides planning and decisions.</description><pubDate>Mon, 14 Apr 2025 03:45:38 GMT</pubDate><content:encoded>&lt;h2 id=&quot;why-think-about-structuring&quot;&gt;Why Think About “Structuring”&lt;/h2&gt;
&lt;h3 id=&quot;people&quot;&gt;People&lt;/h3&gt;
&lt;p&gt;A few years ago, I was lucky to read &lt;em&gt;The 7 Habits of Highly Effective People&lt;/em&gt; (search it on Douban if you are interested). It presents a crucial logic for how we live: &lt;strong&gt;“Begin with the end in mind.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It tells us to be principle-centered rather than driven by events or appearances. We need stable principles that guide our lives.&lt;/p&gt;
&lt;h3 id=&quot;team&quot;&gt;Team&lt;/h3&gt;
&lt;p&gt;Team management is the same. As a leader, you need to identify the key tasks and keep the team moving in the right direction. So you also need to &lt;strong&gt;“begin with the end in mind”&lt;/strong&gt;—find stable principles for an R&amp;#x26;D team. Then output in a structured way, improving product capability and team capability around those principles and progressing continuously.&lt;/p&gt;
&lt;h2 id=&quot;the-compass&quot;&gt;The Compass&lt;/h2&gt;
&lt;p&gt;The team’s “compass” guides work decisions.&lt;/p&gt;
&lt;p&gt;We should follow the principle of “begin with the end in mind” to provide a stable, structured thinking framework and work framework for various choices and decisions.&lt;/p&gt;
&lt;p&gt;That is the core meaning of the compass.&lt;/p&gt;
&lt;h3 id=&quot;composition&quot;&gt;Composition&lt;/h3&gt;
&lt;h4 id=&quot;rd-effectiveness-metrics&quot;&gt;R&amp;#x26;D Effectiveness Metrics&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Goal: the ability to continuously deliver value quickly is the core objective of efficiency improvement.&lt;/strong&gt;&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric Item&lt;/th&gt;&lt;th&gt;Sub-metric&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Delivery throughput&lt;/td&gt;&lt;td&gt;Number of versions delivered per unit time&lt;/td&gt;&lt;td&gt;The number of versions delivered in 1 month or 1 quarter (trend-focused)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Demand response time&lt;/td&gt;&lt;td&gt;Delivery cycle&lt;/td&gt;&lt;td&gt;Average time from demand kickoff to release&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;Development cycle&lt;/td&gt;&lt;td&gt;Average time from coding start to production release&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Delivery quality&lt;/td&gt;&lt;td&gt;Bugs per story point / function point&lt;/td&gt;&lt;td&gt;Calculated differently by iteration type&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;Online issues fixed per unit time&lt;/td&gt;&lt;td&gt;The number of online issues fixed in 1 month or 1 quarter&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Continuous release capability&lt;/td&gt;&lt;td&gt;Release frequency&lt;/td&gt;&lt;td&gt;Number of releases in 1 month or 1 quarter&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;Release time&lt;/td&gt;&lt;td&gt;Average time from code merge completion to production release&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 id=&quot;system-availability-metrics&quot;&gt;System Availability Metrics&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Goal: fully reflect system health, build SLI/SLO, and provide extremely high stability and availability to users.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Based on Google’s SRE theory, observe system health through SLI, SLO, and SLA.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SLI&lt;/li&gt;
&lt;li&gt;SLO&lt;/li&gt;
&lt;li&gt;SLA&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;work-logic&quot;&gt;Work Logic&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Our team is responsible for a SaaS product, so we abstracted a structured model of our work logic.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Dev-structural-thinking-01.png&quot; alt=&quot;Work Logic&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;rd-capability-levels&quot;&gt;R&amp;#x26;D Capability Levels&lt;/h2&gt;
&lt;p&gt;Current levels: &lt;strong&gt;Poor&lt;/strong&gt;, &lt;strong&gt;Fair&lt;/strong&gt;, &lt;strong&gt;Average&lt;/strong&gt;, &lt;strong&gt;Good&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Dev-structural-thinking-02.png&quot; alt=&quot;Capability Levels&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;takeaways&quot;&gt;Takeaways&lt;/h2&gt;
&lt;p&gt;This abstract structured work logic has been running for a while and has produced some results, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In planning, we now have a stable structure to continuously improve specific capabilities&lt;/li&gt;
&lt;li&gt;In goals, the team is clear about the overall plan for the next two quarters&lt;/li&gt;
&lt;li&gt;In decisions, we identify key tasks based on “structure” and “principles”&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>My 2024</title><link>https://blog.ly85.dev/en/posts/my-2024/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/my-2024/</guid><description>Looking back on 2024: travel, work, inputs and outputs, and the boundaries of ability from a midlife perspective.</description><pubDate>Sat, 04 Jan 2025 09:18:33 GMT</pubDate><content:encoded>&lt;p&gt;Today is the first Saturday of 2025, and I am working overtime. I spent the day writing my team’s 2024 summary, and at night I finally had time to review what I did in 2024. If I pause and think, what would I say to my 2025 self?&lt;/p&gt;
&lt;p&gt;At this moment, a famous line from Romain Rolland came to mind:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is only one true heroism in the world: to see the world as it is and still love it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For me in midlife, this line means something different: it sounds grand, yet feels ordinary. What is “life” anyway? The life each person has lived or can live is completely different. Standing at the start of 2025, I would tell my future self: build the ability to choose what kind of life you want. In a difficult environment, expand your capability boundaries and give the future more possibilities.&lt;/p&gt;
&lt;h2 id=&quot;travel&quot;&gt;Travel&lt;/h2&gt;
&lt;p&gt;This year I visited a few places at home and abroad and experienced different cultures. I also met an old friend in Hangzhou and talked for two days straight.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;February trip: Fuzhou -&gt; Quanzhou -&gt; Xiamen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fuzhou: got our New Year’s Eve dinner before McDonald’s closed so we did not end up eating instant noodles on New Year’s Eve.&lt;/p&gt;
&lt;p&gt;Quanzhou: half the city is fireworks, half the city is gods. There is a temple every few hundred meters. You can feel the ease and calm of living there, as if no problem is too big for so many deities.&lt;/p&gt;
&lt;p&gt;Xiamen: a city I have visited many times. A classic seaside town. This time I skipped the famous attractions and just wandered.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;March: visiting old friends in another city (Hangzhou)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I flew to Hangzhou to meet friends I had not seen in a long time. We talked about the past and the present. One takeaway: when friends live in different cities, meeting once often requires annual planning.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;May trip: Ningbo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dongqian Lake: beautiful scenery. I have been to Lugu Lake before; each has its charm.&lt;/p&gt;
&lt;p&gt;Ningbo Museum: went mainly because it was a filming location for The Three-Body Problem.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;July trip: Georgia&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A very long flight: Beijing -&gt; Urumqi -&gt; Tbilisi (capital of Georgia), more than ten hours.&lt;/p&gt;
&lt;p&gt;Simple folkways + European style + Asian prices: Georgia has kind people. Tourism is not very developed yet, so things are not expensive and there is no tourist trap vibe. My guide was local and spoke English, Chinese, Georgian, and Russian, so communication was easy.&lt;/p&gt;
&lt;p&gt;Recommended places: Tbilisi city walk, Kazbegi, Batumi (Black Sea). The churches are so many I cannot remember them all.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;September trip: Anaya Jinshanling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Went with a friend’s family. Not far (about 150 km from Beijing). Fully pet-friendly. The community feels very Anaya. Great for pet lovers and small group gatherings.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;November: musical, Man of La Mancha&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Took my kid to a live musical for the first time. I had not read Don Quixote systematically before, but I knew the theme. The show moved me and helped me rethink idealism and how to pursue it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-01.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-05.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-04.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-03.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-10.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-02.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;work&quot;&gt;Work&lt;/h2&gt;
&lt;p&gt;Not much change. My team and I kept moving bricks and delivering. But in 2025, I need to keep independent thinking and focus on a few important goals.&lt;/p&gt;
&lt;h2 id=&quot;inputs-and-outputs&quot;&gt;Inputs and Outputs&lt;/h2&gt;
&lt;h3 id=&quot;inputs&quot;&gt;Inputs&lt;/h3&gt;
&lt;p&gt;I adjusted some of my information intake tools this year. Here is what I use now.&lt;/p&gt;
&lt;h3 id=&quot;follow&quot;&gt;Follow&lt;/h3&gt;
&lt;p&gt;Crushes every RSS tool I used before. Now my only RSS + newsletter tool.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-07.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;cubox&quot;&gt;Cubox&lt;/h3&gt;
&lt;p&gt;My long-term read-later tool for organizing scattered information.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-08.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;xiaoyuzhou&quot;&gt;Xiaoyuzhou&lt;/h3&gt;
&lt;p&gt;Listened for 138 hours this year. Two podcasts I cannot live without:&lt;/p&gt;
&lt;p&gt;Between Reality and Fiction&lt;/p&gt;
&lt;p&gt;The best podcast I have ever heard, no exaggeration. High quality and high cognition. Since it launched in 2023-10, I have listened to every episode.&lt;/p&gt;
&lt;p&gt;Xiaoyuzhou - Between Reality and Fiction&lt;/p&gt;
&lt;p&gt;69 hours total this year&lt;/p&gt;
&lt;p&gt;Shengdong Morning Coffee&lt;/p&gt;
&lt;p&gt;Every workday morning, 15 minutes on my commute to catch up on global tech and business news.&lt;/p&gt;
&lt;p&gt;Xiaoyuzhou - Shengdong Morning Coffee&lt;/p&gt;
&lt;p&gt;47 hours total this year&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-06.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;weread--print-books&quot;&gt;WeRead + Print Books&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Zhang Juzheng&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Historical novel. Zhang Juzheng was a formidable figure who pushed a series of reforms during the Wanli era, such as tax reform and cutting redundant officials, but it was extremely difficult. The book also shows how he navigated complex political struggles. You finish it thinking: how hard it is to be a reformer in history.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Little Prince&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each journey is like a mirror that makes you reflect on friendship, love, and growth. On the surface it is a fairy tale, but it is really about life philosophy.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rework: Escape the Madness of Busywork&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Written by the founders of 37signals, it proposes a counter-mainstream approach to work and entrepreneurship, emphasizing less busyness, focus on core goals, and more effective execution. Think independently.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I and the Temple of Earth&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essays. The place became a stage for Shi Tiesheng to think about life. He writes about death, maternal love, and the meaning of life. The prose is plain but moving. The descriptions of the Temple of Earth are great material for kids’ essays.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stories of the Sahara&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sanmao and her husband Jose lived in the Sahara Desert. The conditions were harsh, but their life was romantic. The book records interesting people and events and her love for life. It reads easily but has depth. I even searched Xiaohongshu to see photos of her former home, which made me feel more immersed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Brief History of Chips&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the year AIGC took off, I stumbled on this book. It brought back memories of my college courses and projects. From the first transistor to how chips shape global tech today, the author explains it clearly. You will see the tech story behind the scenes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inside the System&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are interested in economics but find it too complex, this one is perfect. It explains how the Chinese economy operates in simple language and clarifies the difference between “inside” and “outside” the system. You will better understand our economic logic.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Beyond Sapiens&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Harari’s new book. It explores how future AI and biotech may change humanity. It also reflects on the challenges of progress: are we happier, or have we lost something important?&lt;/p&gt;
&lt;h3 id=&quot;dedao&quot;&gt;DeDao&lt;/h3&gt;
&lt;p&gt;I took two history courses: Shi Zhan’s Outline of Chinese History, and Li Jun’s Outline of Western History. I love “big history” and these two courses are excellent. Recommended for anyone who likes wide historical narratives and connected timelines.&lt;/p&gt;
&lt;h3 id=&quot;duolingo&quot;&gt;Duolingo&lt;/h3&gt;
&lt;p&gt;I kept learning English for 365 days again. But to keep more options open, I plan to increase my English effort in 2025. The goal is to reach a level where I can work and live in English-speaking countries (I am still far away, but a goal is a goal).&lt;/p&gt;
&lt;p&gt;Keep going! Give myself and my family more possibilities. It is better to push myself than to push my kid; pushing kids is not very cost-effective right now.&lt;/p&gt;
&lt;h3 id=&quot;outputs&quot;&gt;Outputs&lt;/h3&gt;
&lt;h3 id=&quot;notion&quot;&gt;Notion&lt;/h3&gt;
&lt;p&gt;My main daily output tool for organizing ideas, managing work, and personal learning.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/2024-09.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;blog&quot;&gt;Blog&lt;/h3&gt;
&lt;p&gt;At the end of this year, I grabbed a cheap VPS during Black Friday (&lt;a href=&quot;https://cloudcone.com/&quot;&gt;https://cloudcone.com/&lt;/a&gt;). After that impulse buy, the VPS could not sit idle, so I migrated my blog from a static Vercel site to a WordPress dynamic blog on the VPS.&lt;/p&gt;
&lt;p&gt;I wrote only six posts this year, about one every two months. Next year, try harder.&lt;/p&gt;</content:encoded></item><item><title>Free Diagramming Tools for Engineers</title><link>https://blog.ly85.dev/en/posts/free-diagramming-tools-for-engineers/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/free-diagramming-tools-for-engineers/</guid><description>A free diagramming toolkit for engineers, covering Excalidraw, Mermaid, Drawio, and Frame0 with use cases and highlights.</description><pubDate>Thu, 19 Dec 2024 09:21:51 GMT</pubDate><content:encoded>&lt;p&gt;Year-end is planning season again, and that always means diagrams. From architecture design to flowcharts (and even a few “magic” slides in meetings), you need a handful of diagrams to hold the room. But who says drawing has to cost money? If it can be free, it should be free. Here are a few free tools I use often.&lt;/p&gt;
&lt;h2 id=&quot;excalidraw---hand-drawn-creativity&quot;&gt;Excalidraw - &lt;strong&gt;Hand-drawn creativity&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://excalidraw.com&quot;&gt;http://excalidraw.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you find formal charts too stiff, try Excalidraw. Its hand-drawn style instantly gives you a “I am an artist” vibe, like Picasso drawing your system architecture. &lt;img src=&quot;https://s.w.org/images/core/emoji/17.0.2/svg/1f606.svg&quot; alt=&quot;grin&quot;&gt;&lt;/p&gt;
&lt;p&gt;Highlights&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Collaboration support&lt;/li&gt;
&lt;li&gt;Built-in asset library (add as needed)&lt;/li&gt;
&lt;li&gt;End-to-end encryption; no user data stored&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/developer-draw-tools-3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;mermaid---syntax-driven-developer-friendly&quot;&gt;Mermaid - &lt;strong&gt;Syntax-driven, developer-friendly&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://mermaid.js.org&quot;&gt;https://mermaid.js.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tired of drag-and-drop? Mermaid lets you draw with code. It is the ultimate romance for engineers. When you generate a beautiful flowchart from text, it feels even better than fixing a bug.&lt;/p&gt;
&lt;p&gt;Highlights&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generate diagrams from code, very hacker-style (AIGC makes it even faster)&lt;/li&gt;
&lt;li&gt;Rich diagram types: flowcharts, Gantt, sequence diagrams, and more&lt;/li&gt;
&lt;li&gt;Easy to integrate with Markdown editors&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/developer-draw-tools-1.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/developer-draw-tools-3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;drawio---all-rounder&quot;&gt;Drawio - &lt;strong&gt;All-rounder&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drawio.com&quot;&gt;https://www.drawio.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If Excalidraw is the cute neighbor and Mermaid is the geek, then Drawio is the straight-A student. It can handle almost any diagramming need you can think of. Powerful, free, and feature-rich.&lt;/p&gt;
&lt;p&gt;Highlights&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Near-commercial features, completely free&lt;/li&gt;
&lt;li&gt;Desktop and online versions&lt;/li&gt;
&lt;li&gt;Multiple storage options (Google Drive, OneDrive)&lt;/li&gt;
&lt;li&gt;Rich template library, plus custom libraries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/developer-draw-tools-2.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;frame0---hand-drawn-style-prototyping-tool&quot;&gt;Frame0 - &lt;strong&gt;Hand-drawn style prototyping tool&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://frame0.app&quot;&gt;https://frame0.app&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A prototyping tool that is great for engineers to validate ideas quickly. It makes it easy to sketch product concepts. The project started in 2024-09, has released 7 versions, and is still in beta, perfect if you like to try new things.&lt;/p&gt;
&lt;p&gt;Highlights&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cross-platform: macOS, Windows, Linux&lt;/li&gt;
&lt;li&gt;Smooth interaction&lt;/li&gt;
&lt;li&gt;Great for polished presentation diagrams&lt;/li&gt;
&lt;li&gt;Real-time collaboration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/developer-draw-tools-5.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/developer-draw-tools-4.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;</content:encoded></item><item><title>As an R&amp;D Leader, How to Organize Tech Sharing</title><link>https://blog.ly85.dev/en/posts/as-leader-how-to-org-tech-share/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/as-leader-how-to-org-tech-share/</guid><description>Clarify the purpose of tech sharing, who benefits (company, team, individual), and the outcomes you expect.</description><pubDate>Mon, 09 Dec 2024 05:53:26 GMT</pubDate><content:encoded>&lt;h1 id=&quot;purpose&quot;&gt;Purpose&lt;/h1&gt;
&lt;p&gt;First, we need to clarify why we’re doing this. What value does it create, and what outcomes do we expect? The “everyone” here includes three parties: the company, the team, and the individual. Each has different expectations from tech learning and sharing. Here are the key purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn new technologies, improve ourselves, and build a knowledge system&lt;/li&gt;
&lt;li&gt;Build experience in professional domains&lt;/li&gt;
&lt;li&gt;Improve communication and presentation skills&lt;/li&gt;
&lt;li&gt;Use learning and analysis to advance product architecture, performance, and tooling&lt;/li&gt;
&lt;li&gt;Accumulate technical materials and form long-term company value&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;how-to-start&quot;&gt;How to Start&lt;/h1&gt;
&lt;p&gt;Once the purpose is clear, we need to think about how to make it happen. Adult learning and training are hard to push forward. Heavy delivery workload, human inertia, and whether leaders truly support it are all common blockers, which is why many teams give up halfway. To avoid these pitfalls:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Align management: tech learning and sharing is long-term work, and impact should be evaluated over time&lt;/li&gt;
&lt;li&gt;Ensure content quality: content cannot be too shallow&lt;/li&gt;
&lt;li&gt;Define a clear cadence and responsibilities for both speakers and audiences&lt;/li&gt;
&lt;li&gt;Choose topics based on the audience, focusing on what they care about&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;how-to-do-it&quot;&gt;How to Do It&lt;/h1&gt;
&lt;h2 id=&quot;1-sharing-members&quot;&gt;1. Sharing Members&lt;/h2&gt;
&lt;p&gt;Reduce the responsibility denominator. In a 12-person team, the denominator is 12, and people tend to think “it’s not just me,” so they don’t take initiative. Make it small groups instead, with a denominator of 2 or 3. Groups tend to be more reliable than pure self-drive.&lt;/p&gt;
&lt;p&gt;Our current R&amp;#x26;D team has three roles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RD: 4&lt;/li&gt;
&lt;li&gt;FE: 5&lt;/li&gt;
&lt;li&gt;QA: 3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We form three groups and rotate tech learning and sharing in sequence. A group can have multiple speakers per session or just one.&lt;/p&gt;
&lt;h2 id=&quot;2-decide-the-cadence&quot;&gt;2. Decide the Cadence&lt;/h2&gt;
&lt;p&gt;The cadence must be explicit so both speakers and listeners can prepare.&lt;/p&gt;
&lt;h3 id=&quot;sharing-time-rules&quot;&gt;Sharing Time Rules&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Frequency: once every 2 weeks (groups rotate)&lt;/li&gt;
&lt;li&gt;Time: Thursday at 19:15&lt;/li&gt;
&lt;li&gt;Duration: within 60 minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;speaker-preparation&quot;&gt;Speaker Preparation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Share the outline: one week in advance (by the previous Thursday)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;audience-preparation&quot;&gt;Audience Preparation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Read the materials: within the week before the session. Studies show that if you don’t pre-read, you may only understand about 20% during the session. Don’t waste your time—read beforehand.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;3-content-selection&quot;&gt;3. Content Selection&lt;/h2&gt;
&lt;p&gt;The goal of learning and sharing is to raise the team’s technical level and expand its cognitive range. We suggest two types of content: technical topic sharing and free-theme sharing.&lt;/p&gt;
&lt;h3 id=&quot;how-to-choose-content&quot;&gt;How to Choose Content&lt;/h3&gt;
&lt;p&gt;Selection should vary by team context and product architecture. Plan quarterly, learn the team’s management and technical weaknesses, what people want to improve, and what the product needs next. Then choose topics accordingly (we currently use Lagou Education for training).&lt;/p&gt;
&lt;h3 id=&quot;technical-topic-sharing&quot;&gt;Technical Topic Sharing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Targeted improvement in a specific technical area&lt;/li&gt;
&lt;li&gt;Quickly applicable to current architecture and product&lt;/li&gt;
&lt;li&gt;Often needs a shallow-to-deep progression&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;free-theme-sharing&quot;&gt;Free-Theme Sharing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Broaden perspective&lt;/li&gt;
&lt;li&gt;Content can be wider, even inviting non-technical colleagues&lt;/li&gt;
&lt;li&gt;Requires strong logical expression to explain unfamiliar topics clearly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alternate between technical topics and free themes.&lt;/p&gt;
&lt;h3 id=&quot;reject-simple&quot;&gt;Reject Simple&lt;/h3&gt;
&lt;p&gt;If you want the content and format to be great, you need great content. We reject overly simple topics like “how to install X” or “getting started with Y.”&lt;/p&gt;
&lt;h2 id=&quot;4-team-atmosphere&quot;&gt;4. Team Atmosphere&lt;/h2&gt;
&lt;p&gt;Tech learning and sharing improves team culture, strengthens mutual understanding, and increases cohesion.&lt;/p&gt;
&lt;p&gt;Provide drinks and snacks, create a relaxed atmosphere, and people will be more willing to join. Initiative improves naturally.&lt;/p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;
&lt;p&gt;Beyond learning and sharing, we should also practice gratitude.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thanks&lt;/strong&gt; to the company for providing the platform; &lt;strong&gt;thanks&lt;/strong&gt; to the speakers for preparing on their own time; &lt;strong&gt;thanks&lt;/strong&gt; to the audience for listening carefully and asking questions.&lt;/p&gt;
&lt;p&gt;With a grateful heart, you’ll see better things and reach new heights by thinking from others’ perspectives.&lt;/p&gt;</content:encoded></item><item><title>How to Provide Services Through Cloud Computing</title><link>https://blog.ly85.dev/en/posts/how-to-support-service-from-cloud-computing/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/how-to-support-service-from-cloud-computing/</guid><description>From a SaaS provider&apos;s view: definitions, service models, deployment options, and a layered overview of cloud computing.</description><pubDate>Sun, 24 Nov 2024 09:52:09 GMT</pubDate><content:encoded>&lt;p&gt;Recently I have been helping our marketing team with structured technical descriptions. While choosing topics, I realized how “AI” and “cloud computing” have become buzzwords. Most people only half understand them, but if you do not mention them you seem out of date. Since we are a SaaS provider, writing a cloud-computing explainer from that angle felt like a good direction.&lt;/p&gt;
&lt;h2 id=&quot;definition&quot;&gt;Definition&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Cloud computing is a technology that provides computing resources (such as servers, storage, databases, networks, and software) over the internet. It allows users to access and use these resources on demand without purchasing and maintaining local hardware or software. The core idea is to centralize computing resources and deliver them as services over the network.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;service-models&quot;&gt;Service Models&lt;/h2&gt;
&lt;p&gt;Cloud computing has three service models, from bottom to top: IaaS -&gt; PaaS -&gt; SaaS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/cloud-computing-01.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;deployment-options&quot;&gt;Deployment Options&lt;/h2&gt;
&lt;p&gt;There are three common deployment options: public cloud, private cloud, and hybrid cloud.&lt;/p&gt;
&lt;h3 id=&quot;our-current-deployment-public-cloud&quot;&gt;&lt;strong&gt;[Our current deployment] Public Cloud&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Provided by cloud vendors (e.g., Alibaba Cloud, Huawei Cloud, AWS, Microsoft Azure)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pros: cost-effective, scalable, flexible, high availability, and strong security (network and data security)&lt;/li&gt;
&lt;li&gt;Cons: relies on third-party providers; for some sensitive data (e.g., national security related), it may not be the best choice&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;private-cloud&quot;&gt;&lt;strong&gt;Private Cloud&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;A cloud environment built for a single organization, hosted on-premise or in a third-party data center, with higher security (after a company and product reach a certain stage, this is typically chosen by key accounts with strict security requirements).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pros: stronger data security and privacy&lt;/li&gt;
&lt;li&gt;Cons: sacrifices some scalability and flexibility; high costs (servers and operations staff)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;hybrid-cloud&quot;&gt;&lt;strong&gt;Hybrid Cloud&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;If you want the scalability and security of public cloud while keeping data on-premise to satisfy data residency laws, or to support compute closer to customers, hybrid cloud is a good fit.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pros: combines advantages of public and private cloud, easy to scale resources and storage while still accessing data and apps locally&lt;/li&gt;
&lt;li&gt;Cons: complex to manage; requires dedicated VPN or leased lines between public and private clouds; high demands on network speed and stability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/cloud-computing-02.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;iaas-layer&quot;&gt;&lt;strong&gt;IaaS Layer&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;We primarily use Alibaba Cloud’s infrastructure for networking and storage to build our SaaS foundation.&lt;/p&gt;
&lt;h2 id=&quot;paas-layer&quot;&gt;&lt;strong&gt;PaaS Layer&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id=&quot;non-application-services&quot;&gt;&lt;strong&gt;Non-application Services&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;We mainly use Alibaba Cloud’s development platforms and environments to build and deploy application services, such as container services and serverless computing.&lt;/p&gt;
&lt;h3 id=&quot;application-services&quot;&gt;&lt;strong&gt;Application Services&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Video conferencing capabilities&lt;/li&gt;
&lt;li&gt;Document collaboration capabilities&lt;/li&gt;
&lt;li&gt;Live streaming capabilities&lt;/li&gt;
&lt;li&gt;AIGC&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;saas-layer&quot;&gt;&lt;strong&gt;SaaS Layer&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;We provide services to users through the SaaS layer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/17.0.2/svg/1f4a1.svg&quot; alt=&quot;idea&quot;&gt; Benefits of SaaS&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cost efficiency: users do not need to buy expensive hardware or software licenses; they pay as needed&lt;/li&gt;
&lt;li&gt;Fast deployment: users can start by registering an account, reducing the time for traditional install and configuration&lt;/li&gt;
&lt;li&gt;Easy to scale: users can add or remove functional modules as needed&lt;/li&gt;
&lt;li&gt;Automatic updates and maintenance: the SaaS provider handles updates and maintenance, so users stay on the latest version without worrying about upgrades or security patches&lt;/li&gt;
&lt;li&gt;Convenient access: users can access SaaS services from any internet-connected device, supporting remote and mobile work and increasing flexibility&lt;/li&gt;
&lt;li&gt;Security: SaaS providers invest heavily in security such as encryption, backups, and disaster recovery, often more reliable than what small and medium businesses can manage themselves&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Spending Less: Slimming Down My Subscriptions</title><link>https://blog.ly85.dev/en/posts/my-subscription-services/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/my-subscription-services/</guid><description>Reviewing my subscription choices and costs, with a keep vs. cut list from the money-saving process.</description><pubDate>Sun, 01 Sep 2024 10:01:31 GMT</pubDate><content:encoded>&lt;p&gt;As I use more software and services, I realized I get a lot of subscription payment emails every month. I recently reviewed all my internet subscriptions and found plenty of places to save money.&lt;/p&gt;
&lt;h2 id=&quot;tencent-video&quot;&gt;Tencent Video&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Video content&lt;/td&gt;&lt;td&gt;RMB 168/year&lt;/td&gt;&lt;td&gt;Just pick one platform&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;This used to be my only video subscription, mainly because I was following a bunch of anime adapted from web novels. Tencent Video does have more anime IP than most platforms. The ones I follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Soul Land&lt;/li&gt;
&lt;li&gt;Battle Through the Heavens&lt;/li&gt;
&lt;li&gt;Swallowed Star&lt;/li&gt;
&lt;li&gt;Jade Dynasty&lt;/li&gt;
&lt;li&gt;Throne of Seal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;xiaomi-video-membership--bundled-iqiyi&quot;&gt;Xiaomi Video Membership + Bundled iQIYI&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Video content&lt;/td&gt;&lt;td&gt;RMB 392/year&lt;/td&gt;&lt;td&gt;Nice to have&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Mainly because we have a Xiaomi TV at home and the kids want to watch.&lt;/p&gt;
&lt;h2 id=&quot;apple-music&quot;&gt;Apple Music&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Music&lt;/td&gt;&lt;td&gt;RMB 11/month&lt;/td&gt;&lt;td&gt;Nice to have&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I got three free months when I bought a device during the pandemic, then kept renewing. Since I am deep in the Apple ecosystem, the experience is smooth. I usually listen to nostalgic songs while commuting or coding at work.&lt;/p&gt;
&lt;h2 id=&quot;fan-book-formerly-fan-deng-reading&quot;&gt;Fan Book (formerly Fan Deng Reading)&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Knowledge subscription&lt;/td&gt;&lt;td&gt;RMB 365/year&lt;/td&gt;&lt;td&gt;Not needed / will not renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I have listened for four years. In the first two years I listened a lot because there were many books I had not heard of. After two years, I had basically finished most of the content on the platform, so I do not plan to renew. These days my main inputs are physical books and ebooks.&lt;/p&gt;
&lt;h2 id=&quot;shengdong-hutong&quot;&gt;Shengdong Hutong&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Knowledge subscription&lt;/td&gt;&lt;td&gt;RMB 365/year&lt;/td&gt;&lt;td&gt;Not needed / will not renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I listen to “Shengdong Morning Coffee” every morning for about 15 minutes to catch up on tech news in China and abroad. I love the quality of this team: young, energetic, and professional. Out of pure fandom, I joined their membership. It unlocks some paid podcasts (Not Just Money, Jumping Into the Rabbit Hole), but the ROI is not great. If I am to renew next year, I hope they can give me more reasons. For now, I do not really recommend it or need it.&lt;/p&gt;
&lt;h2 id=&quot;weread-wechat-reading&quot;&gt;WeRead (WeChat Reading)&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Knowledge subscription&lt;/td&gt;&lt;td&gt;RMB 19/month&lt;/td&gt;&lt;td&gt;Needed / will renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;This year I used WeRead to replace my old Apple Books + ZLibrary freebie setup.&lt;/p&gt;
&lt;p&gt;Two main reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Notes can be managed in one place and exported, which is convenient.&lt;/li&gt;
&lt;li&gt;The audiobook experience is great, especially for commuting.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;agentneo-vpn&quot;&gt;AgentNEO (VPN)&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Network service&lt;/td&gt;&lt;td&gt;RMB 240/year&lt;/td&gt;&lt;td&gt;Needed / will renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;A hard requirement. If you know, you know.&lt;/p&gt;
&lt;h2 id=&quot;blog-maintenance-costs&quot;&gt;Blog Maintenance Costs&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Domain&lt;/td&gt;&lt;td&gt;RMB 156/year&lt;/td&gt;&lt;td&gt;Needed / will renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Right now my blog costs are only for the domain (GoDaddy). Everything else is free.&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Service&lt;/th&gt;&lt;th&gt;Cost&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Code hosting&lt;/td&gt;&lt;td&gt;GitHub (Hugo)&lt;/td&gt;&lt;td&gt;Free&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Deployment hosting&lt;/td&gt;&lt;td&gt;Vercel (auto on Git commit)&lt;/td&gt;&lt;td&gt;Free&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Image hosting&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://sm.ms&quot;&gt;https://sm.ms&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Free (5GB)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CDN&lt;/td&gt;&lt;td&gt;Cloudflare&lt;/td&gt;&lt;td&gt;Free&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Domain&lt;/td&gt;&lt;td&gt;GoDaddy&lt;/td&gt;&lt;td&gt;RMB 156/year&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;duolingo-family-plan&quot;&gt;Duolingo (Family Plan)&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Learning&lt;/td&gt;&lt;td&gt;RMB 0/year&lt;/td&gt;&lt;td&gt;Needed / will renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;A great tool for language learning. I am using a friend’s family plan for free. You can also find group buys on platforms like Xiaohongshu, which is pretty affordable. Do not buy it alone, it is too expensive.&lt;/p&gt;
&lt;h2 id=&quot;cubox-pro&quot;&gt;Cubox-Pro&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Knowledge capture&lt;/td&gt;&lt;td&gt;RMB 98/year&lt;/td&gt;&lt;td&gt;Needed / will renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;My main information inputs come from three sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Books (print or digital)&lt;/li&gt;
&lt;li&gt;RSS subscriptions&lt;/li&gt;
&lt;li&gt;WeChat public accounts&lt;/li&gt;
&lt;li&gt;Other social apps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For everything except books, I often read something once and want to go deeper later or save it. I put those items into Cubox. When writing a blog post, planning, or thinking through a topic, I search tags and reprocess that information. For me, Cubox is essential.&lt;/p&gt;
&lt;h2 id=&quot;icloud&quot;&gt;iCloud&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloud storage&lt;/td&gt;&lt;td&gt;RMB 21/month (200GB)&lt;/td&gt;&lt;td&gt;Not needed / will not renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;iCloud is great for syncing photos and files across devices, but once I exceeded 200GB it stopped being cost-effective. The 200GB plan is RMB 21/month; the next tier is 2TB at RMB 68/month, over RMB 800/year, which hurts. After some research, I chose a NAS solution to solve file sync and backup once and for all, saving that annual 800+ cost. Of course the initial NAS investment is higher than 800, so it is still about long-term cost. I compared ZSpace and UGREEN and finally chose the UGREEN DX4600+ with an 8TB drive. Two months later, UGREEN released a new NAS with software quality issues, so I was lucky that the older software is more stable. The experience has been good so far.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/subscription-02.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;todoist&quot;&gt;Todoist&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Productivity tool&lt;/td&gt;&lt;td&gt;RMB 30/month&lt;/td&gt;&lt;td&gt;Not needed / will not renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I am not a heavy task manager. After about six months of subscription, I felt the value was not there for me. I eventually replaced Todoist with a Notion ToDo List template.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/subscription-01.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;tutu-bookkeeping&quot;&gt;Tutu Bookkeeping&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Productivity tool&lt;/td&gt;&lt;td&gt;RMB 8/month&lt;/td&gt;&lt;td&gt;Not needed / will not renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I am a slightly obsessive programmer, so whether I am coding, writing docs, or dealing with daily information, I like to quantify things and find a sense of accomplishment in visualized data. I started using Tutu Bookkeeping after a recommendation from SSPAI. After about six months, I ran into two big issues: I did not log transactions promptly, and I was not comfortable recording sensitive financial data in an internet product. So for timeliness and privacy, I dropped it.&lt;/p&gt;
&lt;p&gt;I switched to the open-source solution beancount. I do bookkeeping quarterly. I export raw transactions from WeChat and Alipay into Excel, do some light processing with a Python script, and generate beancount-formatted text. After minor tweaks, it is ready. The final result looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/subscription-03.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sams-club-premium-membership&quot;&gt;Sam’s Club Premium Membership&lt;/h2&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;Cycle and Cost&lt;/th&gt;&lt;th&gt;Need level&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;RMB 680/year&lt;/td&gt;&lt;td&gt;Needed / will renew&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;In middle age, I have discovered that going to the supermarket can be entertainment. My wife and I both love shopping at Sam’s Club. The quality is top-tier, and in Beijing they now offer 1-hour delivery, which is fantastic. If we order something, it arrives within an hour. The premium membership gives cashback that you can use on next month’s purchases, so once you count the cashback, it is basically the same as the 200+ regular membership.&lt;/p&gt;
&lt;p&gt;[Podcast] Shengdong Morning Coffee&lt;/p&gt;
&lt;p&gt;[Podcast] Between Reality and Fiction&lt;/p&gt;
&lt;p&gt;[AIGC] 302.ai&lt;/p&gt;
&lt;p&gt;[RSS] RSS feeds are one of my most important channels for high-quality information. If you need it, add my contact and I will send it.&lt;/p&gt;
&lt;p&gt;After optimizing, my annual cost dropped from RMB 3,200 to RMB 2,100 (still expensive). Next I plan to fully leverage my NAS capabilities and maybe replace even more paid subscriptions.&lt;/p&gt;</content:encoded></item><item><title>AIGC Application Exploration</title><link>https://blog.ly85.dev/en/posts/aigc-share/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/aigc-share/</guid><description>Introduces AIGC definitions, ecosystem, and application scenarios, plus common tools and learning examples.</description><pubDate>Sun, 21 Jan 2024 10:19:36 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Generative AI (Artificial Intelligence Generated Content)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;definition&quot;&gt;Definition&lt;/h2&gt;
&lt;p&gt;Baidu Baike&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Generative AI (AIGC) is a major sign of the transition from AI 1.0 to AI 2.0.&lt;/p&gt;
&lt;p&gt;The accumulated fusion of technologies such as GAN, CLIP, Transformer, Diffusion, pretrained models, multimodal techniques, and generative algorithms has triggered the AIGC explosion. Continuous algorithmic iteration and pretrained models drive a qualitative leap in AIGC capabilities. Multimodality expands the content polygon of AIGC, giving it more general and stronger foundational abilities.&lt;/p&gt;
&lt;p&gt;AIGC is a milestone for human society and AI. In the short term it changes basic productivity tools; in the medium term it will reshape social production relations; in the long term it will lead to a qualitative leap in productivity. In this transformation of tools, relations, and productivity, the value of data as a factor of production is greatly amplified.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-History.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Core generative models keep making breakthroughs.&lt;/li&gt;
&lt;li&gt;Pretrained models triggered a qualitative leap in AIGC capability.&lt;/li&gt;
&lt;li&gt;Multimodal techniques expand AIGC content diversity, making it more general.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Changes in productivity, production relations, and means of production&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Change.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ecosystem&quot;&gt;Ecosystem&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Layer.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;foundation-models&quot;&gt;Foundation Models&lt;/h2&gt;
&lt;p&gt;Main AIGC pretrained models abroad&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Model.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;scenarios-and-applications&quot;&gt;Scenarios and Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tool AI&lt;/li&gt;
&lt;li&gt;AI toolbox&lt;/li&gt;
&lt;li&gt;AI navigation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-App.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;international-aigc-apps&quot;&gt;International AIGC Apps&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Inter-App.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;china-aigc-apps&quot;&gt;China AIGC Apps&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-China-App.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;general-use-case-examples&quot;&gt;General Use Case Examples&lt;/h3&gt;
&lt;h4 id=&quot;chatgpt&quot;&gt;ChatGPT&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-ChatGPT-DEMO1.jpeg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-ChatGPT-DEMO2.jpeg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;chatpdf&quot;&gt;ChatPDF&lt;/h4&gt;
&lt;p&gt;ChatPDF lets you drop in a PDF under 200 pages, and it quickly “reads” the whole document. It can generate a summary of key points, and you can ask follow-up questions. It answers based on the document.&lt;/p&gt;
&lt;p&gt;Last weekend I helped my child review. I uploaded a PDF of his math mistakes; the right side shows its answers. The accuracy was pretty good.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-ChatPDF-DEMO.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;tencent-hunyuan-assistant&quot;&gt;Tencent Hunyuan Assistant&lt;/h4&gt;
&lt;p&gt;Search “Tencent Hunyuan Assistant” in WeChat mini programs.&lt;/p&gt;
&lt;p&gt;It integrates multiple scenarios: chat, drawing, coding, etc.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-HunYuan.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;tongyi-tingyu&quot;&gt;Tongyi Tingyu&lt;/h4&gt;
&lt;p&gt;Search “Tongyi Tingyu” in WeChat mini programs.&lt;/p&gt;
&lt;p&gt;An audio transcription tool that can record speech in real time, translate live, and summarize.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-TongYi.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;wenxin-yiyan&quot;&gt;Wenxin Yiyan&lt;/h4&gt;
&lt;p&gt;In the Wenxin Yiyan app.&lt;/p&gt;
&lt;p&gt;It integrates multiple scenarios: chat, drawing, coding, etc.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-WenXin.jpeg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;runway&quot;&gt;Runway&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://runwayml.com&quot;&gt;https://runwayml.com&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;hotokeai&quot;&gt;hotoke.ai&lt;/h4&gt;
&lt;p&gt;Hotoke.ai is a ChatGPT-based “Buddha” platform created by a Japanese developer. It has helped millions of people with their worries.&lt;/p&gt;
&lt;p&gt;I asked a question people often think about when they are lost: “What is the meaning of life?”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Hotoke.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;learning-use-case-examples&quot;&gt;Learning Use Case Examples&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Edu-Xmind.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;duolingo&quot;&gt;Duolingo&lt;/h4&gt;
&lt;p&gt;A popular free language-learning app that uses gamification. I have used it for a long time and the experience is excellent.&lt;/p&gt;
&lt;p&gt;The US version added GPT-4 features: Max.&lt;/p&gt;
&lt;p&gt;It offers two main GPT-4-based features: Explain My Answer and Roleplay.&lt;/p&gt;
&lt;h5 id=&quot;explain-my-answer&quot;&gt;Explain My Answer&lt;/h5&gt;
&lt;p&gt;The goal is to help students not only know whether their answer is correct or incorrect, but also understand why. Whether their answer is right or wrong, they can talk to the assistant to get a brief explanation and ask for examples or clarification. This helps students understand and fix mistakes and improve learning outcomes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Duolingo-DEMO1.gif&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;roleplay&quot;&gt;Roleplay&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Duolingo-DEMO2.gif&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;This feature lets students practice real-world conversations with virtual characters. They can access it by tapping on a character and earn XP for completing challenges. In these challenges, students practice dialogue in different scenarios, such as planning a future vacation with Lin, ordering coffee at a cafe in Paris, buying furniture with Eddy, or inviting friends to go hiking. These exercises help students build language skills across contexts.&lt;/p&gt;
&lt;h4 id=&quot;youdao-ai-speaking-tutor&quot;&gt;Youdao (AI Speaking Tutor)&lt;/h4&gt;
&lt;p&gt;Similar to Duolingo’s roleplay scenarios, it simulates conversation scenarios, but the experience is average.&lt;/p&gt;
&lt;p&gt;API documentation&lt;/p&gt;
&lt;p&gt;Mini program available for hands-on experience&lt;/p&gt;
&lt;h4 id=&quot;grammarly&quot;&gt;Grammarly&lt;/h4&gt;
&lt;p&gt;Writing assistant that improves writing skills.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AIGC-Share-Grammarly-DEMO.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;khanmigo&quot;&gt;Khanmigo&lt;/h4&gt;
&lt;p&gt;Khanmigo is a personalized learning tool built on GPT-4 and other models. It provides modes like “Tutor Me” and subject-based quizzes. It is most accurate for K-12 topics, but less accurate for niche subjects.&lt;/p&gt;
&lt;h4 id=&quot;quizlet-q-chat&quot;&gt;Quizlet (Q-Chat)&lt;/h4&gt;
&lt;p&gt;Q-Chat is ChatGPT’s AI tutor inside Quizlet. Quizlet is an online learning platform with interactive tools to help students understand and remember knowledge. Q-Chat works like a personalized AI tutor, helping each student based on their learning style and progress. It can have deep, question-driven conversations with students on any topic, using a Socratic approach to spark active learning and deepen understanding.&lt;/p&gt;
&lt;p&gt;YouTube demo video: &lt;a href=&quot;https://www.youtube.com/watch?v=VLUGMzbJ3_M&quot;&gt;https://www.youtube.com/watch?v=VLUGMzbJ3_M&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;mathgpt-not-released&quot;&gt;MathGPT (Not Released)&lt;/h4&gt;
&lt;p&gt;MathGPT focuses on explaining problems, solving them, and algorithms. It can generate random math problems and provide systematic answers. It supports both Chinese and English, and works on mobile and PC.&lt;/p&gt;
&lt;p&gt;Based on current data, MathGPT can cover high school, middle school, and elementary school math. Algebra, word problems, and calculations can all be solved with MathGPT, with clearer reasoning and logic.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Adapt to change, embrace AIGC, learn to use AIGC tools, and combine them with your work and life so AIGC helps us become better.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conversational assistants: help search, summarize, and organize efficiently (use ChatGPT abroad if possible; otherwise Tencent, Baidu, or Alibaba options)&lt;/li&gt;
&lt;li&gt;Image and video assistants: use tools like Midjourney and Runway to accelerate posters and outward-facing copy&lt;/li&gt;
&lt;li&gt;Coding assistants: use GitHub Copilot, Bito, and others to speed up coding&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>My 2023</title><link>https://blog.ly85.dev/en/posts/my-2023/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/my-2023/</guid><description>A look back at the changes and gains in life, work, reading, and writing in 2023.</description><pubDate>Sun, 07 Jan 2024 01:44:56 GMT</pubDate><content:encoded>&lt;p&gt;The end of the year was busy: a major product release, helping my kid study for finals, and so on. I did not wrap up my 2023 until January 7. Here is a recap across life, work, reading, and writing.&lt;/p&gt;
&lt;h2 id=&quot;life&quot;&gt;Life&lt;/h2&gt;
&lt;p&gt;The biggest change in 2023 was a new family member: a cute toy poodle named Coffee Bean (our “younger son”). Our family is now me, my wife, our older son (the kid), and our younger son (Coffee Bean). The moment I open the door and both the kid and dog rush at me (sometimes jumping onto me) is the part of every day I look forward to most. It has been a great stress reliever for both work and life.&lt;/p&gt;
&lt;p&gt;2023 also featured the most expensive National Day holiday I have ever had: a deep tour of hospitals. At the end of September, my son was diagnosed with mycoplasma pneumonia, which rapidly became severe. We went through a tense search for a hospital bed and were finally admitted to New Century Children’s Hospital. After 12 days of treatment (including two lung lavages), he was discharged safely.&lt;/p&gt;
&lt;p&gt;My biggest takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Healthcare is expensive.&lt;/li&gt;
&lt;li&gt;Medical resources are scarce.&lt;/li&gt;
&lt;li&gt;After COVID, infectious diseases are so damn intense.&lt;/li&gt;
&lt;li&gt;High-end medical insurance is a must (I bought AIA coverage immediately in November).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I did not travel much in 2023, but I did visit Sanya, Guangxi, Changbai Mountain, and Yanji. People say reading ten thousand books is not as good as traveling ten thousand miles. In a time that does not feel so great, do not overwork or over-study. Take time to see the world, learn and understand it from a different perspective. Travel really helps calm the mind and ease anxiety.&lt;/p&gt;
&lt;p&gt;In 2023 I wrote five posts, about one every two-plus months. By the end of the year I was honestly ashamed of my laziness. The main reason is that I did not summarize and organize my work and technical learnings enough, so there was not much to share. Next year I will try for one post per month.&lt;/p&gt;
&lt;h2 id=&quot;a-note-to-myself&quot;&gt;A Note to Myself&lt;/h2&gt;
&lt;p&gt;When I look back, my life is basically either coding or writing plans in front of a screen, or spending time with my kid and walking the dog, with the occasional trip. That is middle age in a nutshell. It may lack passion and big dreams, but overall I am not too anxious (sometimes a little). I do not have strong material desires, no major debt, I work in a field I chose and have built for more than a decade, the company vibe is great, my boss is nice, and I still have time with family. That is pretty good.&lt;/p&gt;
&lt;p&gt;In 2024, I hope I can keep reading more, travel more, spend time with family, and continue cultivating myself on the road of life: live honestly, follow my heart, go with the flow, and stay at ease.&lt;/p&gt;</content:encoded></item><item><title>AI Coding Assistants</title><link>https://blog.ly85.dev/en/posts/ai-copilot/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/ai-copilot/</guid><description>A quick guide to Bito, Copilot, Codeium, with features, installation, and usage tips.</description><pubDate>Fri, 21 Jul 2023 01:44:56 GMT</pubDate><content:encoded>&lt;h2 id=&quot;why-use-ai-coding-assistants&quot;&gt;Why Use AI Coding Assistants&lt;/h2&gt;
&lt;p&gt;Improve coding efficiency and adapt to the new era of programming.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The era of large models is creating “super individuals” who are highly efficient, skilled with tools, and able to deliver business value quickly.&lt;/li&gt;
&lt;li&gt;Most tools require a VPN for access; there is no way around it.&lt;/li&gt;
&lt;li&gt;Pay attention to information security: do not copy/paste secrets or important code into prompts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tool-overviews&quot;&gt;Tool Overviews&lt;/h2&gt;
&lt;h2 id=&quot;bito-official-site-bito&quot;&gt;Bito (official site: Bito)&lt;/h2&gt;
&lt;p&gt;Personal plan (free)&lt;/p&gt;
&lt;h3 id=&quot;overview&quot;&gt;Overview&lt;/h3&gt;
&lt;p&gt;Bito AI is a general-purpose assistant. Developers can ask technical questions, generate code from natural language prompts, and get feedback on existing code. Key features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code generation: describe requirements in natural language and Bito generates code in different languages (e.g., Java).&lt;/li&gt;
&lt;li&gt;Command syntax: ask about any technical command and its usage (e.g., git).&lt;/li&gt;
&lt;li&gt;Test cases: generate test cases for given code.&lt;/li&gt;
&lt;li&gt;Explain code: explain selected code snippets and how they work.&lt;/li&gt;
&lt;li&gt;Add comments: generate comments for functions or methods.&lt;/li&gt;
&lt;li&gt;Improve performance: suggest performance optimizations.&lt;/li&gt;
&lt;li&gt;Security checks: check code for known security issues.&lt;/li&gt;
&lt;li&gt;Learn concepts: explain technical concepts (e.g., B+ trees).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;installation&quot;&gt;Installation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.bito.ai/getting-started/installing-on-jetbrain-ides&quot;&gt;IDEA plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.bito.ai/getting-started/installing-on-visual-studio-code&quot;&gt;VS Code plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gitbito/CLI&quot;&gt;CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;usage&quot;&gt;Usage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;YouTube videos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@bitoai/featured&quot;&gt;https://www.youtube.com/@bitoai/featured&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=q42hqwT-jsg&quot;&gt;https://www.youtube.com/watch?v=q42hqwT-jsg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Documentation&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.bito.ai/getting-started/bito-ai-examples&quot;&gt;https://docs.bito.ai/getting-started/bito-ai-examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;github-copilot-official-site-copilot&quot;&gt;GitHub Copilot (official site: Copilot)&lt;/h2&gt;
&lt;p&gt;Personal plan ($10 / month). I can share a referral link (DM me).&lt;/p&gt;
&lt;h3 id=&quot;overview-1&quot;&gt;Overview&lt;/h3&gt;
&lt;p&gt;GitHub Copilot provides highly valuable code completion and generation. It can generate lines of code or entire functions based on context. With intelligent completion and generation, Copilot improves development efficiency and lowers the effort of writing code. It further pushes AI adoption in software development so developers can focus more on design and algorithms.&lt;/p&gt;
&lt;h3 id=&quot;installation-1&quot;&gt;Installation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://plugins.jetbrains.com/plugin/17718-github-copilot&quot;&gt;IDEA plugin&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;VS Code plugins&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&quot;&gt;Copilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-labs&quot;&gt;Copilot Labs (chat assistant)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;usage-1&quot;&gt;Usage&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.github.com/zh/copilot/quickstart&quot;&gt;https://docs.github.com/zh/copilot/quickstart&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;codeium-official-site-codeium&quot;&gt;Codeium (official site: Codeium)&lt;/h2&gt;
&lt;p&gt;Personal plan (free). Experience is better in VS Code; a bit worse in IDEA.&lt;/p&gt;
&lt;h3 id=&quot;overview-2&quot;&gt;Overview&lt;/h3&gt;
&lt;p&gt;Codeium is an AI code generation platform with these key capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code generation: describe requirements in natural language and generate code. Supports Java, Python, JavaScript, and more.&lt;/li&gt;
&lt;li&gt;Code search: search code snippets by keywords from a large codebase.&lt;/li&gt;
&lt;li&gt;Code explanation: explain selected code in natural language.&lt;/li&gt;
&lt;li&gt;Code optimization: analyze existing code and suggest improvements in quality or algorithms.&lt;/li&gt;
&lt;li&gt;Code editing: built-in editor with autocompletion, linting, formatting, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;installation-2&quot;&gt;Installation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://plugins.jetbrains.com/plugin/20540-codeium-ai-autocomplete-for-python-js-ts-java-go-and-more&quot;&gt;IDEA plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Codeium.codeium&quot;&gt;VS Code plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;usage-2&quot;&gt;Usage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeium.com/chat&quot;&gt;https://codeium.com/chat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;suggested-setup&quot;&gt;Suggested Setup&lt;/h2&gt;
&lt;h2 id=&quot;personal-experience&quot;&gt;Personal Experience&lt;/h2&gt;
&lt;h3 id=&quot;bito&quot;&gt;Bito&lt;/h3&gt;
&lt;p&gt;A very powerful assistant. The default templates are handy and make it easy to insert code into chats and ask questions about it. The IDEA and VS Code plugins both feel good.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AI-Coding-Assistant-Bito-demo1.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AI-Coding-Assistant-Bito-demo2.png.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;github-copilot&quot;&gt;GitHub Copilot&lt;/h3&gt;
&lt;p&gt;Excellent at understanding code context (the more you use it, the better it learns you). It can complete code quickly. For routine tools and algorithms, you can often rely on generated code to build.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AI-Coding-Assistant-Copilot-demo1.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AI-Coding-Assistant-Copilot-demo2.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;codeium&quot;&gt;Codeium&lt;/h3&gt;
&lt;p&gt;Completion is average. The IDEA plugin is not great, but the VS Code experience is decent. Its features overlap somewhat with Bito.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/AI-Coding-Assistant-Codeium-demo.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;using-idea&quot;&gt;Using IDEA&lt;/h2&gt;
&lt;p&gt;Bito + GitHub Copilot (if you have budget)&lt;/p&gt;
&lt;h2 id=&quot;using-vs-code&quot;&gt;Using VS Code&lt;/h2&gt;
&lt;p&gt;Bito + Codeium (if you have budget, switch to GitHub Copilot)&lt;/p&gt;</content:encoded></item><item><title>How to Handle Production Issues</title><link>https://blog.ly85.dev/en/posts/how-to-handle-online-defects/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/how-to-handle-online-defects/</guid><description>Defines production issues, severity levels, and handling flow, with on-call and postmortem practices.</description><pubDate>Fri, 28 Apr 2023 01:44:56 GMT</pubDate><content:encoded>&lt;h2 id=&quot;what-is-a-production-issue&quot;&gt;What Is a “Production Issue”&lt;/h2&gt;
&lt;p&gt;In the product lifecycle, a production issue happens after release.&lt;/p&gt;
&lt;p&gt;A production issue means the service provided to users is fully or partially unavailable, performs poorly, or the user experience is bad. In early product stages, speed of new features often takes priority over quality to win market share, which accumulates technical debt. When some of that debt explodes, it causes production issues, lowers customer satisfaction, and can even lead to direct financial loss.&lt;/p&gt;
&lt;h2 id=&quot;production-issue-flow-overview&quot;&gt;Production Issue Flow Overview&lt;/h2&gt;
&lt;p&gt;Discover -&gt; Handle -&gt; Summarize -&gt; Feedback&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Handle-Online-Defects-01.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;severity&quot;&gt;Severity&lt;/h2&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Severity&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Handling&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Critical&lt;/td&gt;&lt;td&gt;Highest level, system or service fully down or unusable&lt;/td&gt;&lt;td&gt;Take emergency measures immediately&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Major&lt;/td&gt;&lt;td&gt;Second level, system or service partially down or restricted&lt;/td&gt;&lt;td&gt;Take measures as soon as possible&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Normal&lt;/td&gt;&lt;td&gt;General level, no obvious impact to system or service&lt;/td&gt;&lt;td&gt;Handle within a reasonable time to prevent escalation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Minor&lt;/td&gt;&lt;td&gt;Lowest level, small issues or anomalies with no impact&lt;/td&gt;&lt;td&gt;Address gradually during routine maintenance&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;handling-process&quot;&gt;Handling Process&lt;/h2&gt;
&lt;h2 id=&quot;user-feedback--monitoring-alerts&quot;&gt;User Feedback &amp;#x26; Monitoring Alerts&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Handle-Online-Defects-02.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;on-call-strategy&quot;&gt;On-call Strategy&lt;/h2&gt;
&lt;p&gt;Weekly rotation: &lt;strong&gt;Every Monday at 10:00 AM&lt;/strong&gt;, the on-call person for the week is announced in the DingTalk group, as shown below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Handle-Online-Defects-03.jpg&quot; alt=&quot;alert&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;error-analysis-report&quot;&gt;Error Analysis Report&lt;/h2&gt;
&lt;p&gt;Every day we analyze logs and push a &lt;strong&gt;log error classification report&lt;/strong&gt; to the DingTalk alert group.&lt;/p&gt;
&lt;p&gt;Before leaving each day, the on-call RD analyzes the report and, if it is a production issue, reports it to QA for tracking.&lt;/p&gt;
&lt;h2 id=&quot;postmortem-report&quot;&gt;Postmortem Report&lt;/h2&gt;
&lt;h2 id=&quot;incident-postmortem-critical&quot;&gt;Incident Postmortem (Critical)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Handle-Online-Defects-04.jpg&quot; alt=&quot;review-report&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;biweekly-review-report-overall&quot;&gt;Biweekly Review Report (Overall)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Handle-Online-Defects-05.jpg&quot; alt=&quot;review-report&quot;&gt;&lt;/p&gt;</content:encoded></item><item><title>How to Understand User Stories</title><link>https://blog.ly85.dev/en/posts/how-to-understand-userstory/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/how-to-understand-userstory/</guid><description>Defines user stories, the INVEST criteria, estimation ideas, plus templates and FAQs.</description><pubDate>Sun, 05 Mar 2023 01:44:56 GMT</pubDate><content:encoded>&lt;h2 id=&quot;what-is-a-user-story&quot;&gt;What Is a User Story&lt;/h2&gt;
&lt;p&gt;A user story is a short and simple description of a feature that delivers value to users or customers, and that a team can deliver within an iteration.&lt;/p&gt;
&lt;p&gt;A user story should answer three questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Who is it for? -&gt; expected &lt;user&gt; type&lt;/user&gt;&lt;/li&gt;
&lt;li&gt;What do we build? -&gt; I want &lt;function&gt;&lt;/function&gt;&lt;/li&gt;
&lt;li&gt;Why do we build it? -&gt; &lt;value and=&quot;&quot; benefit=&quot;&quot;&gt;&lt;/value&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the typical format is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As a &lt;type of=&quot;&quot; user=&quot;&quot;&gt;, I want &lt;function or=&quot;&quot; scenario=&quot;&quot;&gt;, so that &lt;value or=&quot;&quot; benefit=&quot;&quot;&gt;.&lt;/value&gt;&lt;/function&gt;&lt;/type&gt;&lt;/p&gt;
&lt;p&gt;As a , I want to , so that .&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Example: As a registered user, I want to download my photo to my profile so that other users can see what I look like.&lt;/p&gt;
&lt;h2 id=&quot;how-to-write-user-stories&quot;&gt;How to Write User Stories&lt;/h2&gt;
&lt;h2 id=&quot;hierarchy&quot;&gt;Hierarchy&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Understand-Userstory-01.png&quot; alt=&quot;epic-feature-userstory&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;criteria&quot;&gt;Criteria&lt;/h2&gt;
&lt;p&gt;According to the INVEST criteria, user stories should be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Independent&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not dependent on other stories (in reality this is hard, because some stories truly depend on predecessors).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Negotiable&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not fixed; can be discussed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Valuable&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A user story must bring clear, measurable business value. This means technical practices like refactoring, code cleanup, and architecture design are not stories. It also means a story is a vertical slice; it cannot be just a frontend or backend task.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Estimable&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear enough that the delivery team can estimate its size.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Small&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Should not exceed what one or two developers can deliver in a single iteration.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Testable&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The story must be verifiable with clear acceptance criteria.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;our-user-story-template&quot;&gt;Our User Story Template&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Understand-Userstory-02.png&quot; alt=&quot;user-story-template&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;story-writing-faq&quot;&gt;Story Writing FAQ&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Q1: Can stories be split by different clients?&lt;/p&gt;
&lt;p&gt;A1: If a story involves two clients (mobile and PC), and the story points are large and handled by different FE engineers, you can split by client.&lt;/p&gt;
&lt;p&gt;Q1: If story points are very large, should we split the story?&lt;/p&gt;
&lt;p&gt;A1: The standard for splitting is whether it can deliver “user-visible value.” It is not directly related to the story point size itself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;how-to-estimate-story-points&quot;&gt;How to Estimate Story Points&lt;/h2&gt;
&lt;h2 id=&quot;what-is-a-story-point&quot;&gt;What Is a Story Point&lt;/h2&gt;
&lt;p&gt;A story point is an estimate of the difficulty and workload of a story, essentially a unit of work. Story points are not a commitment and are not directly tied to actual completion time.&lt;/p&gt;
&lt;h2 id=&quot;inflation-of-story-points&quot;&gt;”Inflation” of Story Points&lt;/h2&gt;
&lt;p&gt;Code quality, developer skill, and familiarity with the business all affect delivery speed. But if different developers estimate story points by completion time, everyone will end up with a different point scale, which leads to “inflation.”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Understand-Userstory-03.png&quot; alt=&quot;estimate-formula&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;planning-poker-estimation&quot;&gt;Planning Poker Estimation&lt;/h2&gt;
&lt;p&gt;Reference: &lt;a href=&quot;http://142.171.229.92/technology/plan-poker/&quot;&gt;Planning Poker&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Planning Poker</title><link>https://blog.ly85.dev/en/posts/plan-poker/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/plan-poker/</guid><description>Explains planning poker roles, steps, and Fibonacci-based estimation rules.</description><pubDate>Thu, 02 Mar 2023 01:44:56 GMT</pubDate><content:encoded>&lt;h2 id=&quot;what-is-planning-poker&quot;&gt;What Is Planning Poker&lt;/h2&gt;
&lt;p&gt;A consensus-based estimation method (a game) used to estimate effort for Scrum iteration tasks. By evaluating together as a team, the variance becomes smaller.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Plan-Poker-01.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;implementation-steps&quot;&gt;Implementation Steps&lt;/h2&gt;
&lt;h2 id=&quot;roles&quot;&gt;Roles&lt;/h2&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Participant&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Scrum Master (QA)&lt;/td&gt;&lt;td&gt;Facilitates the estimation process&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PM&lt;/td&gt;&lt;td&gt;Explains and describes the stories&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RD / FE&lt;/td&gt;&lt;td&gt;Developers who estimate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RD TL / FE TL&lt;/td&gt;&lt;td&gt;Judges the reasonableness of story points&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;round-1&quot;&gt;Round 1&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;PM explains the story&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;RD / FE place numbered cards face down; Scrum Master calls reveal and everyone flips at once (Fibonacci values: 1, 2, 3, 5, 8, 13, 20, 40)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Explain estimation differences and discuss&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Reach consensus&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;round-2&quot;&gt;Round 2&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;For stories with differing points, RD / FE explain their estimation differences and reach consensus&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Scrum Master writes the final story points into the story list&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Everyone ranks priorities and fills them into the story list&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;fibonacci-sequence-and-planning-poker&quot;&gt;Fibonacci Sequence and Planning Poker&lt;/h2&gt;
&lt;p&gt;Planning poker uses the Fibonacci sequence as story points. The Fibonacci sequence is a numeric series introduced in the 13th century that explains certain formations in nature, like branching in trees. Each next value is the sum of the previous two: 0, 1/2, 1, 2, 3, 5, 8, 13, 20, etc.&lt;/p&gt;
&lt;p&gt;For agile estimation, some values are adjusted, resulting in the following series: 1, 2, 3, 5, 8, 13, 20, 40, 100, as shown below:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Plan-Poker-02.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Point convention: 1 Story Point ~= 1 person-day in ideal conditions (based on average team capability).&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Card&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;No effort needed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;Cannot estimate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Others&lt;/td&gt;&lt;td&gt;Interpret the number as the point value&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content:encoded></item><item><title>As an Engineering Leader, How I Manage Iterations</title><link>https://blog.ly85.dev/en/posts/as-leader-how-to-manage-agile/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/as-leader-how-to-manage-agile/</guid><description>An iteration workflow framework from a team lead&apos;s view, covering meetings and responsibilities at each stage.</description><pubDate>Tue, 07 Feb 2023 01:44:56 GMT</pubDate><content:encoded>&lt;h2 id=&quot;preface&quot;&gt;Preface&lt;/h2&gt;
&lt;p&gt;Iteration management looks different at every company. As product stages, team size, and resources change, the process evolves through practice and optimization. In my team, we review our iteration process every six months and make adjustments.&lt;/p&gt;
&lt;p&gt;Below is the iteration workflow we optimized in early 2023.&lt;/p&gt;
&lt;h2 id=&quot;what-problems-iteration-management-solves&quot;&gt;What Problems Iteration Management Solves&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Manage-agile-01.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In the diagram above there are three phases. The “product development” phase is the iteration process described below.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;development-process-methodology&quot;&gt;Development Process Methodology&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Manage-agile-02.png&quot; alt=&quot;Development methodology&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;principles-and-framework&quot;&gt;Principles and Framework&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Note: For the overall iteration cycle, we split it into larger stages that resemble a “waterfall” approach.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For requirement understanding and delivery, we use an agile approach and deliver/accept at the story level.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;principles-we-follow&quot;&gt;Principles We Follow&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;People’s initiative at the core: deliver higher-value products efficiently and with quality, and help team members become the best version of themselves.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;framework-we-use&quot;&gt;Framework We Use&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Scrum + Kanban&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The goal of Agile is to help us discover how bad things are as early as possible, and start managing the situation early.&lt;/p&gt;
&lt;h2 id=&quot;process-overview&quot;&gt;Process Overview&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Manage-agile-03.png&quot; alt=&quot;Process overview&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;roles&quot;&gt;Roles&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Manage-agile-04.png&quot; alt=&quot;Team roles&quot;&gt;&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;Responsibility&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Scrum Master&lt;/td&gt;&lt;td&gt;Agile coach, drives iterations; currently handled by QA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PM&lt;/td&gt;&lt;td&gt;Product manager, produces and explains the PRD&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RD&lt;/td&gt;&lt;td&gt;Backend engineer, responsible for backend implementation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FE&lt;/td&gt;&lt;td&gt;Frontend engineer, responsible for frontend implementation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;QA&lt;/td&gt;&lt;td&gt;Test engineer, responsible for iteration quality&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;UI&lt;/td&gt;&lt;td&gt;UI designer, responsible for interaction and visual design&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;detailed-breakdown&quot;&gt;Detailed Breakdown&lt;/h2&gt;
&lt;h2 id=&quot;requirements-phase&quot;&gt;Requirements Phase&lt;/h2&gt;
&lt;h3 id=&quot;kick-off-meeting&quot;&gt;Kick Off Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; A kickoff, as the name suggests. Communicate product value, why we are doing it, and the iteration goals. No deep dive into product or prototype details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; Everyone&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PM -&gt; present the product value in the PRD&lt;/li&gt;
&lt;li&gt;Master -&gt; create the iteration version in the &lt;strong&gt;project management platform&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Master -&gt; create a communication group in the &lt;strong&gt;communication tool&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;impact-analysis-meeting&quot;&gt;Impact Analysis Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Understand existing system functionality and analyze the impact of this iteration&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; RD, FE, QA&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RD or FE -&gt; explain current system features and analyze impact&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;prd-review-meeting&quot;&gt;PRD Review Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Discuss requirements, implementation logic, and rule details to reach team-wide alignment on understanding (typically no more than 2 meetings).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; Everyone&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PM -&gt; deliver the final PRD&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;ui-review-meeting&quot;&gt;UI Review Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Discuss page and interaction implementation to reach a shared understanding of UI/UX (typically no more than 2 meetings).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; Everyone&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UI -&gt; deliver page and interaction designs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;design-and-estimation-phase&quot;&gt;Design and Estimation Phase&lt;/h2&gt;
&lt;h3 id=&quot;plan-meeting&quot;&gt;Plan Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Confirm iteration scope, including business work, technical work, and backlog or bugs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; Everyone&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master -&gt; organize the plan meeting and confirm scope (review backlog and bugs in the &lt;strong&gt;project management platform&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;design-review-meeting&quot;&gt;Design Review Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Discuss design, standards, implementation, data migration, historical tech debt, and release plans.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; RD or FE, QA&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(As needed) RD -&gt; produce design doc and review it (see &lt;strong&gt;How to write a design doc TODO&lt;/strong&gt;)
&lt;ul&gt;
&lt;li&gt;First review: RD internal design review&lt;/li&gt;
&lt;li&gt;Second review: RD + FE API design review&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(As needed) FE -&gt; produce design doc and review it&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;estimate-meeting&quot;&gt;Estimate Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Based on the confirmed scope from the plan meeting, estimate effort and assign priorities and owners.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; RD, FE, QA&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master -&gt; organize the estimate meeting and confirm effort (estimation method: planning poker TODO)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;rd-cycle-plan-release&quot;&gt;“R&amp;#x26;D Cycle” Plan Release&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QA -&gt; publish the iteration “R&amp;#x26;D cycle” plan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://r2.ly85.dev/Manage-agile-05.png&quot; alt=&quot;R&amp;#x26;D cycle plan template&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master -&gt; update all iteration info in the &lt;strong&gt;project management platform&lt;/strong&gt; and officially enter coding&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;test-case-review-meeting&quot;&gt;Test Case Review Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Review completeness and quality of test cases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; RD, FE, QA&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QA -&gt; organize the review (test cases maintained in the &lt;strong&gt;test case management platform&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;development-phase&quot;&gt;Development Phase&lt;/h2&gt;
&lt;h3 id=&quot;daily-stand-up-meeting&quot;&gt;Daily Stand-up Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; See TODO: How to run daily stand-ups&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; Everyone&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master -&gt; run the meeting, focusing on dependencies, blockers, risks, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;desk-check-and-story-testing&quot;&gt;Desk Check and Story Testing&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RD &amp;#x26; FE -&gt; initiate story acceptance (how to do story acceptance TODO). After it passes, deploy to FAT for testing; QA records results.&lt;/li&gt;
&lt;li&gt;QA -&gt; test the story; if there are no functional issues, close the story testing&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;mid-term-check&quot;&gt;Mid-term Check&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Surface issues and anticipate risks&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master -&gt; at the midpoint of the iteration, organize a progress review to detect delay risks&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;test-and-acceptance-phase&quot;&gt;Test and Acceptance Phase&lt;/h2&gt;
&lt;h3 id=&quot;system-testing&quot;&gt;System Testing&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RD &amp;#x26; FE -&gt; prepare deployment docs and submit deployment tickets&lt;/li&gt;
&lt;li&gt;QA -&gt; in FAT
&lt;ul&gt;
&lt;li&gt;validate deployment docs&lt;/li&gt;
&lt;li&gt;smoke testing&lt;/li&gt;
&lt;li&gt;test cases (black-box, white-box)&lt;/li&gt;
&lt;li&gt;regression testing (black-box, white-box)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;acceptance&quot;&gt;Acceptance&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QA -&gt; in UAT
&lt;ul&gt;
&lt;li&gt;validate deployment docs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PM -&gt; product acceptance&lt;/li&gt;
&lt;li&gt;UI -&gt; UI acceptance&lt;/li&gt;
&lt;li&gt;QA -&gt; in UAT
&lt;ul&gt;
&lt;li&gt;regression testing (black-box, white-box)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;release-phase&quot;&gt;Release Phase&lt;/h2&gt;
&lt;h3 id=&quot;release&quot;&gt;Release&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QA -&gt; submit deployment ticket for approval, then release&lt;/li&gt;
&lt;li&gt;QA -&gt; fill out release notes (internal)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;iteration-retrospective-phase&quot;&gt;Iteration Retrospective Phase&lt;/h2&gt;
&lt;h3 id=&quot;review-meeting&quot;&gt;Review Meeting&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Summarize iteration process and quality issues, run a retrospective, and optimize process, code quality, and collaboration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participants:&lt;/strong&gt; Everyone&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master -&gt; gather iteration data and write the report&lt;/li&gt;
&lt;li&gt;Master -&gt; organize a full-team review and discussion&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tools-and-platforms&quot;&gt;Tools and Platforms&lt;/h2&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Tool or Platform&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Project management platform&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.teambition.com/&quot;&gt;https://www.teambition.com/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Communication tool&lt;/td&gt;&lt;td&gt;DingTalk&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Test case management platform&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://metersphere.io&quot;&gt;https://metersphere.io&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content:encoded></item><item><title>As an R&amp;D Leader, How to Quantify Iteration Quality</title><link>https://blog.ly85.dev/en/posts/as-leader-how-to-evaluating-iteration-quality/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/as-leader-how-to-evaluating-iteration-quality/</guid><description>Why quantify? Let facts speak. Data reveals collaboration outcomes and delivery quality from a more objective angle.</description><pubDate>Wed, 16 Feb 2022 04:01:57 GMT</pubDate><content:encoded>&lt;h1 id=&quot;why-quantify&quot;&gt;Why Quantify&lt;/h1&gt;
&lt;h2 id=&quot;let-facts-speak&quot;&gt;Let Facts Speak&lt;/h2&gt;
&lt;p&gt;Using data to reflect collaboration outcomes and the quality of delivered results is a way to surface problems from another objective angle. Avoid subjective judgments like “I think” or “I feel” when evaluating complex problems.&lt;/p&gt;
&lt;h2 id=&quot;diverse-roles-complex-collaboration&quot;&gt;Diverse Roles, Complex Collaboration&lt;/h2&gt;
&lt;p&gt;An iteration often involves many roles. Their actions and outputs all influence “iteration quality,” and those changes are usually complex. That’s why we should collect objective facts across multiple dimensions and evaluate iteration quality comprehensively.&lt;/p&gt;
&lt;h2 id=&quot;iteration-should-also-iterate&quot;&gt;Iteration Should Also Iterate&lt;/h2&gt;
&lt;p&gt;Product optimization and iteration are continuous. At different stages, companies and products have very different quality requirements. The famous project management triangle is a trade-off among time, cost, and scope, and quality is affected accordingly. As the company and product evolve, we need to collect data from multiple angles and continuously analyze iteration quality, so we can make the right trade-offs for the current context and reach our product goals.&lt;/p&gt;
&lt;h1 id=&quot;how-to-quantify&quot;&gt;How to Quantify&lt;/h1&gt;
&lt;p&gt;Within our team, we use a standard to evaluate iteration quality, called the “Iteration Quality Evaluation Standard,” composed as follows.&lt;/p&gt;
&lt;h2 id=&quot;components-of-the-iteration-quality-evaluation-standard&quot;&gt;Components of the Iteration Quality Evaluation Standard&lt;/h2&gt;
&lt;p&gt;4 dimensions + 1 score&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4 dimensions
&lt;ul&gt;
&lt;li&gt;PM requirement changes (30%)&lt;/li&gt;
&lt;li&gt;User Story delivery delays (10%)&lt;/li&gt;
&lt;li&gt;User Story smoke test pass rate (20%)&lt;/li&gt;
&lt;li&gt;Bugs (40%)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1 score
&lt;ul&gt;
&lt;li&gt;Iteration quality score&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-evaluating-iteration-quality-01.png&quot; title=&quot;分值组成&quot; decoding=&quot;async&quot; alt=&quot;分值组成&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-table&quot;&gt;
&lt;table class=&quot;has-fixed-layout&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Full score 10, pass 6&lt;/th&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PM requirement changes (after PRD finalization)&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User Story delivery testing delays&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User Story smoke test pass rate&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bugs (n = total bugs / total story points)&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;example&quot;&gt;Example&lt;/h1&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/As-leader-how-to-evaluating-iteration-quality-02.jpg&quot; title=&quot;分值&quot; decoding=&quot;async&quot; alt=&quot;分值&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;Above is a recent set of iteration data from my team. Context:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Story points: 1 story point = 1 person-day&lt;/li&gt;
&lt;li&gt;Iteration flow: develop &amp;#x26; test by story → overall regression testing → PM &amp;#x26; UI acceptance → release → retrospective&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;what-datafication-brings-to-the-team&quot;&gt;What Datafication Brings to the Team&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;The team is accountable for the iteration
&lt;ul&gt;
&lt;li&gt;By presenting iteration quality with data, the team can review problems rationally and find solutions. The shared goal is: make the iteration better.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Make “problems” transparent&lt;/li&gt;
&lt;li&gt;Provide a solid data foundation to improve team iteration effectiveness (any change can be reflected in data)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;things-we-want-to-do-but-havent-yet&quot;&gt;Things We Want to Do but Haven’t Yet&lt;/h1&gt;
&lt;p&gt;By connecting the agile tools we use and automating iteration data collection, we can generate an “iteration quality score” and compare historical data across dimensions, thereby improving efficiency.&lt;/p&gt;</content:encoded></item><item><title>Agile Practice for a Small Team 2.0</title><link>https://blog.ly85.dev/en/posts/small-team-iteration-2-0/</link><guid isPermaLink="true">https://blog.ly85.dev/en/posts/small-team-iteration-2-0/</guid><description>From 1.0 to 2.0: after applying 1.0, we found many practical issues, so we upgraded the agile process to fit iteration changes.</description><pubDate>Wed, 18 Aug 2021 05:47:18 GMT</pubDate><content:encoded>&lt;h1 id=&quot;phase-10&quot;&gt;Phase 1.0&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;/posts/small-team-iteration-1.0&quot;&gt;1.0&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;everything-starts-from-requirements&quot;&gt;Everything Starts from Requirements&lt;/h1&gt;
&lt;p&gt;During the 1.0 phase, we found many practical issues in implementation and usage. So we improved and upgraded the overall agile process to adapt to changes in team iterations.&lt;/p&gt;
&lt;h2 id=&quot;requirement-source-categories&quot;&gt;Requirement Source Categories&lt;/h2&gt;
&lt;p&gt;Because requirement channels are diverse, we categorized sources for easier management:&lt;/p&gt;
&lt;figure class=&quot;wp-block-table&quot;&gt;
&lt;table class=&quot;has-fixed-layout&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement Code&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Iteration Version Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Feature&lt;/td&gt;
&lt;td&gt;Product-value driven self-initiated iteration&lt;/td&gt;
&lt;td&gt;feature/sprintXX, e.g. feature/sprint40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CS&lt;/td&gt;
&lt;td&gt;User-side requirements from Customer Success managers&lt;/td&gt;
&lt;td&gt;cs/yyyyMMdd, e.g. cs/20210713&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tech&lt;/td&gt;
&lt;td&gt;Tech improvement or refactoring initiated by R&amp;#x26;D&lt;/td&gt;
&lt;td&gt;tech/module-or-refactor-name, e.g. tech/mtms, tech/res&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hotfix&lt;/td&gt;
&lt;td&gt;Online issue fixes triggered by incident flow&lt;/td&gt;
&lt;td&gt;hotfix/yyyyMMdd, e.g. hotfix/20210713&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/figure&gt;
&lt;p&gt;Currently, our team only triggers Sprints for &lt;strong&gt;feature&lt;/strong&gt; requirements. Other types do not trigger Sprints.&lt;/p&gt;
&lt;h1 id=&quot;iteration-process&quot;&gt;Iteration Process&lt;/h1&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-01.png&quot; title=&quot;敏捷迭代流程&quot; decoding=&quot;async&quot; alt=&quot;敏捷迭代流程&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;Overall, the iteration has 6 stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PRD Review: Product requirement review, user story review&lt;/li&gt;
&lt;li&gt;Estimate: High-level design, effort estimation (planning poker)&lt;/li&gt;
&lt;li&gt;Sprint Start: Create Sprint in Jira, version number, register user stories, create Gantt&lt;/li&gt;
&lt;li&gt;Sprint In Progress: Iteration in progress, daily standup at 10am to sync&lt;/li&gt;
&lt;li&gt;Deploy: PM &amp;#x26; UI acceptance, release&lt;/li&gt;
&lt;li&gt;Sprint Review: Iteration retrospective&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;1-prd-review&quot;&gt;1. PRD Review&lt;/h2&gt;
&lt;h3 id=&quot;prd-review-flow&quot;&gt;PRD Review Flow&lt;/h3&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-02.png&quot; title=&quot;PRD Review&quot; decoding=&quot;async&quot; alt=&quot;PRD Review&quot;&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;participants&quot;&gt;Participants&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lead: PM&lt;/li&gt;
&lt;li&gt;Participants: RD FE QA UI&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input&quot;&gt;Input&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PRD for this iteration. (Path: “PM Team” → “Product Requirements” → “2021 Product Requirements” → “Product Self-Iteration” → “PRD page of a specific iteration”)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;output&quot;&gt;Output&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Final prototype discussion in Lanhu&lt;/li&gt;
&lt;li&gt;Final user story discussion (Path: “DingTalk Drive” → “3-R&amp;#x26;D Dept” → “User Story Breakdown” → “SprintXX” → “User story files in the folder”)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;PRD&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-03.jpg&quot; title=&quot;PRD&quot; decoding=&quot;async&quot; alt=&quot;PRD&quot;&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;User stories in DingTalk&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-04.jpg&quot; title=&quot;用户故事&quot; decoding=&quot;async&quot; alt=&quot;用户故事&quot;&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;2-estimate&quot;&gt;2. Estimate&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;We use Planning Poker. It’s a consensus-based estimation method (a game) used to estimate development effort in Scrum iterations. Through team consensus, deviation becomes relatively small.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-is-planning-poker&quot;&gt;What Is Planning Poker&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Planning Poker uses the Fibonacci sequence as Story Points. The Fibonacci sequence is a series of numbers introduced in the 13th century, used to explain patterns in nature (e.g., tree branching). The next value is the sum of the previous two: 0, 1/2, 1, 2, 3, 5, 8, 13, 20. For agile estimation, some numbers are adjusted to: 1, 2, 3, 5, 8, 13, 20, 40, 100.&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-05.png&quot; title=&quot;规划扑克&quot; decoding=&quot;async&quot; alt=&quot;规划扑克&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;Poker legend (point convention: 1 Story Point = 1 person/day)&lt;/p&gt;
&lt;figure class=&quot;wp-block-table&quot;&gt;
&lt;table class=&quot;has-fixed-layout&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Card&lt;/th&gt;
&lt;th&gt;Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;No work needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infinity&lt;/td&gt;
&lt;td&gt;Large task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;Cannot estimate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A cup of coffee&lt;/td&gt;
&lt;td&gt;Less than 0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Others&lt;/td&gt;
&lt;td&gt;Interpret points literally&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;estimation-flow&quot;&gt;Estimation Flow&lt;/h3&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-06.png&quot; title=&quot;估算&quot; decoding=&quot;async&quot; alt=&quot;估算&quot;&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;participants-1&quot;&gt;Participants&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lead: PM&lt;/li&gt;
&lt;li&gt;Participants: RD FE QA&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input-1&quot;&gt;Input&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;User stories&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;output-1&quot;&gt;Output&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Estimates and priorities for user stories&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Steps (usually consensus is reached within 2 rounds)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PM describes the user story&lt;/li&gt;
&lt;li&gt;RD / FE team members play cards face down (Fibonacci values: 1, 2, 3, 5, 8, 13, 20, 40)&lt;/li&gt;
&lt;li&gt;Reveal cards simultaneously&lt;/li&gt;
&lt;li&gt;Explain estimation differences and discuss&lt;/li&gt;
&lt;li&gt;Reach estimation consensus&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estimation record&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-07.png&quot; title=&quot;估算记录表&quot; decoding=&quot;async&quot; alt=&quot;估算记录表&quot;&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;After estimation, we fill the results into the story list in DingTalk Drive and confirm story priorities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3-sprint-start&quot;&gt;3. Sprint Start&lt;/h2&gt;
&lt;h3 id=&quot;sprint-creation--start-flow&quot;&gt;Sprint Creation &amp;#x26; Start Flow&lt;/h3&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-08.png&quot; title=&quot;Sprint创建&amp;#x26;开启&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;participants-2&quot;&gt;Participants&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lead: Scrum Master (QA)&lt;/li&gt;
&lt;li&gt;Participants: RD FE QA&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input-2&quot;&gt;Input&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;User stories &amp;#x26; estimation results&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;output-2&quot;&gt;Output&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Sprint &amp;#x26; Gantt&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Create Epic&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-09.jpg&quot; title=&quot;创建Epic&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Create Story&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-10.jpg&quot; title=&quot;创建Story&quot; decoding=&quot;async&quot; alt=&quot;创建Story&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-11.jpg&quot; title=&quot;创建Story&quot; decoding=&quot;async&quot; alt=&quot;创建Story&quot;&gt;
&lt;/figure&gt;
&lt;p&gt;\&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sprint board&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-12.jpg&quot; title=&quot;Sprint看板&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Gantt&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-13.jpg&quot; title=&quot;Gantt&quot; decoding=&quot;async&quot; alt=&quot;Gantt&quot;&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;4-sprint-in-progress&quot;&gt;4. Sprint In Progress&lt;/h2&gt;
&lt;h3 id=&quot;daily-flow&quot;&gt;Daily Flow&lt;/h3&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-14.png&quot; title=&quot;Sprint In Progress&quot; decoding=&quot;async&quot; alt=&quot;Sprint In Progress&quot;&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;participants-3&quot;&gt;Participants&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lead: Scrum Master (QA)&lt;/li&gt;
&lt;li&gt;Participants: RD FE QA&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input-3&quot;&gt;Input&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Standup sync&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;output-3&quot;&gt;Output&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;User story updates&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;5-deploy&quot;&gt;5. Deploy&lt;/h2&gt;
&lt;h3 id=&quot;acceptance--release-flow&quot;&gt;Acceptance &amp;#x26; Release Flow&lt;/h3&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-15.png&quot; title=&quot;Deploy&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;participants-4&quot;&gt;Participants&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lead: Scrum Master (QA)&lt;/li&gt;
&lt;li&gt;Participants: PM UI RD FE&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input-4&quot;&gt;Input&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;UAT environment&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;output-4&quot;&gt;Output&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Iteration release&lt;/li&gt;
&lt;li&gt;Sprint Done&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;6-sprint-review&quot;&gt;6. Sprint Review&lt;/h2&gt;
&lt;h3 id=&quot;review-flow&quot;&gt;Review Flow&lt;/h3&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-16.png&quot; title=&quot;Sprint Review&quot; decoding=&quot;async&quot; alt=&quot;Sprint Review&quot;&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;participants-5&quot;&gt;Participants&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lead: QA&lt;/li&gt;
&lt;li&gt;Participants: PM UI RD FE&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input-5&quot;&gt;Input&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Test report&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;output-5&quot;&gt;Output&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Retrospective results&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Test report&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-17.jpg&quot; title=&quot;Review Report&quot; decoding=&quot;async&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-18.jpg&quot; title=&quot;Review Report&quot; decoding=&quot;async&quot; alt=&quot;Review Report&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-19.jpg&quot; title=&quot;Review Report&quot; decoding=&quot;async&quot; alt=&quot;Review Report&quot;&gt;
&lt;/figure&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;
&lt;img src=&quot;https://r2.ly85.dev/small-team-iteration-2-20.jpg&quot; title=&quot;Review Report&quot; decoding=&quot;async&quot; alt=&quot;Review Report&quot;&gt;
&lt;/figure&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;
&lt;p&gt;The above is the current 2.0 version of our R&amp;#x26;D team’s agile iteration process. The key improvements ahead are introducing CI, automated testing, and other approaches to further improve testing efficiency and surface issues faster.&lt;/p&gt;</content:encoded></item></channel></rss>