<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Owen Yuwono</title>
    <description>The latest articles on DEV Community by Owen Yuwono (@owenyuwono).</description>
    <link>https://dev.to/owenyuwono</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F492537%2Fe3acdfbf-4d6d-4491-91d5-8b65ae5f6cbc.png</url>
      <title>DEV Community: Owen Yuwono</title>
      <link>https://dev.to/owenyuwono</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/owenyuwono"/>
    <language>en</language>
    <item>
      <title>A game design textbook explains why products with fewer features win</title>
      <dc:creator>Owen Yuwono</dc:creator>
      <pubDate>Fri, 22 May 2026 15:20:02 +0000</pubDate>
      <link>https://dev.to/owenyuwono/a-game-design-textbook-explains-why-products-with-fewer-features-win-4550</link>
      <guid>https://dev.to/owenyuwono/a-game-design-textbook-explains-why-products-with-fewer-features-win-4550</guid>
      <description>&lt;p&gt;Jira owned the project management market. Asana, Monday, Basecamp, Trello, ClickUp all competed on features. Linear's team walked in with fewer features than any of them and built a following among engineers. Linear is a worse product on paper. It does less. But the engineers who use it will fight you if you try to switch them back.&lt;/p&gt;

&lt;p&gt;This pattern repeats across software. Products with fewer features take share in markets where the feature gap has collapsed to zero. The reason comes from game design.&lt;/p&gt;

&lt;h2&gt;
  
  
  The game is not the experience
&lt;/h2&gt;

&lt;p&gt;Jesse Schell is a former Creative Director at Walt Disney Imagineering, Carnegie Mellon professor, and author of &lt;a href="https://www.amazon.com/Art-Game-Design-Lenses-Third/dp/1138632058" rel="noopener noreferrer"&gt;&lt;em&gt;The Art of Game Design: A Book of Lenses&lt;/em&gt;&lt;/a&gt; (now in its &lt;a href="https://www.routledge.com/The-Art-of-Game-Design-A-Book-of-Lenses-Third-Edition/Schell/p/book/9781138632059" rel="noopener noreferrer"&gt;third edition&lt;/a&gt;, 113 lenses drawing from psychology, architecture, music, anthropology, and film).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lens #2: The Lens of Essential Experience.&lt;/strong&gt; The game is not the experience. The game enables the experience, but it is not the experience. A game designer's job is to identify the essential experience and design everything to support it. A feature list enables the product, but the user's experience of it determines whether they stay.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://etc.cmu.edu/index.php/about/our-people/faculty-staff/jesse-schell" rel="noopener noreferrer"&gt;Schell&lt;/a&gt; adds the concept of &lt;strong&gt;resonance&lt;/strong&gt;: game themes that touch players do so by fulfilling their fantasies or affirming an idea the player holds to be true. Skyrim's world is heavily scripted, but the fantasy of total freedom in a simpler world resonated enough that Bethesda sold 60 million copies on it. People buy Stardew Valley over games with 100x its budget because the pitch is the peace of farming minus the labor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Lens of Freedom&lt;/strong&gt;: you don't need to give the player true freedom, only the feeling of freedom. Notion works even though users rarely touch half its features. The feeling of having a system you built yourself is what keeps them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fantasies that won
&lt;/h2&gt;

&lt;p&gt;If the experience runs on fantasy fulfillment, then every product that won a crowded market should have a clear fantasy behind it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The competence fantasy.&lt;/strong&gt; Vim and Neovim hold a devoted audience alongside VS Code because the difficulty is the appeal. Mastering Vim feels like beating a boss. The learning curve filters for people who want the fantasy of being an elite engineer. Vim users have a moment where they realize they're editing text faster than anyone around them. Stack Overflow appeals to the same need: answer a question and the system tells you that you're an expert. People chose Stack Overflow because it let them prove competence to strangers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The belonging fantasy.&lt;/strong&gt; Discord won gaming communities by making "your server" feel like "your guild." Custom roles and custom emojis made each server feel owned. Slack won workplace communication by making "your workspace" feel like your team's living room. They serve different markets but both won on the same fantasy: you belong to a group that has its own space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The control fantasy.&lt;/strong&gt; Linear's team is taking Jira's market by offering the absence of chaos. Calm UI and fast keyboard shortcuts. Engineers pick Linear because it makes them feel like their work is under control, even when it isn't. Notion appeals to a related need: the workspace is the character sheet, the weekly planner is the quest log. Stripe's team targets developers with the control fantasy. The API docs and the platform architecture tell the developer that they're building real infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The accumulation fantasy.&lt;/strong&gt; VS Code's appeal is power accumulation. Each extension you install and each keybinding you learn makes your editor do more than it did yesterday. GitHub delivers accumulation, and the comparison with GitLab and Bitbucket makes it visible. All three host code. GitHub is the one that turned contribution history into a persistent asset: the green squares, the profile page. GitLab and Bitbucket store your code. GitHub made your contribution history feel like a track record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The expression fantasy.&lt;/strong&gt; Figma's appeal to designers is that the tool for designing things is itself a design game. Designers chose Figma because it let them express and iterate with other people watching. Excalidraw offers expression differently: the hand-drawn aesthetic says "this is a sketch, not a commitment."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The reward fantasy.&lt;/strong&gt; Schell's Lens of Pleasure and Lens of Reward describe why certain game loops keep players coming back: the experience of earning something feels good independent of what you earned. Duolingo's team built a productivity app around this loop. The streak counter and the XP bar pull you back. The guilt trip from the owl when you miss a day makes sure you don't leave. Social media runs on the same loop (likes and notifications). Robinhood's team brought it to investing: confetti on your first trade.&lt;/p&gt;

&lt;p&gt;Not every product maps to a clean fantasy (chaos and destruction drive entire game genres but have few product analogues), but the exercise forces you to ask Schell's question: what is the essential experience?&lt;/p&gt;

&lt;h2&gt;
  
  
  A lens from outside your discipline
&lt;/h2&gt;

&lt;p&gt;None of the fantasies above came from the engineering discipline. They came from a &lt;a href="https://www.amazon.com/Art-Game-Design-Lenses-Third/dp/1138632058" rel="noopener noreferrer"&gt;game design textbook&lt;/a&gt; written by a former Disney Imagineer who also worked at IBM as a software engineer.&lt;/p&gt;

&lt;p&gt;Grand strategy games train you to think about systems architecture. MMO guilds give you a framework for team dynamics and community products. A game design textbook reframes product-market fit in ways that product management books don't cover.&lt;/p&gt;

&lt;p&gt;The advice to specialize is about depth, and depth matters. But specialization advice usually comes with an implicit "and ignore everything else." The engineer who reads game design or studies psychology has more mental models to pull from when the feature list runs out and the product needs a reason to exist.&lt;/p&gt;

&lt;p&gt;Map your product to the fantasies above. If you can't articulate which fantasy you offer that your competitors don't, you're competing on features, and features will converge over time. Schell's &lt;a href="https://www.amazon.com/Art-Game-Design-Lenses-Third/dp/1138632058" rel="noopener noreferrer"&gt;Lens of Emotion&lt;/a&gt; asks: what emotions should the player feel, and are they feeling them? Next time you run a user test, ask what your users felt.&lt;/p&gt;

</description>
      <category>design</category>
      <category>product</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>How I Cut My AI Usage by 60% and Got Better Code</title>
      <dc:creator>Owen Yuwono</dc:creator>
      <pubDate>Fri, 15 May 2026 03:07:24 +0000</pubDate>
      <link>https://dev.to/owenyuwono/how-i-cut-my-ai-usage-by-60-and-got-better-code-1h40</link>
      <guid>https://dev.to/owenyuwono/how-i-cut-my-ai-usage-by-60-and-got-better-code-1h40</guid>
      <description>&lt;p&gt;I stopped thinking of Claude Code as an AI assistant about three months ago. Now I think of it as a team of five engineers I have to manage.&lt;/p&gt;

&lt;p&gt;The moment I started treating it as a team, with actual roles and permissions and reporting lines, everything got better. I used to blow through my Claude 20x Max weekly limit every single week. Now I hover around 40%.&lt;/p&gt;

&lt;p&gt;The default Claude Code experience has the same failure mode as a solo developer doing everything in one sitting. The planning is contaminated by the urge to start coding. The review is soft because the reviewer wrote the code. The documentation is an afterthought.&lt;/p&gt;

&lt;p&gt;It's crazy that we must treat AI as human to get the most out of it, but it does get the most out of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context is the bottleneck
&lt;/h2&gt;

&lt;p&gt;LLMs have a finite context window. Every token of planning, implementation, debugging, testing, and review that happens in one session is competing for space in the same window. The longer the session runs, the more the model loses track of earlier decisions. This is a well-documented phenomenon called &lt;a href="https://www.producttalk.org/context-rot/" rel="noopener noreferrer"&gt;context rot&lt;/a&gt;. Research shows an average &lt;a href="https://arxiv.org/html/2512.13914v1" rel="noopener noreferrer"&gt;39% performance drop&lt;/a&gt; in multi-turn conversations, with models making premature assumptions and failing to course-correct. When models take a wrong turn in a conversation, they get lost and don't recover.&lt;/p&gt;

&lt;p&gt;Humans have the same problem. We call it context switching. A developer who just spent two hours deep in implementation can't instantly flip to doing a rigorous code review on their own work. The implementation context is still in their head, biasing every judgment. That's why teams exist. The reviewer walks in cold. They only see what's on the page. Fresh eyes, fresh context.&lt;/p&gt;

&lt;p&gt;Subagents work the same way. Each one spins up in a fresh context window. The reviewer has never seen the implementation process. It gets the diff, the affected files, and nothing else. Its entire context budget goes toward reviewing, not remembering how the code got written. The architect doesn't carry implementation details because it runs before any code exists.&lt;/p&gt;

&lt;p&gt;You're giving each task a clean slate of attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the team
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Subagents
&lt;/h3&gt;

&lt;p&gt;Claude Code supports custom subagents that you define and drop into your project. You don't need to write these from scratch. Just tell Claude Code what kind of agent you want, describe the role and constraints, and it'll generate the agent file for you. The agents live in &lt;code&gt;.claude/agents/&lt;/code&gt; for project scope (committed to the repo, shared with the team) or &lt;code&gt;~/.claude/agents/&lt;/code&gt; for personal scope.&lt;/p&gt;

&lt;p&gt;A few design decisions that matter more than the prompt itself:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool restriction is the highest leverage knob.&lt;/strong&gt; A reviewer agent with only &lt;code&gt;Read, Grep, Glob&lt;/code&gt; cannot break anything. It can't edit a file. It can't run a destructive command. Give each agent the minimum tools it needs. Read-only agents are safe to run liberally. Write-capable agents need more supervision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model routing saves you from yourself.&lt;/strong&gt; Not every task needs your most expensive model. I run Opus for the architect and reviewer because those are high leverage decisions. Sonnet for the debugger and engineer. Haiku for the researcher because it's just fetching and reading docs, not doing deep reasoning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project scope vs. user scope.&lt;/strong&gt; Agents in &lt;code&gt;.claude/agents/&lt;/code&gt; get committed to the repo. Every engineer on the team gets them when they clone. Agents in &lt;code&gt;~/.claude/agents/&lt;/code&gt; are personal.&lt;/p&gt;

&lt;h3&gt;
  
  
  The five
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Architect
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;opus&lt;/span&gt;
&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read, Grep, Glob&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Produces plans, never code. Restates the goal, identifies affected files, lists concrete steps with decision points, flags risks. It pushes back on ambiguity. "Add validation" is a bad step. "Reject empty strings in &lt;code&gt;parseInput()&lt;/code&gt; at line 42 and return a 400 with message 'name required'" is a good one. No write tools. If it can't edit files, it can't skip ahead. Pair it with your project's design patterns skill.&lt;/p&gt;

&lt;h4&gt;
  
  
  Reviewer
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;opus&lt;/span&gt;
&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read, Grep, Glob, Bash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never modifies code. Reads the diff plus the full affected files, then reports findings by severity: blockers, issues, nits, positives. Cites file and line number for every finding. If a category is empty, says so instead of padding with filler. This is where Opus earns its cost. A review that catches a race condition, a missing null check, or an auth bypass before production pays for itself. Load your testing and security conventions skill here.&lt;/p&gt;

&lt;h4&gt;
  
  
  Engineer
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sonnet&lt;/span&gt;
&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read, Grep, Glob, Bash, Edit, Write&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Writes implementation code and tests. Follows existing conventions and patterns in the repo. Covers edge cases and failure paths, not just the happy path. Doesn't refactor code it wasn't asked to touch. This is the agent that benefits the most from framework-specific skills. More on that below.&lt;/p&gt;

&lt;h4&gt;
  
  
  Debugger
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sonnet&lt;/span&gt;
&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read, Grep, Glob, Bash, Edit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reproduces, isolates, fixes. Critical instruction: keep asking "why" until you hit root cause, not symptom. Does not fix unrelated issues. Does not refactor while debugging. If the bug can't be reproduced, says so and stops.&lt;/p&gt;

&lt;h4&gt;
  
  
  Researcher
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;haiku&lt;/span&gt;
&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read, WebSearch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The researcher doesn't write code. When Claude encounters an unfamiliar library, a framework API it's not confident about, or a pattern it might hallucinate on, the researcher goes and looks it up. It searches the web, reads the documentation, and brings back facts instead of guesses. Instead of letting Claude make things up about a library's API, you send the researcher out to get the real answer first. Cheap to run, and it pays for itself every time it prevents a subtle API misuse that would've taken you an hour to debug.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orchestrating with CLAUDE.md
&lt;/h3&gt;

&lt;p&gt;To combine all these agents into something that works together, you need to orchestrate them in your project's &lt;code&gt;CLAUDE.md&lt;/code&gt; (or your user-level one at &lt;code&gt;~/.claude/CLAUDE.md&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Out of the box, Claude Code will try to do everything itself in the main session. You need to instruct it to delegate and run agents in parallel. Tell it to always use subagents for tasks, to run the architect first, then fan out engineer tasks in parallel, and always run the reviewer after implementation completes.&lt;/p&gt;

&lt;p&gt;This changes Claude from sequential (grind through everything in one thread) to parallel (delegate and fan out). On large tasks touching 10+ files, parallel agents cut the total time in half or more. The main session becomes a coordinator, not a worker.&lt;/p&gt;

&lt;p&gt;Your &lt;code&gt;CLAUDE.md&lt;/code&gt; is also where you put all your project-related context. Conventions, patterns, architectural decisions, stack choices. Keep it short and opinionated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Skills
&lt;/h3&gt;

&lt;p&gt;Skills are the other half of the system and most people skip them.&lt;/p&gt;

&lt;p&gt;They're folders of instructions, scripts, and reference materials that Claude loads on demand. They live in &lt;code&gt;.claude/skills/&lt;/code&gt; and follow the &lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;Agent Skills open standard&lt;/a&gt;, which means they work across Claude Code, Codex, Gemini CLI, Cursor, and others.&lt;/p&gt;

&lt;p&gt;The key design principle is progressive disclosure. At startup, Claude only sees each skill's name and description, roughly 30 to 50 tokens per skill. The full instructions only load when the agent decides the skill is relevant to the current task. You can have dozens of skills installed and pay zero context cost on unrelated tasks.&lt;/p&gt;

&lt;p&gt;Why does this matter? Because there's real research backing it up. The &lt;a href="https://arxiv.org/abs/2602.12670" rel="noopener noreferrer"&gt;SkillsBench paper&lt;/a&gt; tested 7 model configurations across 7,308 task trajectories and found that curated skills raise average pass rates by 16.2 percentage points. The headline finding: &lt;strong&gt;Claude Haiku with skills (27.7%) outperformed Claude Opus without skills (22.0%).&lt;/strong&gt; A smaller, cheaper model with the right procedural knowledge beats a bigger, more expensive model running blind.&lt;/p&gt;

&lt;p&gt;The ecosystem has exploded. There are now thousands of community skills you can install and start using immediately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/samber/cc-skills-golang" rel="noopener noreferrer"&gt;&lt;strong&gt;samber/cc-skills-golang&lt;/strong&gt;&lt;/a&gt;: A comprehensive Golang skill set covering idiomatic patterns, security, testing, and project structure. Supports company-level overrides so you can layer your team's conventions on top of community defaults.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/flutter/skills" rel="noopener noreferrer"&gt;&lt;strong&gt;Flutter official skills&lt;/strong&gt;&lt;/a&gt;: 10 skills from the Flutter team itself, covering layouts, state management, navigation, native interop, platform setup, and testing. When the framework maintainers write the skills, Claude gets the same guidance a Flutter team lead would give.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/anthropics/skills" rel="noopener noreferrer"&gt;&lt;strong&gt;Anthropic's document skills&lt;/strong&gt;&lt;/a&gt;: The docx, pdf, pptx, and xlsx skills that power Claude's document editing capabilities. Open source and a great reference for writing complex skills with scripts and supporting files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't have to build everything from scratch. Install community skills for your stack, and each of your agents will pick up and use the ones relevant to their task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it all together
&lt;/h2&gt;

&lt;p&gt;Here's what the full workflow looks like in practice:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91t48u9h49oh4xl4my9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91t48u9h49oh4xl4my9n.png" alt="Agent Workflow Diagram" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same design constraints as a human engineering team. Role clarity, scoped authority, separation of concerns. Five agents, the right skills, and a CLAUDE.md that ties them together.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
