<?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: Drew Marshall</title>
    <description>The latest articles on DEV Community by Drew Marshall (@stinklewinks).</description>
    <link>https://dev.to/stinklewinks</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F832808%2Fa1b7233f-14c6-4bcd-8a1e-c9f338124447.png</url>
      <title>DEV Community: Drew Marshall</title>
      <link>https://dev.to/stinklewinks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stinklewinks"/>
    <language>en</language>
    <item>
      <title>The Artist Is Taking the Reins</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Fri, 04 Sep 2026 13:50:32 +0000</pubDate>
      <link>https://dev.to/stinklewinks/the-artist-is-taking-the-reins-5bn9</link>
      <guid>https://dev.to/stinklewinks/the-artist-is-taking-the-reins-5bn9</guid>
      <description>&lt;p&gt;For a long time, I treated my interests in technology and creativity like they belonged in separate rooms.&lt;/p&gt;

&lt;p&gt;There was the technical side of me:&lt;/p&gt;

&lt;p&gt;Software engineering.&lt;br&gt;
Web development.&lt;br&gt;
Systems architecture.&lt;br&gt;
Game engines.&lt;br&gt;
Infrastructure.&lt;br&gt;
Electronics.&lt;br&gt;
Security.&lt;br&gt;
Tools.&lt;/p&gt;

&lt;p&gt;And then there was the creative side:&lt;/p&gt;

&lt;p&gt;Music.&lt;br&gt;
Songwriting.&lt;br&gt;
Guitars.&lt;br&gt;
Sound.&lt;br&gt;
Stories.&lt;br&gt;
Design.&lt;br&gt;
Worldbuilding.&lt;br&gt;
Making things simply because I wanted them to exist.&lt;/p&gt;

&lt;p&gt;I kept trying to figure out which one I was supposed to be.&lt;/p&gt;

&lt;p&gt;Was I a software engineer who happened to make music?&lt;/p&gt;

&lt;p&gt;Was I a musician who knew how to code?&lt;/p&gt;

&lt;p&gt;Was CitrusWorx the "serious" technical work while Blackwater Sound was the creative side project?&lt;/p&gt;

&lt;p&gt;Eventually I realized that the question itself was wrong.&lt;/p&gt;

&lt;p&gt;They were never supposed to be separate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology Was Becoming My Identity
&lt;/h2&gt;

&lt;p&gt;I love technology.&lt;/p&gt;

&lt;p&gt;That hasn't changed.&lt;/p&gt;

&lt;p&gt;I love opening something up and figuring out how it works.&lt;/p&gt;

&lt;p&gt;I love understanding systems.&lt;/p&gt;

&lt;p&gt;I love asking why an architecture was designed a certain way, why a circuit behaves the way it does, why a programming language made a particular tradeoff, or why an old amplifier sounds different from a modern one.&lt;/p&gt;

&lt;p&gt;I can happily spend hours thinking about software architecture, operating systems, networking, electronics, programming languages, rendering engines, distributed systems, or some obscure piece of computer history.&lt;/p&gt;

&lt;p&gt;But somewhere along the way, technology went from being something I used to becoming something I felt obligated to center my identity around.&lt;/p&gt;

&lt;p&gt;And that distinction matters.&lt;/p&gt;

&lt;p&gt;Because I'm not interested in technology simply for technology's sake.&lt;/p&gt;

&lt;p&gt;I'm interested in what technology allows people to &lt;strong&gt;make&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That realization changed how I think about nearly everything I'm building.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Artist Gets to Drive Now
&lt;/h2&gt;

&lt;p&gt;I've started thinking about myself differently.&lt;/p&gt;

&lt;p&gt;My artistic and creative side gets to take the reins.&lt;/p&gt;

&lt;p&gt;My technical side doesn't disappear.&lt;/p&gt;

&lt;p&gt;It becomes the superpower.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What technology should I build?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm more interested in asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What do I want to create, and what technology would make that possible?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That might sound like a small difference.&lt;/p&gt;

&lt;p&gt;For me, it isn't.&lt;/p&gt;

&lt;p&gt;It changes the entire direction of the work.&lt;/p&gt;

&lt;p&gt;The destination is no longer dictated by the technology.&lt;/p&gt;

&lt;p&gt;The destination is dictated by the thing I want to make.&lt;/p&gt;

&lt;p&gt;The engineer figures out how to get there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blackwater Sound + CitrusWorx
&lt;/h2&gt;

&lt;p&gt;This realization also helped me understand something about the different projects I've been building.&lt;/p&gt;

&lt;p&gt;Blackwater Sound and CitrusWorx aren't competing identities.&lt;/p&gt;

&lt;p&gt;They belong together.&lt;/p&gt;

&lt;p&gt;Blackwater Sound is where a lot of the musical and creative work lives.&lt;/p&gt;

&lt;p&gt;Within that world are projects like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;berylaudio&lt;/strong&gt; — audio software, plugins, pedals, and tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WINK Guitar&lt;/strong&gt; — guitars, basses, mandolins, education, and instrument making&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LIME Amplification&lt;/strong&gt; — guitar amplifiers and cabinets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then there is CitrusWorx, where much of my engineering, software, systems thinking, research, and technology work lives.&lt;/p&gt;

&lt;p&gt;Those worlds don't need a wall between them.&lt;/p&gt;

&lt;p&gt;In fact, separating them makes both of them weaker.&lt;/p&gt;

&lt;p&gt;An amplifier is art and engineering.&lt;/p&gt;

&lt;p&gt;A guitar is art and engineering.&lt;/p&gt;

&lt;p&gt;A pedal is art and engineering.&lt;/p&gt;

&lt;p&gt;A synthesizer is art and engineering.&lt;/p&gt;

&lt;p&gt;A recording studio is art and engineering.&lt;/p&gt;

&lt;p&gt;An audio plugin is art and engineering.&lt;/p&gt;

&lt;p&gt;Even the modern music industry itself is inseparable from technology.&lt;/p&gt;

&lt;p&gt;The history of music is full of people abusing, modifying, misusing, inventing, rebuilding, and reimagining technology in the pursuit of a sound that didn't exist yet.&lt;/p&gt;

&lt;p&gt;That is much closer to the kind of technologist I want to be.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiwi Engine Still Matters
&lt;/h2&gt;

&lt;p&gt;This doesn't mean I'm abandoning software.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;p&gt;I'm returning to Kiwi Engine with a clearer reason for why I want it to exist.&lt;/p&gt;

&lt;p&gt;Kiwi Engine is my web application engine.&lt;/p&gt;

&lt;p&gt;The goal is for the sites, tools, applications, and digital experiences throughout this ecosystem to be built on technology that I understand and can shape.&lt;/p&gt;

&lt;p&gt;But Kiwi Engine no longer needs to be the center of the universe.&lt;/p&gt;

&lt;p&gt;It is infrastructure.&lt;/p&gt;

&lt;p&gt;It is a workshop.&lt;/p&gt;

&lt;p&gt;It is a toolbench.&lt;/p&gt;

&lt;p&gt;It is something I can use to build the experiences surrounding the things I actually care about.&lt;/p&gt;

&lt;p&gt;Maybe that means building software for musicians.&lt;/p&gt;

&lt;p&gt;Maybe it powers an interactive guitar-building course.&lt;/p&gt;

&lt;p&gt;Maybe it becomes the foundation for an amplifier design notebook.&lt;/p&gt;

&lt;p&gt;Maybe it runs tools for organizing recording sessions.&lt;/p&gt;

&lt;p&gt;Maybe it powers documentation for an open hardware project.&lt;/p&gt;

&lt;p&gt;Maybe it becomes part of an ecosystem for musicians who want more ownership over their creative tools.&lt;/p&gt;

&lt;p&gt;Maybe none of those ideas look exactly the way I imagine them today.&lt;/p&gt;

&lt;p&gt;That's fine.&lt;/p&gt;

&lt;p&gt;The important thing is that the technology is serving the creative work instead of the creative work becoming an excuse to build technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Want to Talk About Things That Make Noise
&lt;/h2&gt;

&lt;p&gt;I also realized something about what I actually enjoy writing and talking about.&lt;/p&gt;

&lt;p&gt;I don't want every article I write to be:&lt;/p&gt;

&lt;p&gt;"Here are ten JavaScript tricks."&lt;/p&gt;

&lt;p&gt;"Here's another framework comparison."&lt;/p&gt;

&lt;p&gt;"Here's how I configured Kubernetes."&lt;/p&gt;

&lt;p&gt;There's nothing wrong with those articles.&lt;/p&gt;

&lt;p&gt;I'll probably still write some of them.&lt;/p&gt;

&lt;p&gt;But I also want to write about why a particular guitar pickup sounds the way it does.&lt;/p&gt;

&lt;p&gt;I want to explore what happens inside a tube amplifier.&lt;/p&gt;

&lt;p&gt;I want to talk about distortion circuits.&lt;/p&gt;

&lt;p&gt;I want to tear apart pedals and understand their topology.&lt;/p&gt;

&lt;p&gt;I want to study recording techniques.&lt;/p&gt;

&lt;p&gt;I want to explore the history of instruments.&lt;/p&gt;

&lt;p&gt;I want to talk about the technology that changed music.&lt;/p&gt;

&lt;p&gt;I want to study the technology behind famous recordings.&lt;/p&gt;

&lt;p&gt;I want to understand why certain pieces of gear became culturally important.&lt;/p&gt;

&lt;p&gt;I want to build audio software and then explain exactly how it works.&lt;/p&gt;

&lt;p&gt;I want to make instruments.&lt;/p&gt;

&lt;p&gt;I want to write songs.&lt;/p&gt;

&lt;p&gt;I want to create sounds that didn't exist before.&lt;/p&gt;

&lt;p&gt;And yes, somewhere in the middle of all of that, I will probably write a ridiculous amount of code.&lt;/p&gt;

&lt;p&gt;That sounds much more like me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creative Engineering
&lt;/h2&gt;

&lt;p&gt;Maybe the best term I have for all of this is &lt;strong&gt;creative engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Engineering without creativity becomes optimization without direction.&lt;/p&gt;

&lt;p&gt;Creativity without execution can remain an idea forever.&lt;/p&gt;

&lt;p&gt;Put the two together and things start happening.&lt;/p&gt;

&lt;p&gt;You can imagine a sound and then design the circuit that creates it.&lt;/p&gt;

&lt;p&gt;You can imagine an instrument and then learn the woodworking, electronics, acoustics, manufacturing, and design required to build it.&lt;/p&gt;

&lt;p&gt;You can imagine a piece of software and then write the engine underneath it.&lt;/p&gt;

&lt;p&gt;You can imagine a world and then write the stories, compose the soundtrack, create the artwork, and build the systems that let someone experience it.&lt;/p&gt;

&lt;p&gt;That's the intersection I want to live in.&lt;/p&gt;

&lt;p&gt;Not purely art.&lt;/p&gt;

&lt;p&gt;Not purely technology.&lt;/p&gt;

&lt;p&gt;Making things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology Is an Instrument
&lt;/h2&gt;

&lt;p&gt;A guitar player doesn't usually build their identity around the screwdriver they used to adjust the bridge.&lt;/p&gt;

&lt;p&gt;A carpenter doesn't wake up every morning wondering whether they are primarily a table-saw person or a bandsaw person.&lt;/p&gt;

&lt;p&gt;The tool matters.&lt;/p&gt;

&lt;p&gt;Mastery matters.&lt;/p&gt;

&lt;p&gt;Understanding the tool deeply matters.&lt;/p&gt;

&lt;p&gt;But the tool exists in service of the work.&lt;/p&gt;

&lt;p&gt;I'm starting to think about software the same way.&lt;/p&gt;

&lt;p&gt;Programming languages are tools.&lt;/p&gt;

&lt;p&gt;Frameworks are tools.&lt;/p&gt;

&lt;p&gt;Cloud platforms are tools.&lt;/p&gt;

&lt;p&gt;AI is a tool.&lt;/p&gt;

&lt;p&gt;Electronics are tools.&lt;/p&gt;

&lt;p&gt;CAD is a tool.&lt;/p&gt;

&lt;p&gt;Manufacturing is a tool.&lt;/p&gt;

&lt;p&gt;Kiwi Engine is a tool.&lt;/p&gt;

&lt;p&gt;And I absolutely want to understand my tools.&lt;/p&gt;

&lt;p&gt;I want to modify them.&lt;/p&gt;

&lt;p&gt;I want to build my own when necessary.&lt;/p&gt;

&lt;p&gt;I want to know what is happening underneath the abstraction.&lt;/p&gt;

&lt;p&gt;That curiosity isn't going anywhere.&lt;/p&gt;

&lt;p&gt;But the tool doesn't get to decide what I make.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'm Still an Engineer
&lt;/h2&gt;

&lt;p&gt;There's a funny thing about saying that technology isn't my identity anymore.&lt;/p&gt;

&lt;p&gt;It doesn't make me less technical.&lt;/p&gt;

&lt;p&gt;If anything, I think it gives me permission to become more technical.&lt;/p&gt;

&lt;p&gt;Because now the learning has somewhere to go.&lt;/p&gt;

&lt;p&gt;DSP isn't just mathematics.&lt;/p&gt;

&lt;p&gt;It's how I create an audio plugin.&lt;/p&gt;

&lt;p&gt;Electronics isn't just circuit theory.&lt;/p&gt;

&lt;p&gt;It's how I design a pedal or amplifier.&lt;/p&gt;

&lt;p&gt;Web development isn't just another application stack.&lt;/p&gt;

&lt;p&gt;It's how I build the platform around my creative work.&lt;/p&gt;

&lt;p&gt;Embedded programming isn't just firmware.&lt;/p&gt;

&lt;p&gt;It's how I make physical objects respond to musicians.&lt;/p&gt;

&lt;p&gt;Acoustics isn't just physics.&lt;/p&gt;

&lt;p&gt;It's how I understand an instrument.&lt;/p&gt;

&lt;p&gt;Manufacturing isn't just production engineering.&lt;/p&gt;

&lt;p&gt;It's how an idea becomes something another person can hold in their hands.&lt;/p&gt;

&lt;p&gt;Those connections make me want to learn more, not less.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coming Back Different
&lt;/h2&gt;

&lt;p&gt;I took some time away from developing Kiwi Engine.&lt;/p&gt;

&lt;p&gt;I took some time away from writing.&lt;/p&gt;

&lt;p&gt;At first, that felt like I had stopped.&lt;/p&gt;

&lt;p&gt;Now I think I was recalibrating.&lt;/p&gt;

&lt;p&gt;I'm coming back with a different hierarchy.&lt;/p&gt;

&lt;p&gt;The artist decides what should exist.&lt;/p&gt;

&lt;p&gt;The designer determines what it should feel like.&lt;/p&gt;

&lt;p&gt;The engineer figures out how to make it work.&lt;/p&gt;

&lt;p&gt;The researcher figures out what we can learn from everyone who came before us.&lt;/p&gt;

&lt;p&gt;The craftsperson builds it.&lt;/p&gt;

&lt;p&gt;And sometimes all of those people happen to be the same person.&lt;/p&gt;

&lt;p&gt;That's the part I'm finally learning to embrace.&lt;/p&gt;

&lt;p&gt;I still love software.&lt;/p&gt;

&lt;p&gt;I still love systems.&lt;/p&gt;

&lt;p&gt;I still want to build Kiwi Engine.&lt;/p&gt;

&lt;p&gt;I still want to explore strange technical rabbit holes.&lt;/p&gt;

&lt;p&gt;But I also want to build guitars.&lt;/p&gt;

&lt;p&gt;I want to make amplifiers.&lt;/p&gt;

&lt;p&gt;I want to design pedals.&lt;/p&gt;

&lt;p&gt;I want to create plugins.&lt;/p&gt;

&lt;p&gt;I want to write songs.&lt;/p&gt;

&lt;p&gt;I want to study music history.&lt;/p&gt;

&lt;p&gt;I want to understand why things sound the way they do.&lt;/p&gt;

&lt;p&gt;I want to make things that are technical, artistic, useful, strange, beautiful, complicated, simple, loud, quiet, digital, analog, physical, and occasionally completely unnecessary.&lt;/p&gt;

&lt;p&gt;Because sometimes "I wonder if I can build this" is reason enough to start.&lt;/p&gt;

&lt;p&gt;Technology isn't going away.&lt;/p&gt;

&lt;p&gt;It just isn't sitting in the driver's seat anymore.&lt;/p&gt;

&lt;p&gt;The artist is driving now.&lt;/p&gt;

&lt;p&gt;The engineer is riding shotgun.&lt;/p&gt;

&lt;p&gt;And I think we're going to build some interesting things.&lt;/p&gt;

</description>
      <category>music</category>
      <category>programming</category>
      <category>creativecoding</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Why Juice Generates CSS Instead of Owning It</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Wed, 01 Jul 2026 19:21:27 +0000</pubDate>
      <link>https://dev.to/stinklewinks/why-juice-generates-css-instead-of-owning-it-gk</link>
      <guid>https://dev.to/stinklewinks/why-juice-generates-css-instead-of-owning-it-gk</guid>
      <description>&lt;p&gt;One design goal I’ve had for Juice from the beginning is that it shouldn’t try to replace CSS.&lt;/p&gt;

&lt;p&gt;CSS already exists.&lt;/p&gt;

&lt;p&gt;It’s incredibly capable.&lt;/p&gt;

&lt;p&gt;The web doesn’t need another styling language.&lt;/p&gt;

&lt;p&gt;Instead, I wanted Juice to answer a different question:&lt;/p&gt;

&lt;p&gt;How can a design system express intent while still producing plain CSS?&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Becomes The Source Of Truth
&lt;/h2&gt;

&lt;p&gt;Recently I added support for configuration-driven stylesheet generation.&lt;/p&gt;

&lt;p&gt;Instead of shipping every possible style with Juice, the framework consumes a project configuration and generates stylesheets from it.&lt;/p&gt;

&lt;p&gt;Think of it as a theme generator.&lt;/p&gt;

&lt;p&gt;The configuration defines things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Colors&lt;/li&gt;
&lt;li&gt;Typography&lt;/li&gt;
&lt;li&gt;Spacing&lt;/li&gt;
&lt;li&gt;Shadows&lt;/li&gt;
&lt;li&gt;Borders&lt;/li&gt;
&lt;li&gt;Radius&lt;/li&gt;
&lt;li&gt;Animations&lt;/li&gt;
&lt;li&gt;Design tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Juice then generates the stylesheets those decisions require.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;One concern I have with many frameworks is that applications slowly become dependent on the framework itself for every design decision.&lt;/p&gt;

&lt;p&gt;Eventually the framework becomes responsible for everything.&lt;/p&gt;

&lt;p&gt;That wasn’t the direction I wanted.&lt;/p&gt;

&lt;p&gt;Instead, I wanted the project to own its design language.&lt;/p&gt;

&lt;p&gt;Juice simply helps express it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Framework Shouldn’t Own Your Brand
&lt;/h2&gt;

&lt;p&gt;Every application has its own identity.&lt;/p&gt;

&lt;p&gt;Its own colors.&lt;/p&gt;

&lt;p&gt;Its own typography.&lt;/p&gt;

&lt;p&gt;Its own spacing.&lt;/p&gt;

&lt;p&gt;Those things belong to the project.&lt;/p&gt;

&lt;p&gt;Not the framework.&lt;/p&gt;

&lt;p&gt;Juice shouldn’t tell you what your design system looks like.&lt;/p&gt;

&lt;p&gt;It should help you implement it consistently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Is Documentation
&lt;/h2&gt;

&lt;p&gt;An unexpected benefit is that the configuration becomes documentation.&lt;/p&gt;

&lt;p&gt;Instead of searching through dozens of CSS files, you can understand an application’s design language by reading a single configuration.&lt;/p&gt;

&lt;p&gt;The project becomes easier to reason about.&lt;/p&gt;

&lt;p&gt;The styling becomes intentional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I don’t want Juice to become another framework that tries to solve every styling problem.&lt;/p&gt;

&lt;p&gt;I want it to become a design system engine.&lt;/p&gt;

&lt;p&gt;The project defines the language.&lt;/p&gt;

&lt;p&gt;Juice helps enforce it.&lt;/p&gt;

&lt;p&gt;That’s a much more sustainable relationship than asking a framework to own every design decision.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>opensource</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why Juice Generates CSS Instead of Owning It</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Wed, 01 Jul 2026 19:21:27 +0000</pubDate>
      <link>https://dev.to/stinklewinks/why-juice-generates-css-instead-of-owning-it-3ong</link>
      <guid>https://dev.to/stinklewinks/why-juice-generates-css-instead-of-owning-it-3ong</guid>
      <description>&lt;p&gt;One design goal I’ve had for Juice from the beginning is that it shouldn’t try to replace CSS.&lt;/p&gt;

&lt;p&gt;CSS already exists.&lt;/p&gt;

&lt;p&gt;It’s incredibly capable.&lt;/p&gt;

&lt;p&gt;The web doesn’t need another styling language.&lt;/p&gt;

&lt;p&gt;Instead, I wanted Juice to answer a different question:&lt;/p&gt;

&lt;p&gt;How can a design system express intent while still producing plain CSS?&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Becomes The Source Of Truth
&lt;/h2&gt;

&lt;p&gt;Recently I added support for configuration-driven stylesheet generation.&lt;/p&gt;

&lt;p&gt;Instead of shipping every possible style with Juice, the framework consumes a project configuration and generates stylesheets from it.&lt;/p&gt;

&lt;p&gt;Think of it as a theme generator.&lt;/p&gt;

&lt;p&gt;The configuration defines things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Colors&lt;/li&gt;
&lt;li&gt;Typography&lt;/li&gt;
&lt;li&gt;Spacing&lt;/li&gt;
&lt;li&gt;Shadows&lt;/li&gt;
&lt;li&gt;Borders&lt;/li&gt;
&lt;li&gt;Radius&lt;/li&gt;
&lt;li&gt;Animations&lt;/li&gt;
&lt;li&gt;Design tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Juice then generates the stylesheets those decisions require.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;One concern I have with many frameworks is that applications slowly become dependent on the framework itself for every design decision.&lt;/p&gt;

&lt;p&gt;Eventually the framework becomes responsible for everything.&lt;/p&gt;

&lt;p&gt;That wasn’t the direction I wanted.&lt;/p&gt;

&lt;p&gt;Instead, I wanted the project to own its design language.&lt;/p&gt;

&lt;p&gt;Juice simply helps express it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Framework Shouldn’t Own Your Brand
&lt;/h2&gt;

&lt;p&gt;Every application has its own identity.&lt;/p&gt;

&lt;p&gt;Its own colors.&lt;/p&gt;

&lt;p&gt;Its own typography.&lt;/p&gt;

&lt;p&gt;Its own spacing.&lt;/p&gt;

&lt;p&gt;Those things belong to the project.&lt;/p&gt;

&lt;p&gt;Not the framework.&lt;/p&gt;

&lt;p&gt;Juice shouldn’t tell you what your design system looks like.&lt;/p&gt;

&lt;p&gt;It should help you implement it consistently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Is Documentation
&lt;/h2&gt;

&lt;p&gt;An unexpected benefit is that the configuration becomes documentation.&lt;/p&gt;

&lt;p&gt;Instead of searching through dozens of CSS files, you can understand an application’s design language by reading a single configuration.&lt;/p&gt;

&lt;p&gt;The project becomes easier to reason about.&lt;/p&gt;

&lt;p&gt;The styling becomes intentional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I don’t want Juice to become another framework that tries to solve every styling problem.&lt;/p&gt;

&lt;p&gt;I want it to become a design system engine.&lt;/p&gt;

&lt;p&gt;The project defines the language.&lt;/p&gt;

&lt;p&gt;Juice helps enforce it.&lt;/p&gt;

&lt;p&gt;That’s a much more sustainable relationship than asking a framework to own every design decision.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>opensource</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Architecture Doesn’t Care What You Build</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Tue, 30 Jun 2026 16:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/architecture-doesnt-care-what-you-build-4g4o</link>
      <guid>https://dev.to/stinklewinks/architecture-doesnt-care-what-you-build-4g4o</guid>
      <description>&lt;p&gt;One of the biggest realizations I’ve had while building KiwiEngine is that architecture doesn’t really care what you’re building.&lt;/p&gt;

&lt;p&gt;An authentication system doesn’t know whether it’s protecting an artist website or an accounting platform.&lt;/p&gt;

&lt;p&gt;An API doesn’t care whether it’s serving a CRM or a music player.&lt;/p&gt;

&lt;p&gt;A routing system doesn’t know if it’s powering an e-commerce store or a game launcher.&lt;/p&gt;

&lt;p&gt;Good architecture solves engineering problems.&lt;/p&gt;

&lt;p&gt;The domain simply gives those solutions a purpose.&lt;/p&gt;

&lt;p&gt;That realization completely changed how I think about KiwiEngine—and more importantly, how I think about the software I want to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture Solves Engineering Problems
&lt;/h2&gt;

&lt;p&gt;The longer I’ve worked on KiwiEngine, the more I’ve realized that many of the problems we solve are universal.&lt;/p&gt;

&lt;p&gt;Authentication.&lt;/p&gt;

&lt;p&gt;Authorization.&lt;/p&gt;

&lt;p&gt;Routing.&lt;/p&gt;

&lt;p&gt;Caching.&lt;/p&gt;

&lt;p&gt;State management.&lt;/p&gt;

&lt;p&gt;Content management.&lt;/p&gt;

&lt;p&gt;Documentation.&lt;/p&gt;

&lt;p&gt;These challenges exist regardless of the application.&lt;/p&gt;

&lt;p&gt;A music platform still needs users.&lt;/p&gt;

&lt;p&gt;An online store still needs payments.&lt;/p&gt;

&lt;p&gt;An artist website still needs content.&lt;/p&gt;

&lt;p&gt;A game launcher still needs updates.&lt;/p&gt;

&lt;p&gt;The engineering principles don’t suddenly change because the audience does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domains Give Architecture Purpose
&lt;/h2&gt;

&lt;p&gt;If architecture doesn’t care about the domain, people certainly do.&lt;/p&gt;

&lt;p&gt;For a long time, I assumed that because KiwiEngine could support business applications, I should be the one building them.&lt;/p&gt;

&lt;p&gt;CRMs.&lt;/p&gt;

&lt;p&gt;Inventory systems.&lt;/p&gt;

&lt;p&gt;Scheduling platforms.&lt;/p&gt;

&lt;p&gt;SaaS products.&lt;/p&gt;

&lt;p&gt;The architecture was capable.&lt;/p&gt;

&lt;p&gt;But I slowly realized something important.&lt;/p&gt;

&lt;p&gt;Capability and calling aren’t the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Curiosity Is A Better Compass
&lt;/h2&gt;

&lt;p&gt;Looking back over the projects that energized me, a clear pattern emerged.&lt;/p&gt;

&lt;p&gt;I kept returning to creative technology.&lt;/p&gt;

&lt;p&gt;Music production.&lt;/p&gt;

&lt;p&gt;Artist websites.&lt;/p&gt;

&lt;p&gt;Plugins.&lt;/p&gt;

&lt;p&gt;Media platforms.&lt;/p&gt;

&lt;p&gt;Game development.&lt;/p&gt;

&lt;p&gt;Digital publishing.&lt;/p&gt;

&lt;p&gt;Those weren’t distractions from KiwiEngine.&lt;/p&gt;

&lt;p&gt;They were the best proving ground for it.&lt;/p&gt;

&lt;p&gt;Every time I worked on those projects, I naturally discovered improvements to the framework because I genuinely depended on it.&lt;/p&gt;

&lt;p&gt;The software wasn’t theoretical anymore.&lt;/p&gt;

&lt;p&gt;It became part of my own workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source Changes The Equation
&lt;/h2&gt;

&lt;p&gt;One of the greatest strengths of open source is that it removes the pressure to build everything yourself.&lt;/p&gt;

&lt;p&gt;KiwiEngine doesn’t need me to build every CRM.&lt;/p&gt;

&lt;p&gt;Or every scheduling platform.&lt;/p&gt;

&lt;p&gt;Or every business application.&lt;/p&gt;

&lt;p&gt;If someone wants to build those things, I hope KiwiEngine becomes a solid foundation for their work.&lt;/p&gt;

&lt;p&gt;My role is to build the engine.&lt;/p&gt;

&lt;p&gt;Document the philosophy.&lt;/p&gt;

&lt;p&gt;Share the blueprints.&lt;/p&gt;

&lt;p&gt;Teach what I’ve learned.&lt;/p&gt;

&lt;p&gt;The community can take those ideas in directions I would have never imagined.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Best Software Comes From Understanding
&lt;/h2&gt;

&lt;p&gt;I’ve come to believe that software improves when its creator genuinely understands the people using it.&lt;/p&gt;

&lt;p&gt;I understand creators because I am one.&lt;/p&gt;

&lt;p&gt;I write songs.&lt;/p&gt;

&lt;p&gt;I produce music.&lt;/p&gt;

&lt;p&gt;I mix and master.&lt;/p&gt;

&lt;p&gt;I build games.&lt;/p&gt;

&lt;p&gt;I design graphics.&lt;/p&gt;

&lt;p&gt;I enjoy creating things.&lt;/p&gt;

&lt;p&gt;Building software for those communities isn’t narrowing KiwiEngine’s vision.&lt;/p&gt;

&lt;p&gt;It’s giving it a better proving ground.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;KiwiEngine hasn’t changed.&lt;/p&gt;

&lt;p&gt;Its architecture hasn’t changed.&lt;/p&gt;

&lt;p&gt;Its philosophy hasn’t changed.&lt;/p&gt;

&lt;p&gt;What has changed is my understanding of where I create the most value.&lt;/p&gt;

&lt;p&gt;Architecture doesn’t care whether you’re building software for musicians, accountants, educators, or game developers.&lt;/p&gt;

&lt;p&gt;People do.&lt;/p&gt;

&lt;p&gt;And the better you understand the people you’re building for, the better your software becomes.&lt;/p&gt;

&lt;p&gt;That’s why I’m no longer chasing every market.&lt;/p&gt;

&lt;p&gt;I’m choosing the one I understand best—and letting the architecture do what it was designed to do.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>programming</category>
    </item>
    <item>
      <title>Finding The Customer You Understand</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Mon, 29 Jun 2026 17:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/finding-the-customer-you-understand-3h50</link>
      <guid>https://dev.to/stinklewinks/finding-the-customer-you-understand-3h50</guid>
      <description>&lt;p&gt;One piece of startup advice you'll hear often is:&lt;/p&gt;

&lt;p&gt;"Find a problem worth solving."&lt;/p&gt;

&lt;p&gt;I agree.&lt;/p&gt;

&lt;p&gt;But I think there's another question that's just as important.&lt;/p&gt;

&lt;p&gt;Find a customer you genuinely understand.&lt;/p&gt;

&lt;p&gt;For a while, I tried thinking about software markets in general.&lt;/p&gt;

&lt;p&gt;Small businesses.&lt;/p&gt;

&lt;p&gt;SaaS.&lt;/p&gt;

&lt;p&gt;Enterprise.&lt;/p&gt;

&lt;p&gt;Productivity.&lt;/p&gt;

&lt;p&gt;Eventually I realized something.&lt;/p&gt;

&lt;p&gt;I wasn't excited because of the market.&lt;/p&gt;

&lt;p&gt;I was excited by the work itself.&lt;/p&gt;

&lt;p&gt;Music.&lt;/p&gt;

&lt;p&gt;Creative software.&lt;/p&gt;

&lt;p&gt;Audio engineering.&lt;/p&gt;

&lt;p&gt;Game development.&lt;/p&gt;

&lt;p&gt;Design.&lt;/p&gt;

&lt;p&gt;Those aren't hobbies sitting beside software.&lt;/p&gt;

&lt;p&gt;They're the reason I build software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Experience Is An Advantage
&lt;/h2&gt;

&lt;p&gt;Every builder has accumulated years of experience in something.&lt;/p&gt;

&lt;p&gt;Mine happens to include music production, songwriting, game development, design, and software architecture.&lt;/p&gt;

&lt;p&gt;Ignoring that experience would be like ignoring a built-in competitive advantage.&lt;/p&gt;

&lt;p&gt;Instead of trying to become an expert in industries I don't live in, I've decided to build for the communities I already understand.&lt;/p&gt;

&lt;p&gt;Not because they're bigger.&lt;/p&gt;

&lt;p&gt;Because I can genuinely contribute something valuable there.&lt;/p&gt;

</description>
      <category>career</category>
      <category>architecture</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>You Don't Have To Build Everything Yourself</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Sun, 28 Jun 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/you-dont-have-to-build-everything-yourself-2fk6</link>
      <guid>https://dev.to/stinklewinks/you-dont-have-to-build-everything-yourself-2fk6</guid>
      <description>&lt;p&gt;One misconception I had early on was believing that creating a framework meant creating every application that framework could support.&lt;/p&gt;

&lt;p&gt;That's impossible.&lt;/p&gt;

&lt;p&gt;If KiwiEngine can build hundreds of different kinds of applications, why should one person try to build all of them?&lt;/p&gt;

&lt;p&gt;The answer is simple.&lt;/p&gt;

&lt;p&gt;They shouldn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source Is Multiplication
&lt;/h2&gt;

&lt;p&gt;Open source isn't about creating every solution.&lt;/p&gt;

&lt;p&gt;It's about creating more builders.&lt;/p&gt;

&lt;p&gt;The framework provides the foundation.&lt;/p&gt;

&lt;p&gt;The community provides the imagination.&lt;/p&gt;

&lt;p&gt;Some people will build business software.&lt;/p&gt;

&lt;p&gt;Others will build education platforms.&lt;/p&gt;

&lt;p&gt;Others will build games.&lt;/p&gt;

&lt;p&gt;Others will build entirely new ideas I haven't even considered.&lt;/p&gt;

&lt;p&gt;That's far more exciting than trying to own every application myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build The Blueprint
&lt;/h2&gt;

&lt;p&gt;I've become increasingly interested in building blueprints rather than finished buildings.&lt;/p&gt;

&lt;p&gt;A blueprint enables many buildings.&lt;/p&gt;

&lt;p&gt;One application solves one problem.&lt;/p&gt;

&lt;p&gt;A blueprint helps solve hundreds.&lt;/p&gt;

&lt;p&gt;That's where I think the long-term value lives.&lt;/p&gt;

&lt;p&gt;Not in trying to build everything.&lt;/p&gt;

&lt;p&gt;But in making it easier for others to build anything.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>programming</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Burnout Was Trying To Tell Me Something</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Sat, 27 Jun 2026 12:53:07 +0000</pubDate>
      <link>https://dev.to/stinklewinks/burnout-was-trying-to-tell-me-something-4hc1</link>
      <guid>https://dev.to/stinklewinks/burnout-was-trying-to-tell-me-something-4hc1</guid>
      <description>&lt;p&gt;For a long time, I assumed burnout meant I wasn't working hard enough.&lt;/p&gt;

&lt;p&gt;Or that I needed better discipline.&lt;/p&gt;

&lt;p&gt;Or better time management.&lt;/p&gt;

&lt;p&gt;Looking back, I think something else was happening.&lt;/p&gt;

&lt;p&gt;Burnout was feedback.&lt;/p&gt;

&lt;p&gt;Every time I forced myself toward projects that didn't naturally fit my interests, progress slowed.&lt;/p&gt;

&lt;p&gt;Everything became heavier.&lt;/p&gt;

&lt;p&gt;Then I'd spend an evening designing a music application, thinking about plugin architecture, composing music, or sketching ideas for Blackwater Sound.&lt;/p&gt;

&lt;p&gt;Hours disappeared.&lt;/p&gt;

&lt;p&gt;The energy came back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passion Is Data
&lt;/h2&gt;

&lt;p&gt;I don't think passion should replace discipline.&lt;/p&gt;

&lt;p&gt;But I do think it's worth paying attention to.&lt;/p&gt;

&lt;p&gt;If you consistently find yourself energized by one type of work and drained by another, that's information.&lt;/p&gt;

&lt;p&gt;Not an excuse.&lt;/p&gt;

&lt;p&gt;Information.&lt;/p&gt;

&lt;p&gt;It tells you where your curiosity naturally lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alignment Creates Momentum
&lt;/h2&gt;

&lt;p&gt;Today I still believe KiwiEngine can power almost any kind of application.&lt;/p&gt;

&lt;p&gt;What has changed is how I'm choosing to use it.&lt;/p&gt;

&lt;p&gt;Instead of chasing every possible market, I'm building creative tools that I personally want to use every day.&lt;/p&gt;

&lt;p&gt;Ironically, I think that will make KiwiEngine stronger.&lt;/p&gt;

&lt;p&gt;Because software improves the most when its creator genuinely depends on it.&lt;/p&gt;

&lt;p&gt;Sometimes burnout isn't telling you to stop building.&lt;/p&gt;

&lt;p&gt;Sometimes it's telling you to build the right thing.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why I Stopped Chasing Every Market</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Sat, 27 Jun 2026 12:46:48 +0000</pubDate>
      <link>https://dev.to/stinklewinks/why-i-stopped-chasing-every-market-3586</link>
      <guid>https://dev.to/stinklewinks/why-i-stopped-chasing-every-market-3586</guid>
      <description>&lt;p&gt;One of the biggest realizations I've had over the last year wasn't about software.&lt;/p&gt;

&lt;p&gt;It was about focus.&lt;/p&gt;

&lt;p&gt;When I first started building KiwiEngine, I wanted it to power everything.&lt;/p&gt;

&lt;p&gt;Business software.&lt;/p&gt;

&lt;p&gt;CRMs.&lt;/p&gt;

&lt;p&gt;Inventory systems.&lt;/p&gt;

&lt;p&gt;Scheduling platforms.&lt;/p&gt;

&lt;p&gt;Accounting tools.&lt;/p&gt;

&lt;p&gt;SaaS products.&lt;/p&gt;

&lt;p&gt;If someone could build it, I wanted KiwiEngine to support it.&lt;/p&gt;

&lt;p&gt;Technically, I still do.&lt;/p&gt;

&lt;p&gt;But something changed.&lt;/p&gt;

&lt;p&gt;I realized there is a difference between building software that can solve every problem and trying to solve every problem yourself.&lt;/p&gt;

&lt;p&gt;Those aren't the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture Never Changed
&lt;/h2&gt;

&lt;p&gt;KiwiEngine is still designed to power business applications.&lt;/p&gt;

&lt;p&gt;Nothing about the architecture changed.&lt;/p&gt;

&lt;p&gt;The modules.&lt;/p&gt;

&lt;p&gt;The APIs.&lt;/p&gt;

&lt;p&gt;The philosophy.&lt;/p&gt;

&lt;p&gt;The engine remains general-purpose.&lt;/p&gt;

&lt;p&gt;What changed was my focus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build What You Understand
&lt;/h2&gt;

&lt;p&gt;I started asking myself a simple question.&lt;/p&gt;

&lt;p&gt;Who do I actually understand?&lt;/p&gt;

&lt;p&gt;Not as a developer.&lt;/p&gt;

&lt;p&gt;As a creator.&lt;/p&gt;

&lt;p&gt;The answer wasn't accountants.&lt;/p&gt;

&lt;p&gt;It wasn't HR departments.&lt;/p&gt;

&lt;p&gt;It wasn't inventory managers.&lt;/p&gt;

&lt;p&gt;The answer was musicians.&lt;/p&gt;

&lt;p&gt;Artists.&lt;/p&gt;

&lt;p&gt;Game developers.&lt;/p&gt;

&lt;p&gt;Creators.&lt;/p&gt;

&lt;p&gt;Builders.&lt;/p&gt;

&lt;p&gt;Those are the people whose problems I experience every day.&lt;/p&gt;

&lt;p&gt;Those are the workflows I naturally understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source Changes The Equation
&lt;/h2&gt;

&lt;p&gt;One of the beautiful things about open source is that I don't have to build every application.&lt;/p&gt;

&lt;p&gt;I can build the engine.&lt;/p&gt;

&lt;p&gt;I can document it.&lt;/p&gt;

&lt;p&gt;I can share the philosophy.&lt;/p&gt;

&lt;p&gt;Someone else can build the CRM.&lt;/p&gt;

&lt;p&gt;Someone else can build the scheduling platform.&lt;/p&gt;

&lt;p&gt;Someone else can build the accounting software.&lt;/p&gt;

&lt;p&gt;Meanwhile, I can focus on building the creative tools I genuinely want to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Best Proving Ground
&lt;/h2&gt;

&lt;p&gt;Today, KiwiEngine's proving ground is becoming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Artist websites&lt;/li&gt;
&lt;li&gt;EPKs&lt;/li&gt;
&lt;li&gt;Music production tools&lt;/li&gt;
&lt;li&gt;Digital storefronts&lt;/li&gt;
&lt;li&gt;Creative workflows&lt;/li&gt;
&lt;li&gt;Game development&lt;/li&gt;
&lt;li&gt;Media platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not because they're the only things KiwiEngine can build.&lt;/p&gt;

&lt;p&gt;Because they're the things I care deeply enough to refine every day.&lt;/p&gt;

&lt;p&gt;And I think that creates better software than chasing every possible market ever could.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>webdev</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>The API Design Lesson I Learned From Building Nectarine</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Fri, 26 Jun 2026 18:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/the-api-design-lesson-i-learned-from-building-nectarine-4gf5</link>
      <guid>https://dev.to/stinklewinks/the-api-design-lesson-i-learned-from-building-nectarine-4gf5</guid>
      <description>&lt;p&gt;One of the most surprising lessons I've learned while building software is that APIs are not really about code.&lt;/p&gt;

&lt;p&gt;They're about communication.&lt;/p&gt;

&lt;p&gt;At first, that sounds strange.&lt;/p&gt;

&lt;p&gt;After all, APIs exist so software can talk to software.&lt;/p&gt;

&lt;p&gt;But every API is also a conversation between developers.&lt;/p&gt;

&lt;p&gt;And like any conversation, clarity matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Version Is Usually Technical
&lt;/h2&gt;

&lt;p&gt;Most APIs begin from an implementation perspective.&lt;/p&gt;

&lt;p&gt;The database exists.&lt;/p&gt;

&lt;p&gt;The endpoints exist.&lt;/p&gt;

&lt;p&gt;The underlying logic exists.&lt;/p&gt;

&lt;p&gt;The API becomes a reflection of those details.&lt;/p&gt;

&lt;p&gt;It exposes how the system works internally.&lt;/p&gt;

&lt;p&gt;The problem is that users often don't care about internal implementation.&lt;/p&gt;

&lt;p&gt;They care about solving problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intent Is Easier To Understand
&lt;/h2&gt;

&lt;p&gt;One idea I've become increasingly interested in is designing around intent.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;"How should users interact with the implementation?"&lt;/p&gt;

&lt;p&gt;I try to ask:&lt;/p&gt;

&lt;p&gt;"What are users trying to accomplish?"&lt;/p&gt;

&lt;p&gt;The difference seems small.&lt;/p&gt;

&lt;p&gt;The results are often significant.&lt;/p&gt;

&lt;p&gt;Intent tends to produce simpler APIs.&lt;/p&gt;

&lt;p&gt;Clearer workflows.&lt;/p&gt;

&lt;p&gt;Better naming.&lt;/p&gt;

&lt;p&gt;Better abstractions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Database Is Not The Product
&lt;/h2&gt;

&lt;p&gt;One mistake many systems make is exposing internal structures directly.&lt;/p&gt;

&lt;p&gt;Tables become endpoints.&lt;/p&gt;

&lt;p&gt;Schemas become workflows.&lt;/p&gt;

&lt;p&gt;Implementation becomes the interface.&lt;/p&gt;

&lt;p&gt;This is understandable.&lt;/p&gt;

&lt;p&gt;It's also limiting.&lt;/p&gt;

&lt;p&gt;The API should represent the problem domain.&lt;/p&gt;

&lt;p&gt;Not necessarily the storage mechanism.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good APIs Read Like Conversations
&lt;/h2&gt;

&lt;p&gt;The best APIs I've encountered often feel obvious.&lt;/p&gt;

&lt;p&gt;Not because they're simplistic.&lt;/p&gt;

&lt;p&gt;Because they're expressive.&lt;/p&gt;

&lt;p&gt;You can often read the code and understand the intention behind it.&lt;/p&gt;

&lt;p&gt;The API communicates purpose.&lt;/p&gt;

&lt;p&gt;Not just mechanics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Usage Changes Everything
&lt;/h2&gt;

&lt;p&gt;Just like documentation, abstractions, and frameworks, APIs reveal themselves through usage.&lt;/p&gt;

&lt;p&gt;The first version is rarely the final version.&lt;/p&gt;

&lt;p&gt;Real projects expose awkward naming.&lt;/p&gt;

&lt;p&gt;Unexpected workflows.&lt;/p&gt;

&lt;p&gt;Missing concepts.&lt;/p&gt;

&lt;p&gt;Confusing assumptions.&lt;/p&gt;

&lt;p&gt;The API evolves as understanding evolves.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden Goal
&lt;/h2&gt;

&lt;p&gt;I used to think API design was primarily about flexibility.&lt;/p&gt;

&lt;p&gt;Now I think it's more about reducing misunderstanding.&lt;/p&gt;

&lt;p&gt;Every confusing name creates hesitation.&lt;/p&gt;

&lt;p&gt;Every unclear workflow creates friction.&lt;/p&gt;

&lt;p&gt;Every implementation detail exposed unnecessarily creates cognitive load.&lt;/p&gt;

&lt;p&gt;The best APIs reduce those costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The longer I build software, the less I think about APIs as technical interfaces.&lt;/p&gt;

&lt;p&gt;I think about them as communication tools.&lt;/p&gt;

&lt;p&gt;A good API helps developers understand a system.&lt;/p&gt;

&lt;p&gt;A great API helps developers forget the system exists and focus on solving the problem instead.&lt;/p&gt;

&lt;p&gt;That's the lesson I'm continuing to learn while building software.&lt;/p&gt;

&lt;p&gt;And it's one that seems to apply far beyond APIs themselves.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>backend</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why I Stopped Adding Features and Started Removing Friction</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Thu, 25 Jun 2026 16:55:37 +0000</pubDate>
      <link>https://dev.to/stinklewinks/why-i-stopped-adding-features-and-started-removing-friction-47n6</link>
      <guid>https://dev.to/stinklewinks/why-i-stopped-adding-features-and-started-removing-friction-47n6</guid>
      <description>&lt;p&gt;Early in a project, adding features feels like progress.&lt;/p&gt;

&lt;p&gt;A new capability appears.&lt;/p&gt;

&lt;p&gt;A new screen gets built.&lt;/p&gt;

&lt;p&gt;A new workflow becomes possible.&lt;/p&gt;

&lt;p&gt;Everything feels like forward motion.&lt;/p&gt;

&lt;p&gt;For a long time, I assumed that was the primary job of software development.&lt;/p&gt;

&lt;p&gt;Build more features.&lt;/p&gt;

&lt;p&gt;Solve more problems.&lt;/p&gt;

&lt;p&gt;Expand the system.&lt;/p&gt;

&lt;p&gt;Over time, I've started to think differently.&lt;/p&gt;

&lt;p&gt;Some of the most valuable improvements I've ever made weren't new features.&lt;/p&gt;

&lt;p&gt;They were reductions in friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features Create Possibilities
&lt;/h2&gt;

&lt;p&gt;Features matter.&lt;/p&gt;

&lt;p&gt;Users need capabilities.&lt;/p&gt;

&lt;p&gt;Products need functionality.&lt;/p&gt;

&lt;p&gt;Without features, software doesn't solve problems.&lt;/p&gt;

&lt;p&gt;The challenge is that every feature introduces complexity.&lt;/p&gt;

&lt;p&gt;Every button.&lt;/p&gt;

&lt;p&gt;Every setting.&lt;/p&gt;

&lt;p&gt;Every workflow.&lt;/p&gt;

&lt;p&gt;Every API.&lt;/p&gt;

&lt;p&gt;Every configuration option.&lt;/p&gt;

&lt;p&gt;The system grows.&lt;/p&gt;

&lt;p&gt;Sometimes that's necessary.&lt;/p&gt;

&lt;p&gt;Sometimes it's expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Friction Is Easier To Ignore
&lt;/h2&gt;

&lt;p&gt;One reason friction survives so long is because it often looks small.&lt;/p&gt;

&lt;p&gt;An extra click.&lt;/p&gt;

&lt;p&gt;An extra configuration step.&lt;/p&gt;

&lt;p&gt;A confusing name.&lt;/p&gt;

&lt;p&gt;A repetitive workflow.&lt;/p&gt;

&lt;p&gt;None of these things seem important individually.&lt;/p&gt;

&lt;p&gt;But software isn't experienced one interaction at a time.&lt;/p&gt;

&lt;p&gt;It's experienced as a whole.&lt;/p&gt;

&lt;p&gt;Small friction accumulates.&lt;/p&gt;

&lt;h2&gt;
  
  
  The User Feels Everything
&lt;/h2&gt;

&lt;p&gt;As builders, we often focus on what software can do.&lt;/p&gt;

&lt;p&gt;Users focus on how software feels.&lt;/p&gt;

&lt;p&gt;The difference matters.&lt;/p&gt;

&lt;p&gt;A powerful feature that creates frustration may deliver less value than a simple workflow that feels effortless.&lt;/p&gt;

&lt;p&gt;The experience is part of the product.&lt;/p&gt;

&lt;p&gt;Not just the functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Projects Expose Friction
&lt;/h2&gt;

&lt;p&gt;One reason I believe strongly in building real projects is because friction becomes impossible to ignore.&lt;/p&gt;

&lt;p&gt;Features tend to dominate planning meetings.&lt;/p&gt;

&lt;p&gt;Friction dominates daily usage.&lt;/p&gt;

&lt;p&gt;You feel it.&lt;/p&gt;

&lt;p&gt;Repeatedly.&lt;/p&gt;

&lt;p&gt;The same awkward workflow.&lt;/p&gt;

&lt;p&gt;The same repetitive task.&lt;/p&gt;

&lt;p&gt;The same confusing decision.&lt;/p&gt;

&lt;p&gt;Eventually the problem becomes obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Removing Friction Creates Leverage
&lt;/h2&gt;

&lt;p&gt;A feature helps users do something new.&lt;/p&gt;

&lt;p&gt;Removing friction helps users do everything faster.&lt;/p&gt;

&lt;p&gt;That's a different kind of value.&lt;/p&gt;

&lt;p&gt;The improvement compounds.&lt;/p&gt;

&lt;p&gt;Every interaction benefits.&lt;/p&gt;

&lt;p&gt;Every workflow benefits.&lt;/p&gt;

&lt;p&gt;Every future feature benefits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden Metric
&lt;/h2&gt;

&lt;p&gt;I've started paying attention to a question that rarely appears on roadmaps:&lt;/p&gt;

&lt;p&gt;"How much effort does this require to understand?"&lt;/p&gt;

&lt;p&gt;Not implement.&lt;/p&gt;

&lt;p&gt;Not maintain.&lt;/p&gt;

&lt;p&gt;Understand.&lt;/p&gt;

&lt;p&gt;Understanding is one of the most expensive costs in software.&lt;/p&gt;

&lt;p&gt;Reducing friction often means reducing the effort required to understand the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Features are important.&lt;/p&gt;

&lt;p&gt;But they're not the only way software improves.&lt;/p&gt;

&lt;p&gt;Sometimes the best feature is the removal of a problem users encounter every day.&lt;/p&gt;

&lt;p&gt;The longer I build software, the more I find myself asking:&lt;/p&gt;

&lt;p&gt;Not "What should we add next?"&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;p&gt;"What can we make easier?"&lt;/p&gt;

&lt;p&gt;Because removing friction often creates more value than adding another feature ever could.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>softwareengineering</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why Constraints Create Better Software</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Tue, 23 Jun 2026 16:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/why-constraints-create-better-software-12lc</link>
      <guid>https://dev.to/stinklewinks/why-constraints-create-better-software-12lc</guid>
      <description>&lt;p&gt;When developers talk about software design, flexibility is usually treated as an unquestionable good.&lt;/p&gt;

&lt;p&gt;More options.&lt;/p&gt;

&lt;p&gt;More customization.&lt;/p&gt;

&lt;p&gt;More configuration.&lt;/p&gt;

&lt;p&gt;More control.&lt;/p&gt;

&lt;p&gt;The assumption is simple:&lt;/p&gt;

&lt;p&gt;More freedom equals better software.&lt;/p&gt;

&lt;p&gt;I'm no longer convinced that's true.&lt;/p&gt;

&lt;p&gt;In many cases, the opposite seems to happen.&lt;/p&gt;

&lt;p&gt;The most successful systems often become successful because of their constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every System Has Rules
&lt;/h2&gt;

&lt;p&gt;Whether we acknowledge them or not, every system operates within constraints.&lt;/p&gt;

&lt;p&gt;Programming languages have syntax.&lt;/p&gt;

&lt;p&gt;Frameworks have conventions.&lt;/p&gt;

&lt;p&gt;Databases have schemas.&lt;/p&gt;

&lt;p&gt;Operating systems have permissions.&lt;/p&gt;

&lt;p&gt;The question isn't whether constraints exist.&lt;/p&gt;

&lt;p&gt;The question is whether they're intentional.&lt;/p&gt;

&lt;p&gt;Good constraints guide behavior.&lt;/p&gt;

&lt;p&gt;Bad constraints create frustration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraints Reduce Decisions
&lt;/h2&gt;

&lt;p&gt;Every decision requires effort.&lt;/p&gt;

&lt;p&gt;Every configuration option requires understanding.&lt;/p&gt;

&lt;p&gt;Every customization path requires maintenance.&lt;/p&gt;

&lt;p&gt;One reason good software feels simple is because it removes unnecessary decisions.&lt;/p&gt;

&lt;p&gt;The system makes sensible choices so users can focus on solving problems.&lt;/p&gt;

&lt;p&gt;Not configuring tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consistency Creates Trust
&lt;/h2&gt;

&lt;p&gt;One of the hidden benefits of constraints is consistency.&lt;/p&gt;

&lt;p&gt;When developers encounter the same patterns repeatedly, they begin building intuition.&lt;/p&gt;

&lt;p&gt;The system becomes predictable.&lt;/p&gt;

&lt;p&gt;Predictability creates confidence.&lt;/p&gt;

&lt;p&gt;Confidence creates speed.&lt;/p&gt;

&lt;p&gt;The result is often greater productivity than a completely unrestricted system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Languages Depend On Constraints
&lt;/h2&gt;

&lt;p&gt;Languages work because of grammar.&lt;/p&gt;

&lt;p&gt;Without shared rules, communication becomes difficult.&lt;/p&gt;

&lt;p&gt;Frameworks are similar.&lt;/p&gt;

&lt;p&gt;The more a framework grows, the more important consistency becomes.&lt;/p&gt;

&lt;p&gt;Conventions become vocabulary.&lt;/p&gt;

&lt;p&gt;Patterns become expectations.&lt;/p&gt;

&lt;p&gt;The system develops a language.&lt;/p&gt;

&lt;p&gt;And languages require rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Projects Reveal Useful Constraints
&lt;/h2&gt;

&lt;p&gt;The best constraints rarely emerge from theory.&lt;/p&gt;

&lt;p&gt;They emerge from usage.&lt;/p&gt;

&lt;p&gt;A real project exposes confusion.&lt;/p&gt;

&lt;p&gt;A real project exposes repetition.&lt;/p&gt;

&lt;p&gt;A real project exposes complexity.&lt;/p&gt;

&lt;p&gt;Over time, useful constraints begin to emerge naturally.&lt;/p&gt;

&lt;p&gt;Not because someone imposed them.&lt;/p&gt;

&lt;p&gt;Because reality demanded them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Goal Is Progress
&lt;/h2&gt;

&lt;p&gt;I've started thinking about software design differently.&lt;/p&gt;

&lt;p&gt;The goal isn't maximum flexibility.&lt;/p&gt;

&lt;p&gt;The goal is maximum progress.&lt;/p&gt;

&lt;p&gt;Sometimes progress requires freedom.&lt;/p&gt;

&lt;p&gt;Sometimes progress requires constraints.&lt;/p&gt;

&lt;p&gt;The challenge is knowing the difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Good constraints aren't limitations.&lt;/p&gt;

&lt;p&gt;They're guidance.&lt;/p&gt;

&lt;p&gt;They help developers focus on what matters.&lt;/p&gt;

&lt;p&gt;They reduce cognitive load.&lt;/p&gt;

&lt;p&gt;They create consistency.&lt;/p&gt;

&lt;p&gt;They improve communication.&lt;/p&gt;

&lt;p&gt;And over time, they help transform a collection of features into a coherent system.&lt;/p&gt;

&lt;p&gt;The longer I build software, the more I find myself asking:&lt;/p&gt;

&lt;p&gt;Not "What should this allow?"&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;p&gt;"What should this encourage?"&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>softwareengineering</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building a Design System Without Recreating CSS</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Mon, 22 Jun 2026 23:17:44 +0000</pubDate>
      <link>https://dev.to/stinklewinks/building-a-design-system-without-recreating-css-1a41</link>
      <guid>https://dev.to/stinklewinks/building-a-design-system-without-recreating-css-1a41</guid>
      <description>&lt;p&gt;One of the easiest traps to fall into when building a design system is accidentally recreating CSS.&lt;/p&gt;

&lt;p&gt;At first, it seems harmless.&lt;/p&gt;

&lt;p&gt;You add a few utility classes.&lt;/p&gt;

&lt;p&gt;Then a few responsive options.&lt;/p&gt;

&lt;p&gt;Then a few layout helpers.&lt;/p&gt;

&lt;p&gt;Then a few exceptions.&lt;/p&gt;

&lt;p&gt;Before long, you've built an entirely new syntax for doing the exact same thing CSS already does.&lt;/p&gt;

&lt;p&gt;I've become increasingly interested in a different approach.&lt;/p&gt;

&lt;p&gt;Not replacing CSS.&lt;/p&gt;

&lt;p&gt;Not hiding CSS.&lt;/p&gt;

&lt;p&gt;Creating a layer above CSS that focuses on intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With More Options
&lt;/h2&gt;

&lt;p&gt;Developers love flexibility.&lt;/p&gt;

&lt;p&gt;I do too.&lt;/p&gt;

&lt;p&gt;The challenge is that flexibility often comes with complexity.&lt;/p&gt;

&lt;p&gt;Consider responsive layouts.&lt;/p&gt;

&lt;p&gt;Many systems solve this by exposing every possible breakpoint and layout combination.&lt;/p&gt;

&lt;p&gt;The result is powerful.&lt;/p&gt;

&lt;p&gt;But it's also easy to end up with markup that spends more time describing implementation details than communicating purpose.&lt;/p&gt;

&lt;p&gt;The system becomes harder to understand.&lt;/p&gt;

&lt;p&gt;Not because it's incapable.&lt;/p&gt;

&lt;p&gt;Because it's trying to describe everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intent Versus Implementation
&lt;/h2&gt;

&lt;p&gt;Lately I've been thinking less about how a layout is built and more about what the layout is trying to accomplish.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt; &lt;span class="na"&gt;adapt=&lt;/span&gt;&lt;span class="s"&gt;"grid"&lt;/span&gt; &lt;span class="na"&gt;mobile=&lt;/span&gt;&lt;span class="s"&gt;"stack"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't trying to replace CSS.&lt;/p&gt;

&lt;p&gt;It's trying to express intent.&lt;/p&gt;

&lt;p&gt;The content should adapt as a grid.&lt;/p&gt;

&lt;p&gt;On mobile, it should stack.&lt;/p&gt;

&lt;p&gt;The implementation details can remain inside the design system.&lt;/p&gt;

&lt;p&gt;The goal isn't more abstraction.&lt;/p&gt;

&lt;p&gt;The goal is better communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strong Defaults Create Simplicity
&lt;/h2&gt;

&lt;p&gt;One lesson I've learned from building software is that good defaults are often more valuable than endless configuration.&lt;/p&gt;

&lt;p&gt;Most layouts follow common patterns.&lt;/p&gt;

&lt;p&gt;Most responsive behavior follows common patterns.&lt;/p&gt;

&lt;p&gt;Most developers aren't trying to create entirely new layout systems.&lt;/p&gt;

&lt;p&gt;They're trying to organize content.&lt;/p&gt;

&lt;p&gt;A design system can help by providing thoughtful defaults rather than exposing every possible option.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Danger Of Recreating CSS
&lt;/h2&gt;

&lt;p&gt;The moment a design system attempts to expose every CSS capability, it starts competing with CSS itself.&lt;/p&gt;

&lt;p&gt;That's usually a losing battle.&lt;/p&gt;

&lt;p&gt;CSS already exists.&lt;/p&gt;

&lt;p&gt;CSS is already powerful.&lt;/p&gt;

&lt;p&gt;CSS is already standardized.&lt;/p&gt;

&lt;p&gt;The job of a design system isn't to replace CSS.&lt;/p&gt;

&lt;p&gt;The job of a design system is to reduce cognitive load.&lt;/p&gt;

&lt;p&gt;To create consistency.&lt;/p&gt;

&lt;p&gt;To communicate intent.&lt;/p&gt;

&lt;p&gt;To make common patterns easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing For Readability
&lt;/h2&gt;

&lt;p&gt;One question I increasingly ask when designing APIs is:&lt;/p&gt;

&lt;p&gt;"Can I understand this six months from now?"&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;p&gt;"Can I configure everything?"&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;p&gt;"Can I support every edge case?"&lt;/p&gt;

&lt;p&gt;Simply:&lt;/p&gt;

&lt;p&gt;"Can I read this and understand what it is trying to do?"&lt;/p&gt;

&lt;p&gt;Readability scales.&lt;/p&gt;

&lt;p&gt;Complexity doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Goal Isn't Less Power
&lt;/h2&gt;

&lt;p&gt;Sometimes simplicity gets mistaken for limitation.&lt;/p&gt;

&lt;p&gt;I don't think that's true.&lt;/p&gt;

&lt;p&gt;The goal isn't to remove power.&lt;/p&gt;

&lt;p&gt;The goal is to place power where it belongs.&lt;/p&gt;

&lt;p&gt;Common workflows should be simple.&lt;/p&gt;

&lt;p&gt;Advanced workflows should remain possible.&lt;/p&gt;

&lt;p&gt;The design system should help developers move quickly without preventing them from solving unique problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I've become increasingly convinced that the best design systems don't try to replace CSS.&lt;/p&gt;

&lt;p&gt;They try to create a shared language around common design decisions.&lt;/p&gt;

&lt;p&gt;A language focused on intent rather than implementation.&lt;/p&gt;

&lt;p&gt;A language that helps developers communicate purpose.&lt;/p&gt;

&lt;p&gt;Because at the end of the day, most developers aren't trying to build layouts.&lt;/p&gt;

&lt;p&gt;They're trying to build products.&lt;/p&gt;

&lt;p&gt;The layout is simply one part of the system.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
