<?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>Every Framework Eventually Becomes a Language</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Sun, 21 Jun 2026 17:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/every-framework-eventually-becomes-a-language-1b4h</link>
      <guid>https://dev.to/stinklewinks/every-framework-eventually-becomes-a-language-1b4h</guid>
      <description>&lt;p&gt;When most developers think about frameworks, they think about features.&lt;/p&gt;

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

&lt;p&gt;Components.&lt;/p&gt;

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

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

&lt;p&gt;Data access.&lt;/p&gt;

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

&lt;p&gt;All important things.&lt;/p&gt;

&lt;p&gt;But I've started to believe that the longer a framework survives, the less important its features become.&lt;/p&gt;

&lt;p&gt;Instead, something else emerges.&lt;/p&gt;

&lt;p&gt;A language.&lt;/p&gt;

&lt;p&gt;Not a programming language.&lt;/p&gt;

&lt;p&gt;A language of ideas.&lt;/p&gt;

&lt;p&gt;A language of patterns.&lt;/p&gt;

&lt;p&gt;A language of intent.&lt;/p&gt;

&lt;p&gt;And once that language forms, it often becomes more valuable than the framework itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frameworks Start As Tools
&lt;/h2&gt;

&lt;p&gt;Most frameworks begin life as solutions to technical problems.&lt;/p&gt;

&lt;p&gt;How do we route requests?&lt;/p&gt;

&lt;p&gt;How do we manage state?&lt;/p&gt;

&lt;p&gt;How do we organize code?&lt;/p&gt;

&lt;p&gt;How do we build interfaces?&lt;/p&gt;

&lt;p&gt;The early focus is almost entirely mechanical.&lt;/p&gt;

&lt;p&gt;The framework exists to make something easier.&lt;/p&gt;

&lt;p&gt;The language hasn't formed yet.&lt;/p&gt;

&lt;p&gt;At this stage, the framework is mostly a collection of features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then Patterns Begin To Appear
&lt;/h2&gt;

&lt;p&gt;Something interesting happens once enough people start using a framework.&lt;/p&gt;

&lt;p&gt;Certain approaches become common.&lt;/p&gt;

&lt;p&gt;Certain solutions become preferred.&lt;/p&gt;

&lt;p&gt;Certain conventions emerge.&lt;/p&gt;

&lt;p&gt;Developers start recognizing patterns.&lt;/p&gt;

&lt;p&gt;The framework begins teaching its users how to think.&lt;/p&gt;

&lt;p&gt;Not just how to code.&lt;/p&gt;

&lt;p&gt;How to approach problems.&lt;/p&gt;

&lt;p&gt;This is where the framework starts becoming a language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good Frameworks Teach More Than APIs
&lt;/h2&gt;

&lt;p&gt;Think about the frameworks and tools that have survived for years.&lt;/p&gt;

&lt;p&gt;People don't just learn the APIs.&lt;/p&gt;

&lt;p&gt;They learn the philosophy.&lt;/p&gt;

&lt;p&gt;They learn the conventions.&lt;/p&gt;

&lt;p&gt;They learn the assumptions.&lt;/p&gt;

&lt;p&gt;Eventually they start speaking the language of the framework.&lt;/p&gt;

&lt;p&gt;You can often tell when someone has spent years working within a particular ecosystem.&lt;/p&gt;

&lt;p&gt;Not because of the code they write.&lt;/p&gt;

&lt;p&gt;Because of the way they think.&lt;/p&gt;

&lt;p&gt;The framework has shaped their mental model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Language Matters More Than The Syntax
&lt;/h2&gt;

&lt;p&gt;Most developers assume the syntax is the important part.&lt;/p&gt;

&lt;p&gt;I don't think it is.&lt;/p&gt;

&lt;p&gt;Syntax changes.&lt;/p&gt;

&lt;p&gt;Versions change.&lt;/p&gt;

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

&lt;p&gt;The underlying language tends to remain.&lt;/p&gt;

&lt;p&gt;The language is what allows developers to communicate ideas efficiently.&lt;/p&gt;

&lt;p&gt;Once a shared vocabulary exists, complexity starts shrinking.&lt;/p&gt;

&lt;p&gt;A single term can communicate an entire concept.&lt;/p&gt;

&lt;p&gt;A single convention can communicate an entire workflow.&lt;/p&gt;

&lt;p&gt;The language becomes a form of compression.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation Is Really Language Training
&lt;/h2&gt;

&lt;p&gt;This realization changed how I think about documentation.&lt;/p&gt;

&lt;p&gt;Documentation isn't just explaining APIs.&lt;/p&gt;

&lt;p&gt;It's teaching vocabulary.&lt;/p&gt;

&lt;p&gt;It's teaching concepts.&lt;/p&gt;

&lt;p&gt;It's teaching patterns.&lt;/p&gt;

&lt;p&gt;Good documentation helps users understand how the framework thinks.&lt;/p&gt;

&lt;p&gt;Bad documentation simply lists features.&lt;/p&gt;

&lt;p&gt;The difference is significant.&lt;/p&gt;

&lt;p&gt;One teaches understanding.&lt;/p&gt;

&lt;p&gt;The other teaches memorization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Projects Shape The Language
&lt;/h2&gt;

&lt;p&gt;One reason I believe every library needs a real project is because real projects shape the language.&lt;/p&gt;

&lt;p&gt;Features can be designed in isolation.&lt;/p&gt;

&lt;p&gt;Languages cannot.&lt;/p&gt;

&lt;p&gt;Languages emerge from use.&lt;/p&gt;

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

&lt;p&gt;They emerge from repeated interactions with real problems.&lt;/p&gt;

&lt;p&gt;The most useful concepts survive.&lt;/p&gt;

&lt;p&gt;The awkward concepts disappear.&lt;/p&gt;

&lt;p&gt;Over time the language becomes more refined.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  Every Successful System Develops Vocabulary
&lt;/h2&gt;

&lt;p&gt;This isn't unique to software.&lt;/p&gt;

&lt;p&gt;Businesses develop language.&lt;/p&gt;

&lt;p&gt;Trades develop language.&lt;/p&gt;

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

&lt;p&gt;Architecture develops language.&lt;/p&gt;

&lt;p&gt;Communities develop language.&lt;/p&gt;

&lt;p&gt;The larger and more complex a system becomes, the more important shared vocabulary becomes.&lt;/p&gt;

&lt;p&gt;Without a common language, collaboration becomes difficult.&lt;/p&gt;

&lt;p&gt;With one, entire ideas can be communicated in a few words.&lt;/p&gt;

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

&lt;p&gt;The longer I build software, the less interested I become in adding features for the sake of features.&lt;/p&gt;

&lt;p&gt;Instead, I find myself asking different questions.&lt;/p&gt;

&lt;p&gt;Does this fit the language?&lt;/p&gt;

&lt;p&gt;Does this reinforce the philosophy?&lt;/p&gt;

&lt;p&gt;Does this make the system easier to understand?&lt;/p&gt;

&lt;p&gt;Does this create a more coherent experience?&lt;/p&gt;

&lt;p&gt;Those questions often lead to better decisions than simply asking what feature should come next.&lt;/p&gt;

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

&lt;p&gt;Most frameworks begin as tools.&lt;/p&gt;

&lt;p&gt;Some evolve into ecosystems.&lt;/p&gt;

&lt;p&gt;The most successful ones eventually become languages.&lt;/p&gt;

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

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

&lt;p&gt;They create ways of thinking.&lt;/p&gt;

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

&lt;p&gt;The features matter.&lt;/p&gt;

&lt;p&gt;But over time, the language becomes the thing people truly adopt.&lt;/p&gt;

&lt;p&gt;And once that happens, the framework is no longer just software.&lt;/p&gt;

&lt;p&gt;It's a way of expressing ideas.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why Most Software Is Built Backwards</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Sat, 20 Jun 2026 17:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/why-most-software-is-built-backwards-46i</link>
      <guid>https://dev.to/stinklewinks/why-most-software-is-built-backwards-46i</guid>
      <description>&lt;p&gt;One of the more uncomfortable conclusions I've reached over the years is that a lot of software is built backwards.&lt;/p&gt;

&lt;p&gt;Not because developers are bad.&lt;/p&gt;

&lt;p&gt;Not because teams are incompetent.&lt;/p&gt;

&lt;p&gt;Because we're often rewarded for the wrong things.&lt;/p&gt;

&lt;p&gt;Features get attention.&lt;/p&gt;

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

&lt;p&gt;Announcements get attention.&lt;/p&gt;

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

&lt;p&gt;New capabilities get attention.&lt;/p&gt;

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

&lt;p&gt;As a result, many projects begin with the visible parts of the product and only later discover they neglected the foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Start With Features
&lt;/h2&gt;

&lt;p&gt;The typical software conversation goes something like this:&lt;/p&gt;

&lt;p&gt;What features should we build?&lt;/p&gt;

&lt;p&gt;What should the dashboard look like?&lt;/p&gt;

&lt;p&gt;What integrations should we support?&lt;/p&gt;

&lt;p&gt;What can we put on the roadmap?&lt;/p&gt;

&lt;p&gt;What can we announce next?&lt;/p&gt;

&lt;p&gt;These aren't bad questions.&lt;/p&gt;

&lt;p&gt;They're just usually asked too early.&lt;/p&gt;

&lt;p&gt;Because before discussing features, we should probably understand the system those features will live inside.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Foundation Determines The Experience
&lt;/h2&gt;

&lt;p&gt;Imagine building a house.&lt;/p&gt;

&lt;p&gt;Most people don't start by choosing paint colors.&lt;/p&gt;

&lt;p&gt;They start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The foundation&lt;/li&gt;
&lt;li&gt;The structure&lt;/li&gt;
&lt;li&gt;The plumbing&lt;/li&gt;
&lt;li&gt;The electrical system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The visible details matter.&lt;/p&gt;

&lt;p&gt;But they depend entirely on the invisible systems beneath them.&lt;/p&gt;

&lt;p&gt;Software isn't much different.&lt;/p&gt;

&lt;p&gt;The user interface is visible.&lt;/p&gt;

&lt;p&gt;The architecture isn't.&lt;/p&gt;

&lt;p&gt;The application is visible.&lt;/p&gt;

&lt;p&gt;The workflows aren't.&lt;/p&gt;

&lt;p&gt;The features are visible.&lt;/p&gt;

&lt;p&gt;The systems supporting them aren't.&lt;/p&gt;

&lt;p&gt;Yet those systems often determine whether the software succeeds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Products Are Built. Systems Are Designed.
&lt;/h2&gt;

&lt;p&gt;This is one reason I've become increasingly interested in systems thinking.&lt;/p&gt;

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

&lt;p&gt;Systems are designed.&lt;/p&gt;

&lt;p&gt;Features solve individual problems.&lt;/p&gt;

&lt;p&gt;Systems solve categories of problems.&lt;/p&gt;

&lt;p&gt;Features create functionality.&lt;/p&gt;

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

&lt;p&gt;When software focuses entirely on features, complexity tends to accumulate.&lt;/p&gt;

&lt;p&gt;When software focuses on systems, complexity tends to organize itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation Reveals The Truth
&lt;/h2&gt;

&lt;p&gt;One thing I've noticed is that documentation exposes whether a system was designed or assembled.&lt;/p&gt;

&lt;p&gt;A well-designed system tends to produce clear documentation.&lt;/p&gt;

&lt;p&gt;A poorly designed system often requires increasingly complicated explanations.&lt;/p&gt;

&lt;p&gt;If a workflow requires several pages of documentation to explain, the issue might not be the documentation.&lt;/p&gt;

&lt;p&gt;It might be the workflow.&lt;/p&gt;

&lt;p&gt;Documentation acts like a mirror.&lt;/p&gt;

&lt;p&gt;It reveals architectural decisions that would otherwise remain hidden.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Product Is Often Invisible
&lt;/h2&gt;

&lt;p&gt;The longer I build software, the more I realize that users rarely experience individual features.&lt;/p&gt;

&lt;p&gt;They experience systems.&lt;/p&gt;

&lt;p&gt;Users don't experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Database queries&lt;/li&gt;
&lt;li&gt;Deployment pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reliability&lt;/li&gt;
&lt;li&gt;Speed&lt;/li&gt;
&lt;li&gt;Simplicity&lt;/li&gt;
&lt;li&gt;Confidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those experiences emerge from the system as a whole.&lt;/p&gt;

&lt;p&gt;Not from any single feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Builders Fall Into This Trap
&lt;/h2&gt;

&lt;p&gt;The reason software often gets built backwards is understandable.&lt;/p&gt;

&lt;p&gt;Features are easy to demonstrate.&lt;/p&gt;

&lt;p&gt;Systems are harder to showcase.&lt;/p&gt;

&lt;p&gt;A feature fits in a screenshot.&lt;/p&gt;

&lt;p&gt;A system doesn't.&lt;/p&gt;

&lt;p&gt;A feature can be announced.&lt;/p&gt;

&lt;p&gt;A system is usually invisible.&lt;/p&gt;

&lt;p&gt;As builders, we naturally gravitate toward the visible work because it's easier to communicate.&lt;/p&gt;

&lt;p&gt;The challenge is that invisible work often creates the most value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start With The System
&lt;/h2&gt;

&lt;p&gt;I've started approaching projects differently.&lt;/p&gt;

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

&lt;p&gt;"What features should this have?"&lt;/p&gt;

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

&lt;p&gt;"What system am I building?"&lt;/p&gt;

&lt;p&gt;Once that becomes clear, many feature decisions become obvious.&lt;/p&gt;

&lt;p&gt;The system creates constraints.&lt;/p&gt;

&lt;p&gt;The system creates priorities.&lt;/p&gt;

&lt;p&gt;The system creates direction.&lt;/p&gt;

&lt;p&gt;Features become easier because the foundation already exists.&lt;/p&gt;

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

&lt;p&gt;I don't think features are unimportant.&lt;/p&gt;

&lt;p&gt;Far from it.&lt;/p&gt;

&lt;p&gt;Users ultimately interact with features.&lt;/p&gt;

&lt;p&gt;But features are only one layer of a larger structure.&lt;/p&gt;

&lt;p&gt;The most successful products I've used weren't successful because they had the most features.&lt;/p&gt;

&lt;p&gt;They were successful because the underlying system was thoughtfully designed.&lt;/p&gt;

&lt;p&gt;The software felt coherent.&lt;/p&gt;

&lt;p&gt;The workflows felt natural.&lt;/p&gt;

&lt;p&gt;The experience felt intentional.&lt;/p&gt;

&lt;p&gt;That's why I've started believing that many software projects are built backwards.&lt;/p&gt;

&lt;p&gt;We start with the visible pieces.&lt;/p&gt;

&lt;p&gt;Then scramble to create the system underneath them.&lt;/p&gt;

&lt;p&gt;Maybe we should reverse that process.&lt;/p&gt;

&lt;p&gt;Build the system first.&lt;/p&gt;

&lt;p&gt;Then let the features emerge from it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>opensource</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Documentation Is a Feature</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Fri, 19 Jun 2026 16:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/documentation-is-a-feature-228n</link>
      <guid>https://dev.to/stinklewinks/documentation-is-a-feature-228n</guid>
      <description>&lt;p&gt;One of the biggest mindset shifts I've had as a builder is realizing that documentation isn't separate from the product.&lt;/p&gt;

&lt;p&gt;Documentation is the product.&lt;/p&gt;

&lt;p&gt;Or at least part of it.&lt;/p&gt;

&lt;p&gt;As developers, we often treat documentation as something that happens after the software is finished.&lt;/p&gt;

&lt;p&gt;Build the feature.&lt;/p&gt;

&lt;p&gt;Test the feature.&lt;/p&gt;

&lt;p&gt;Ship the feature.&lt;/p&gt;

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

&lt;p&gt;Unfortunately, that's not how users experience software.&lt;/p&gt;

&lt;p&gt;Users don't experience the code.&lt;/p&gt;

&lt;p&gt;They experience the interface.&lt;/p&gt;

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

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

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

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

&lt;p&gt;To them, documentation is not an accessory.&lt;/p&gt;

&lt;p&gt;It's a feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Curse Of Familiarity
&lt;/h2&gt;

&lt;p&gt;One of the reasons documentation gets neglected is because creators already understand the product.&lt;/p&gt;

&lt;p&gt;We know why decisions were made.&lt;/p&gt;

&lt;p&gt;We know how the API works.&lt;/p&gt;

&lt;p&gt;We know the intended workflow.&lt;/p&gt;

&lt;p&gt;We know the shortcuts.&lt;/p&gt;

&lt;p&gt;We know the assumptions.&lt;/p&gt;

&lt;p&gt;The user doesn't.&lt;/p&gt;

&lt;p&gt;What feels obvious to the author often feels mysterious to everyone else.&lt;/p&gt;

&lt;p&gt;That's why documentation is difficult.&lt;/p&gt;

&lt;p&gt;You're trying to explain something you've become too familiar with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every Question Is Documentation Debt
&lt;/h2&gt;

&lt;p&gt;One way I've started thinking about documentation is this:&lt;/p&gt;

&lt;p&gt;Every repeated question represents documentation debt.&lt;/p&gt;

&lt;p&gt;If multiple people ask the same thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The product may be confusing.&lt;/li&gt;
&lt;li&gt;The documentation may be incomplete.&lt;/li&gt;
&lt;li&gt;Or both.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes the answer is improving the API.&lt;/p&gt;

&lt;p&gt;Sometimes the answer is improving the docs.&lt;/p&gt;

&lt;p&gt;Most of the time, it's a little of both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Great Documentation Reduces Friction
&lt;/h2&gt;

&lt;p&gt;Good documentation isn't about explaining every possible feature.&lt;/p&gt;

&lt;p&gt;It's about reducing friction.&lt;/p&gt;

&lt;p&gt;The user should be able to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is this?&lt;/li&gt;
&lt;li&gt;Why would I use it?&lt;/li&gt;
&lt;li&gt;How do I get started?&lt;/li&gt;
&lt;li&gt;What's the recommended approach?&lt;/li&gt;
&lt;li&gt;What's the simplest example?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As quickly as possible.&lt;/p&gt;

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

&lt;p&gt;The goal is momentum.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Best Documentation Teaches Philosophy
&lt;/h2&gt;

&lt;p&gt;The most memorable documentation I've encountered doesn't just explain APIs.&lt;/p&gt;

&lt;p&gt;It explains thinking.&lt;/p&gt;

&lt;p&gt;It teaches conventions.&lt;/p&gt;

&lt;p&gt;It teaches patterns.&lt;/p&gt;

&lt;p&gt;It teaches intent.&lt;/p&gt;

&lt;p&gt;When a framework explains why it works the way it does, developers become more effective users.&lt;/p&gt;

&lt;p&gt;The documentation becomes more than a reference.&lt;/p&gt;

&lt;p&gt;It becomes a guide.&lt;/p&gt;

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

&lt;p&gt;One reason documentation often feels less exciting than features is because it's infrastructure.&lt;/p&gt;

&lt;p&gt;Nobody shares screenshots of documentation systems.&lt;/p&gt;

&lt;p&gt;Nobody announces documentation rewrites with the same excitement as major feature releases.&lt;/p&gt;

&lt;p&gt;But documentation quietly determines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adoption&lt;/li&gt;
&lt;li&gt;Onboarding&lt;/li&gt;
&lt;li&gt;Support load&lt;/li&gt;
&lt;li&gt;Community growth&lt;/li&gt;
&lt;li&gt;Developer experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its impact is difficult to see directly.&lt;/p&gt;

&lt;p&gt;Its absence is impossible to ignore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future You Is Also A User
&lt;/h2&gt;

&lt;p&gt;One lesson I've learned repeatedly is that documentation isn't only for other people.&lt;/p&gt;

&lt;p&gt;It's for future you.&lt;/p&gt;

&lt;p&gt;Months later.&lt;/p&gt;

&lt;p&gt;A year later.&lt;/p&gt;

&lt;p&gt;After you've forgotten the details.&lt;/p&gt;

&lt;p&gt;Good documentation preserves knowledge.&lt;/p&gt;

&lt;p&gt;It captures decisions.&lt;/p&gt;

&lt;p&gt;It records patterns.&lt;/p&gt;

&lt;p&gt;It protects you from having to rediscover the same answers over and over again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Better Software
&lt;/h2&gt;

&lt;p&gt;The longer I build software, the more I realize that product quality and documentation quality are deeply connected.&lt;/p&gt;

&lt;p&gt;Confusing software requires more documentation.&lt;/p&gt;

&lt;p&gt;Clear software requires less.&lt;/p&gt;

&lt;p&gt;Good documentation reveals bad design.&lt;/p&gt;

&lt;p&gt;Bad design creates documentation work.&lt;/p&gt;

&lt;p&gt;The two constantly influence one another.&lt;/p&gt;

&lt;p&gt;Which is why I no longer think of documentation as something that happens after the product.&lt;/p&gt;

&lt;p&gt;It's part of the product.&lt;/p&gt;

&lt;p&gt;It always was.&lt;/p&gt;

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

&lt;p&gt;One of the easiest ways to improve a project is to improve its documentation.&lt;/p&gt;

&lt;p&gt;Not because better docs hide weaknesses.&lt;/p&gt;

&lt;p&gt;Because better docs expose them.&lt;/p&gt;

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

&lt;p&gt;Clarity improves design.&lt;/p&gt;

&lt;p&gt;Improved design improves the product.&lt;/p&gt;

&lt;p&gt;That's why I've started treating documentation as a feature rather than an afterthought.&lt;/p&gt;

&lt;p&gt;Because from the user's perspective, it already is.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>opensource</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why Every Library Needs a Real Project</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Thu, 18 Jun 2026 14:01:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/why-every-library-needs-a-real-project-1ae7</link>
      <guid>https://dev.to/stinklewinks/why-every-library-needs-a-real-project-1ae7</guid>
      <description>&lt;p&gt;One of the easiest traps to fall into as a library author is believing that examples are enough.&lt;/p&gt;

&lt;p&gt;They’re not.&lt;/p&gt;

&lt;p&gt;Examples prove that a feature works.&lt;/p&gt;

&lt;p&gt;Real projects prove that a library works.&lt;/p&gt;

&lt;p&gt;Those are very different things.&lt;/p&gt;

&lt;p&gt;Over the last few months, I’ve spent a lot of time thinking about frameworks, APIs, design systems, and developer tooling. Like many developers, I’ve built countless demo applications to test ideas.&lt;/p&gt;

&lt;p&gt;A sample website.&lt;/p&gt;

&lt;p&gt;A sample API.&lt;/p&gt;

&lt;p&gt;A sample component.&lt;/p&gt;

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

&lt;p&gt;Everything looked great.&lt;/p&gt;

&lt;p&gt;Until I started building real applications.&lt;/p&gt;

&lt;p&gt;That’s when the interesting lessons began.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo Projects Are Controlled Environments
&lt;/h2&gt;

&lt;p&gt;Most examples are designed to succeed.&lt;/p&gt;

&lt;p&gt;They showcase the happy path.&lt;/p&gt;

&lt;p&gt;The ideal workflow.&lt;/p&gt;

&lt;p&gt;The intended use case.&lt;/p&gt;

&lt;p&gt;And there’s nothing wrong with that.&lt;/p&gt;

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

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

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

&lt;p&gt;But they’re also controlled environments.&lt;/p&gt;

&lt;p&gt;The developer already knows what the outcome should be.&lt;/p&gt;

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

&lt;p&gt;The requirements are predictable.&lt;/p&gt;

&lt;p&gt;The scope is limited.&lt;/p&gt;

&lt;p&gt;Real projects are none of those things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Projects Create Real Pressure
&lt;/h2&gt;

&lt;p&gt;The moment a library is used for an actual project, the rules change.&lt;/p&gt;

&lt;p&gt;Suddenly you aren’t building a demonstration.&lt;/p&gt;

&lt;p&gt;You’re trying to solve a problem.&lt;/p&gt;

&lt;p&gt;You have deadlines.&lt;/p&gt;

&lt;p&gt;You have changing requirements.&lt;/p&gt;

&lt;p&gt;You have content to manage.&lt;/p&gt;

&lt;p&gt;You have layouts that don’t quite fit.&lt;/p&gt;

&lt;p&gt;You have edge cases.&lt;/p&gt;

&lt;p&gt;You have mistakes.&lt;/p&gt;

&lt;p&gt;And that’s where a library starts revealing its strengths and weaknesses.&lt;/p&gt;

&lt;p&gt;Not in the demo.&lt;/p&gt;

&lt;p&gt;In the pressure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reality Exposes Bad Assumptions
&lt;/h2&gt;

&lt;p&gt;One of the most valuable things a real project does is expose assumptions.&lt;/p&gt;

&lt;p&gt;Assumptions that seemed perfectly reasonable while designing the library.&lt;/p&gt;

&lt;p&gt;Assumptions that looked elegant on paper.&lt;/p&gt;

&lt;p&gt;Assumptions that made sense during development.&lt;/p&gt;

&lt;p&gt;Then reality arrives.&lt;/p&gt;

&lt;p&gt;A workflow feels awkward.&lt;/p&gt;

&lt;p&gt;A configuration feels repetitive.&lt;/p&gt;

&lt;p&gt;A component requires too much setup.&lt;/p&gt;

&lt;p&gt;An API doesn’t feel natural anymore.&lt;/p&gt;

&lt;p&gt;The problem isn’t that the design was wrong.&lt;/p&gt;

&lt;p&gt;The problem is that it hadn’t been tested against reality yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Framework Authors Need To Become Users
&lt;/h2&gt;

&lt;p&gt;I think one of the best things a framework author can do is become a customer of their own software.&lt;/p&gt;

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

&lt;p&gt;Not for demos.&lt;/p&gt;

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

&lt;p&gt;Build websites with it.&lt;/p&gt;

&lt;p&gt;Build applications with it.&lt;/p&gt;

&lt;p&gt;Build businesses with it.&lt;/p&gt;

&lt;p&gt;Depend on it.&lt;/p&gt;

&lt;p&gt;Because the moment you depend on your own software, your perspective changes.&lt;/p&gt;

&lt;p&gt;You stop thinking like a framework author.&lt;/p&gt;

&lt;p&gt;You start thinking like a user.&lt;/p&gt;

&lt;p&gt;And users care about very different things.&lt;/p&gt;

&lt;p&gt;Users care about friction.&lt;/p&gt;

&lt;p&gt;Users care about clarity.&lt;/p&gt;

&lt;p&gt;Users care about getting work done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features Stop Mattering As Much
&lt;/h2&gt;

&lt;p&gt;One surprising lesson is that many feature discussions disappear once you’re building something real.&lt;/p&gt;

&lt;p&gt;The conversation changes from:&lt;/p&gt;

&lt;p&gt;“What features should we add next?”&lt;/p&gt;

&lt;p&gt;To:&lt;/p&gt;

&lt;p&gt;“Why does this workflow feel awkward?”&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;“Why did this take longer than expected?”&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;“Why am I repeating myself?”&lt;/p&gt;

&lt;p&gt;Those questions often lead to far more valuable improvements than adding another feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Projects Generate Better Ideas
&lt;/h2&gt;

&lt;p&gt;I’ve found that some of the best ideas don’t come from brainstorming.&lt;/p&gt;

&lt;p&gt;They come from building.&lt;/p&gt;

&lt;p&gt;You’re working on a real project.&lt;/p&gt;

&lt;p&gt;You encounter friction.&lt;/p&gt;

&lt;p&gt;You solve the friction.&lt;/p&gt;

&lt;p&gt;A pattern emerges.&lt;/p&gt;

&lt;p&gt;An abstraction emerges.&lt;/p&gt;

&lt;p&gt;A better API emerges.&lt;/p&gt;

&lt;p&gt;Many of the strongest improvements I’ve made to software projects didn’t come from planning sessions.&lt;/p&gt;

&lt;p&gt;They came from trying to get actual work done.&lt;/p&gt;

&lt;p&gt;The project taught the lesson.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every Library Needs A Home
&lt;/h2&gt;

&lt;p&gt;This is one reason I believe every library should have a real project associated with it.&lt;/p&gt;

&lt;p&gt;Not as a marketing example.&lt;/p&gt;

&lt;p&gt;As a proving ground.&lt;/p&gt;

&lt;p&gt;Something that forces the library to solve real problems.&lt;/p&gt;

&lt;p&gt;Something that depends on the library succeeding.&lt;/p&gt;

&lt;p&gt;Something that exposes weaknesses before users do.&lt;/p&gt;

&lt;p&gt;The goal isn’t to prove the library is perfect.&lt;/p&gt;

&lt;p&gt;The goal is to create an environment where the library can improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building The Ecosystem
&lt;/h2&gt;

&lt;p&gt;As I continue working on KiwiEngine and the surrounding ecosystem, one thing is becoming increasingly clear.&lt;/p&gt;

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

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

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

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

&lt;p&gt;They’re not distractions from the framework.&lt;/p&gt;

&lt;p&gt;They’re part of the framework.&lt;/p&gt;

&lt;p&gt;Every real project creates feedback.&lt;/p&gt;

&lt;p&gt;Every real project exposes friction.&lt;/p&gt;

&lt;p&gt;Every real project improves the underlying system.&lt;/p&gt;

&lt;p&gt;That’s why I believe every library needs a real project.&lt;/p&gt;

&lt;p&gt;Not because it validates the library.&lt;/p&gt;

&lt;p&gt;Because it teaches the library what it still needs to become.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>The Difference Between a Product and Infrastructure</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Tue, 16 Jun 2026 17:30:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/the-difference-between-a-product-and-infrastructure-1hh2</link>
      <guid>https://dev.to/stinklewinks/the-difference-between-a-product-and-infrastructure-1hh2</guid>
      <description>&lt;p&gt;One of the most interesting realizations I've had while building software is that products and infrastructure are not the same thing.&lt;/p&gt;

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

&lt;p&gt;Of course they're different.&lt;/p&gt;

&lt;p&gt;But I think many builders—including myself—confuse the two more often than we realize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Products Solve Immediate Problems
&lt;/h2&gt;

&lt;p&gt;Products are what users see.&lt;/p&gt;

&lt;p&gt;They're the websites.&lt;/p&gt;

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

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

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

&lt;p&gt;The experiences people interact with directly.&lt;/p&gt;

&lt;p&gt;A product exists to solve a specific problem.&lt;/p&gt;

&lt;p&gt;Need a blog?&lt;/p&gt;

&lt;p&gt;Use a CMS.&lt;/p&gt;

&lt;p&gt;Need to manage projects?&lt;/p&gt;

&lt;p&gt;Use a project management tool.&lt;/p&gt;

&lt;p&gt;Need an online store?&lt;/p&gt;

&lt;p&gt;Use an ecommerce platform.&lt;/p&gt;

&lt;p&gt;Products are tangible.&lt;/p&gt;

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

&lt;p&gt;They're easy to explain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure Enables Products
&lt;/h2&gt;

&lt;p&gt;Infrastructure is different.&lt;/p&gt;

&lt;p&gt;Infrastructure exists so products can exist.&lt;/p&gt;

&lt;p&gt;Users rarely think about infrastructure.&lt;/p&gt;

&lt;p&gt;In fact, the best infrastructure is often invisible.&lt;/p&gt;

&lt;p&gt;Nobody gets excited about electrical wiring when they buy a house.&lt;/p&gt;

&lt;p&gt;Nobody buys a car because of the manufacturing equipment that produced it.&lt;/p&gt;

&lt;p&gt;Nobody visits a website because of its deployment pipeline.&lt;/p&gt;

&lt;p&gt;Yet all of those things are essential.&lt;/p&gt;

&lt;p&gt;Infrastructure creates the conditions that make products possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Builder's Trap
&lt;/h2&gt;

&lt;p&gt;One trap I've noticed is that builders often focus entirely on products.&lt;/p&gt;

&lt;p&gt;The product gets all the attention.&lt;/p&gt;

&lt;p&gt;The product gets all the marketing.&lt;/p&gt;

&lt;p&gt;The product gets all the praise.&lt;/p&gt;

&lt;p&gt;Meanwhile, the infrastructure quietly determines whether the product succeeds.&lt;/p&gt;

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

&lt;p&gt;Tooling.&lt;/p&gt;

&lt;p&gt;Architecture.&lt;/p&gt;

&lt;p&gt;Testing.&lt;/p&gt;

&lt;p&gt;Deployment.&lt;/p&gt;

&lt;p&gt;Workflows.&lt;/p&gt;

&lt;p&gt;Contracts.&lt;/p&gt;

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

&lt;p&gt;These things rarely appear in screenshots.&lt;/p&gt;

&lt;p&gt;But they determine how sustainable a product becomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters To Framework Authors
&lt;/h2&gt;

&lt;p&gt;This distinction became much clearer to me while working on KiwiEngine.&lt;/p&gt;

&lt;p&gt;Originally, I thought about modules like Juice, Seltzer, and Nectarine as products.&lt;/p&gt;

&lt;p&gt;Today, I think about them more as infrastructure.&lt;/p&gt;

&lt;p&gt;Their purpose isn't to be the destination.&lt;/p&gt;

&lt;p&gt;Their purpose is to make building destinations easier.&lt;/p&gt;

&lt;p&gt;That's a different mindset.&lt;/p&gt;

&lt;p&gt;When you're building infrastructure, success isn't measured by how many features you have.&lt;/p&gt;

&lt;p&gt;Success is measured by how many problems become easier to solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure Compounds
&lt;/h2&gt;

&lt;p&gt;One reason I've become increasingly interested in infrastructure is that it compounds.&lt;/p&gt;

&lt;p&gt;A product solves a problem.&lt;/p&gt;

&lt;p&gt;Infrastructure helps solve many future problems.&lt;/p&gt;

&lt;p&gt;A design system helps every future interface.&lt;/p&gt;

&lt;p&gt;A deployment system helps every future application.&lt;/p&gt;

&lt;p&gt;A documentation system helps every future developer.&lt;/p&gt;

&lt;p&gt;The value accumulates.&lt;/p&gt;

&lt;p&gt;The investment continues paying dividends long after the original project is complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Most Valuable Work Is Often Invisible
&lt;/h2&gt;

&lt;p&gt;Many of the most important improvements in a project aren't visible to users.&lt;/p&gt;

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

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

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

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

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

&lt;p&gt;These improvements rarely make for exciting screenshots.&lt;/p&gt;

&lt;p&gt;But they often create more long-term value than another feature.&lt;/p&gt;

&lt;p&gt;That's one reason infrastructure work can feel strange.&lt;/p&gt;

&lt;p&gt;You're investing heavily in something that many people will never notice.&lt;/p&gt;

&lt;p&gt;And that's okay.&lt;/p&gt;

&lt;p&gt;Infrastructure isn't supposed to be the star of the show.&lt;/p&gt;

&lt;p&gt;It's supposed to make everything else possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Both
&lt;/h2&gt;

&lt;p&gt;The longer I build software, the more I realize that great products and great infrastructure need each other.&lt;/p&gt;

&lt;p&gt;Products reveal real-world problems.&lt;/p&gt;

&lt;p&gt;Infrastructure creates repeatable solutions.&lt;/p&gt;

&lt;p&gt;Products generate feedback.&lt;/p&gt;

&lt;p&gt;Infrastructure captures lessons.&lt;/p&gt;

&lt;p&gt;Products deliver value.&lt;/p&gt;

&lt;p&gt;Infrastructure scales value.&lt;/p&gt;

&lt;p&gt;Neither is enough on its own.&lt;/p&gt;

&lt;p&gt;The strongest systems have both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Beyond Software
&lt;/h2&gt;

&lt;p&gt;This idea extends far beyond software.&lt;/p&gt;

&lt;p&gt;Businesses have infrastructure.&lt;/p&gt;

&lt;p&gt;Studios have infrastructure.&lt;/p&gt;

&lt;p&gt;Farms have infrastructure.&lt;/p&gt;

&lt;p&gt;Schools have infrastructure.&lt;/p&gt;

&lt;p&gt;Every successful system eventually develops layers that support the visible work.&lt;/p&gt;

&lt;p&gt;The mistake is assuming the visible layer is the entire system.&lt;/p&gt;

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

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

&lt;p&gt;One of the biggest shifts in my thinking has been realizing that not everything I build needs to be a product.&lt;/p&gt;

&lt;p&gt;Sometimes the most valuable thing you can build is the infrastructure that allows future products to exist.&lt;/p&gt;

&lt;p&gt;Products are what people see.&lt;/p&gt;

&lt;p&gt;Infrastructure is what makes them possible.&lt;/p&gt;

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

&lt;p&gt;But they're not the same thing.&lt;/p&gt;

&lt;p&gt;And understanding the difference can change how you approach building entirely.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Road To KiwiEngine #17: Why Using Your Own Software Changes Everything</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Mon, 15 Jun 2026 17:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/road-to-kiwiengine-17-why-using-your-own-software-changes-everything-5gn7</link>
      <guid>https://dev.to/stinklewinks/road-to-kiwiengine-17-why-using-your-own-software-changes-everything-5gn7</guid>
      <description>&lt;p&gt;One of the most important transitions a software project can make is moving from something you build to something you depend on.&lt;/p&gt;

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

&lt;p&gt;In practice, it changes everything.&lt;/p&gt;

&lt;p&gt;Recently, I've been spending more time building user-facing applications with KiwiEngine. Not examples. Not demos. Not test projects.&lt;/p&gt;

&lt;p&gt;Actual applications.&lt;/p&gt;

&lt;p&gt;The CitrusWorx website.&lt;/p&gt;

&lt;p&gt;The KiwiPress website.&lt;/p&gt;

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

&lt;p&gt;Tools.&lt;/p&gt;

&lt;p&gt;Projects that people will actually use.&lt;/p&gt;

&lt;p&gt;And something interesting started happening.&lt;/p&gt;

&lt;p&gt;The framework stopped feeling like a project.&lt;/p&gt;

&lt;p&gt;It started feeling like infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Software Is Different Than Relying On Software
&lt;/h2&gt;

&lt;p&gt;When you're building a framework, it's easy to think like a framework author.&lt;/p&gt;

&lt;p&gt;You focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Features&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Future possibilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You imagine how people might use the system.&lt;/p&gt;

&lt;p&gt;You try to anticipate requirements.&lt;/p&gt;

&lt;p&gt;You try to design for flexibility.&lt;/p&gt;

&lt;p&gt;But when you become a user of your own software, your perspective changes.&lt;/p&gt;

&lt;p&gt;Suddenly you're no longer asking:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"What features should this have?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You're asking:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Why is this taking so long?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Why does this feel awkward?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Why am I repeating myself?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Why isn't this easier?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The conversation shifts from theory to reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every Rough Edge Becomes Visible
&lt;/h2&gt;

&lt;p&gt;One thing I've learned is that software always feels smoother from the author's side.&lt;/p&gt;

&lt;p&gt;You know the shortcuts.&lt;/p&gt;

&lt;p&gt;You know the assumptions.&lt;/p&gt;

&lt;p&gt;You know the workarounds.&lt;/p&gt;

&lt;p&gt;You know what was intended.&lt;/p&gt;

&lt;p&gt;Users don't.&lt;/p&gt;

&lt;p&gt;And when you become a user of your own software, you start experiencing those same frustrations.&lt;/p&gt;

&lt;p&gt;The setup process that seemed reasonable suddenly feels cumbersome.&lt;/p&gt;

&lt;p&gt;The API that looked elegant starts feeling repetitive.&lt;/p&gt;

&lt;p&gt;The feature you thought nobody would need suddenly becomes important.&lt;/p&gt;

&lt;p&gt;Every rough edge becomes impossible to ignore.&lt;/p&gt;

&lt;p&gt;That's a good thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation Stops Being An Afterthought
&lt;/h2&gt;

&lt;p&gt;One unexpected lesson has been documentation.&lt;/p&gt;

&lt;p&gt;When you're building a framework, it's easy to postpone documentation.&lt;/p&gt;

&lt;p&gt;You know how everything works.&lt;/p&gt;

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

&lt;p&gt;The documentation can wait.&lt;/p&gt;

&lt;p&gt;Then you start building a real application.&lt;/p&gt;

&lt;p&gt;Suddenly you're constantly asking:&lt;/p&gt;

&lt;p&gt;"How did I design this again?"&lt;/p&gt;

&lt;p&gt;"What's the preferred pattern?"&lt;/p&gt;

&lt;p&gt;"How should this component work?"&lt;/p&gt;

&lt;p&gt;Documentation stops being something for other people.&lt;/p&gt;

&lt;p&gt;It becomes something for future you.&lt;/p&gt;

&lt;p&gt;That realization alone changes how you think about developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good Software Removes Friction
&lt;/h2&gt;

&lt;p&gt;Lately I've been noticing areas where KiwiEngine creates friction.&lt;/p&gt;

&lt;p&gt;Not because anything is broken.&lt;/p&gt;

&lt;p&gt;Because I'm actually using it.&lt;/p&gt;

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

&lt;p&gt;When software is theoretical, friction stays hidden.&lt;/p&gt;

&lt;p&gt;When software becomes part of your daily workflow, friction becomes obvious.&lt;/p&gt;

&lt;p&gt;You feel every extra step.&lt;/p&gt;

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

&lt;p&gt;Every confusing convention.&lt;/p&gt;

&lt;p&gt;Every repetitive task.&lt;/p&gt;

&lt;p&gt;And that's where some of the best improvements come from.&lt;/p&gt;

&lt;p&gt;Not feature requests.&lt;/p&gt;

&lt;p&gt;Not planning meetings.&lt;/p&gt;

&lt;p&gt;Usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Framework Starts Teaching You
&lt;/h2&gt;

&lt;p&gt;One of the most surprising parts of this process is that the framework starts teaching its creator.&lt;/p&gt;

&lt;p&gt;You build something.&lt;/p&gt;

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

&lt;p&gt;You discover weaknesses.&lt;/p&gt;

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

&lt;p&gt;Then you use it again.&lt;/p&gt;

&lt;p&gt;The feedback loop becomes incredibly short.&lt;/p&gt;

&lt;p&gt;The project begins revealing what it wants to become.&lt;/p&gt;

&lt;p&gt;Patterns emerge.&lt;/p&gt;

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

&lt;p&gt;Cleaner APIs emerge.&lt;/p&gt;

&lt;p&gt;The framework evolves because reality is constantly testing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Internal Projects Matter
&lt;/h2&gt;

&lt;p&gt;This is one reason I believe strongly in building real projects with your own tools.&lt;/p&gt;

&lt;p&gt;Not because it proves the tools work.&lt;/p&gt;

&lt;p&gt;Because it proves where they don't.&lt;/p&gt;

&lt;p&gt;A hundred demos won't teach the same lessons as one real application.&lt;/p&gt;

&lt;p&gt;A thousand example snippets won't expose the same problems as daily usage.&lt;/p&gt;

&lt;p&gt;Real projects create real pressure.&lt;/p&gt;

&lt;p&gt;And pressure reveals weaknesses.&lt;/p&gt;

&lt;p&gt;That's true for software.&lt;/p&gt;

&lt;p&gt;It's true for businesses.&lt;/p&gt;

&lt;p&gt;It's true for systems in general.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Shift From Project To Infrastructure
&lt;/h2&gt;

&lt;p&gt;The more I work on CitrusWorx, KiwiPress, and other user-facing projects, the more I realize KiwiEngine is crossing an important threshold.&lt;/p&gt;

&lt;p&gt;It's no longer just something I'm building.&lt;/p&gt;

&lt;p&gt;It's becoming something I'm relying on.&lt;/p&gt;

&lt;p&gt;That changes the standard.&lt;/p&gt;

&lt;p&gt;Features become less important than stability.&lt;/p&gt;

&lt;p&gt;Possibilities become less important than usability.&lt;/p&gt;

&lt;p&gt;Architecture becomes less important than experience.&lt;/p&gt;

&lt;p&gt;The framework stops being a science experiment.&lt;/p&gt;

&lt;p&gt;It starts becoming infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Most Valuable Feedback Loop
&lt;/h2&gt;

&lt;p&gt;For all the discussions about testing, analytics, and user feedback, I think one of the most valuable feedback loops is still using your own software.&lt;/p&gt;

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

&lt;p&gt;Not for demos.&lt;/p&gt;

&lt;p&gt;Daily.&lt;/p&gt;

&lt;p&gt;Depend on it.&lt;/p&gt;

&lt;p&gt;Build with it.&lt;/p&gt;

&lt;p&gt;Ship with it.&lt;/p&gt;

&lt;p&gt;Live with it.&lt;/p&gt;

&lt;p&gt;Because once your own software becomes infrastructure, every flaw becomes visible.&lt;/p&gt;

&lt;p&gt;And every improvement becomes meaningful.&lt;/p&gt;

&lt;p&gt;That's where great software starts to emerge.&lt;/p&gt;

&lt;p&gt;Not from building it.&lt;/p&gt;

&lt;p&gt;From depending on it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Road To KiwiEngine is a series documenting the philosophy, architecture, successes, mistakes, and lessons learned while building KiwiEngine and its ecosystem one module at a time.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>The Best Abstractions Arrive Late</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Sun, 14 Jun 2026 15:30:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/the-best-abstractions-arrive-late-1h1o</link>
      <guid>https://dev.to/stinklewinks/the-best-abstractions-arrive-late-1h1o</guid>
      <description>&lt;p&gt;One of the biggest mistakes I see developers make is trying to design the perfect abstraction before they've built anything.&lt;/p&gt;

&lt;p&gt;I've done it myself.&lt;/p&gt;

&lt;p&gt;You sit down to design a library, framework, API, or system and immediately start thinking about every possible future use case.&lt;/p&gt;

&lt;p&gt;What if someone needs this?&lt;/p&gt;

&lt;p&gt;What if they need that?&lt;/p&gt;

&lt;p&gt;What if they need five different variations?&lt;/p&gt;

&lt;p&gt;What if they need something I haven't thought of yet?&lt;/p&gt;

&lt;p&gt;Before long, you're designing version five of a product that doesn't even have a version one.&lt;/p&gt;

&lt;p&gt;The problem is that most good abstractions aren't discovered through planning.&lt;/p&gt;

&lt;p&gt;They're discovered through friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Temptation To Abstract Early
&lt;/h2&gt;

&lt;p&gt;As engineers, we love patterns.&lt;/p&gt;

&lt;p&gt;The moment we repeat something twice, we start thinking about abstractions.&lt;/p&gt;

&lt;p&gt;Sometimes that's the right instinct.&lt;/p&gt;

&lt;p&gt;Other times it's premature.&lt;/p&gt;

&lt;p&gt;The challenge is that before you've built enough, you don't actually know what should be abstracted.&lt;/p&gt;

&lt;p&gt;You only know what you think should be abstracted.&lt;/p&gt;

&lt;p&gt;Those are not always the same thing.&lt;/p&gt;

&lt;p&gt;Many abstractions begin as educated guesses.&lt;/p&gt;

&lt;p&gt;The best abstractions begin as observed behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Problems Reveal Better Solutions
&lt;/h2&gt;

&lt;p&gt;Recently, while working on responsive layouts, I noticed myself thinking less about CSS and more about intent.&lt;/p&gt;

&lt;p&gt;Not because I was trying to invent something new.&lt;/p&gt;

&lt;p&gt;Because I kept running into the same friction.&lt;/p&gt;

&lt;p&gt;The question wasn't:&lt;/p&gt;

&lt;p&gt;"How should this element be styled?"&lt;/p&gt;

&lt;p&gt;The question was:&lt;/p&gt;

&lt;p&gt;"How should this content behave?"&lt;/p&gt;

&lt;p&gt;That subtle difference led me toward an idea like:&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;What interested me wasn't the syntax.&lt;/p&gt;

&lt;p&gt;It was the thought process that produced it.&lt;/p&gt;

&lt;p&gt;The abstraction didn't come from a planning document.&lt;/p&gt;

&lt;p&gt;It came from repeatedly encountering the same problem while building.&lt;/p&gt;

&lt;p&gt;The friction exposed the pattern.&lt;/p&gt;

&lt;p&gt;The pattern suggested the abstraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most Frameworks Start With Solutions
&lt;/h2&gt;

&lt;p&gt;Many libraries begin with solutions looking for problems.&lt;/p&gt;

&lt;p&gt;Someone creates an abstraction because it feels elegant.&lt;/p&gt;

&lt;p&gt;Because it looks clever.&lt;/p&gt;

&lt;p&gt;Because it theoretically covers many use cases.&lt;/p&gt;

&lt;p&gt;Then reality arrives.&lt;/p&gt;

&lt;p&gt;Users do things the designer never anticipated.&lt;/p&gt;

&lt;p&gt;Requirements shift.&lt;/p&gt;

&lt;p&gt;Edge cases appear.&lt;/p&gt;

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

&lt;p&gt;Complexity accumulates.&lt;/p&gt;

&lt;p&gt;Eventually the abstraction becomes harder to understand than the original problem.&lt;/p&gt;

&lt;p&gt;We've all seen it.&lt;/p&gt;

&lt;p&gt;Sometimes we've built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Friction Is Honest
&lt;/h2&gt;

&lt;p&gt;The reason I trust friction more than planning is because friction doesn't lie.&lt;/p&gt;

&lt;p&gt;Friction reveals what actually hurts.&lt;/p&gt;

&lt;p&gt;Friction reveals repetition.&lt;/p&gt;

&lt;p&gt;Friction reveals complexity.&lt;/p&gt;

&lt;p&gt;Friction reveals awkward workflows.&lt;/p&gt;

&lt;p&gt;Friction reveals where developers are spending mental energy.&lt;/p&gt;

&lt;p&gt;When the same pain appears repeatedly, that's usually a signal.&lt;/p&gt;

&lt;p&gt;Not that a feature is needed.&lt;/p&gt;

&lt;p&gt;That a better abstraction may exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Difference Between Discovery And Invention
&lt;/h2&gt;

&lt;p&gt;I've started thinking about abstractions less as inventions and more as discoveries.&lt;/p&gt;

&lt;p&gt;The pattern already exists.&lt;/p&gt;

&lt;p&gt;The abstraction simply gives it a name.&lt;/p&gt;

&lt;p&gt;Good abstractions feel obvious in hindsight.&lt;/p&gt;

&lt;p&gt;You see them and think:&lt;/p&gt;

&lt;p&gt;"Of course."&lt;/p&gt;

&lt;p&gt;The reason they feel obvious is because they were already present in the problem.&lt;/p&gt;

&lt;p&gt;Someone finally noticed them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Libraries Develop Languages
&lt;/h2&gt;

&lt;p&gt;One of the most fascinating parts of building libraries is watching them develop their own vocabulary.&lt;/p&gt;

&lt;p&gt;Not because you planned every word.&lt;/p&gt;

&lt;p&gt;Because certain ideas keep appearing.&lt;/p&gt;

&lt;p&gt;Certain concepts keep returning.&lt;/p&gt;

&lt;p&gt;Certain solutions keep proving useful.&lt;/p&gt;

&lt;p&gt;Over time, the library starts developing a language.&lt;/p&gt;

&lt;p&gt;A language of patterns.&lt;/p&gt;

&lt;p&gt;A language of conventions.&lt;/p&gt;

&lt;p&gt;A language of intent.&lt;/p&gt;

&lt;p&gt;The best parts of that language are rarely designed in isolation.&lt;/p&gt;

&lt;p&gt;They're discovered through use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let The Work Teach You
&lt;/h2&gt;

&lt;p&gt;I've become increasingly skeptical of designing large systems entirely from diagrams and planning sessions.&lt;/p&gt;

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

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

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

&lt;p&gt;But eventually the work itself becomes the teacher.&lt;/p&gt;

&lt;p&gt;You build.&lt;/p&gt;

&lt;p&gt;You struggle.&lt;/p&gt;

&lt;p&gt;You notice.&lt;/p&gt;

&lt;p&gt;You refine.&lt;/p&gt;

&lt;p&gt;Then you build again.&lt;/p&gt;

&lt;p&gt;Every cycle reveals something new.&lt;/p&gt;

&lt;p&gt;The abstractions that survive those cycles are often the ones worth keeping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build First, Abstract Second
&lt;/h2&gt;

&lt;p&gt;This doesn't mean avoiding abstractions.&lt;/p&gt;

&lt;p&gt;It means earning them.&lt;/p&gt;

&lt;p&gt;Build the thing.&lt;/p&gt;

&lt;p&gt;Experience the friction.&lt;/p&gt;

&lt;p&gt;Identify the pattern.&lt;/p&gt;

&lt;p&gt;Then create the abstraction.&lt;/p&gt;

&lt;p&gt;Not because it looks elegant.&lt;/p&gt;

&lt;p&gt;Not because it feels clever.&lt;/p&gt;

&lt;p&gt;Because reality has demonstrated that it deserves to exist.&lt;/p&gt;

&lt;p&gt;I've found that the best abstractions rarely arrive at the beginning of a project.&lt;/p&gt;

&lt;p&gt;They arrive later.&lt;/p&gt;

&lt;p&gt;After enough mistakes.&lt;/p&gt;

&lt;p&gt;After enough repetition.&lt;/p&gt;

&lt;p&gt;After enough friction.&lt;/p&gt;

&lt;p&gt;That's why I've started believing that the best abstractions arrive late.&lt;/p&gt;

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

&lt;p&gt;Because they've been earned.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Declarative. Imperative. Intentional.</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Sat, 13 Jun 2026 18:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/declarative-imperative-intentional-4j60</link>
      <guid>https://dev.to/stinklewinks/declarative-imperative-intentional-4j60</guid>
      <description>&lt;p&gt;As developers, we spend a lot of time talking about programming paradigms.&lt;/p&gt;

&lt;p&gt;Imperative programming.&lt;/p&gt;

&lt;p&gt;Declarative programming.&lt;/p&gt;

&lt;p&gt;Functional programming.&lt;/p&gt;

&lt;p&gt;Object-oriented programming.&lt;/p&gt;

&lt;p&gt;Event-driven programming.&lt;/p&gt;

&lt;p&gt;Over the years, we've developed countless ways to describe how software should be written.&lt;/p&gt;

&lt;p&gt;But recently I've been wondering if we're missing something.&lt;/p&gt;

&lt;p&gt;What if there is another layer above all of them?&lt;/p&gt;

&lt;p&gt;What if the future isn't just declarative or imperative?&lt;/p&gt;

&lt;p&gt;What if it's intentional?&lt;/p&gt;

&lt;h2&gt;
  
  
  Imperative Languages
&lt;/h2&gt;

&lt;p&gt;Most developers begin with imperative programming.&lt;/p&gt;

&lt;p&gt;Imperative code tells the computer exactly what to do.&lt;/p&gt;

&lt;p&gt;Step by step.&lt;/p&gt;

&lt;p&gt;Instruction by instruction.&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 javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUsers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;activeUsers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;activeUsers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sortByName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;activeUsers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The focus is on the process.&lt;/p&gt;

&lt;p&gt;The developer describes the sequence.&lt;/p&gt;

&lt;p&gt;Do this.&lt;/p&gt;

&lt;p&gt;Then this.&lt;/p&gt;

&lt;p&gt;Then this.&lt;/p&gt;

&lt;p&gt;The computer follows the instructions.&lt;/p&gt;

&lt;p&gt;Imperative programming is powerful because it gives precise control.&lt;/p&gt;

&lt;p&gt;But it also means the developer carries the burden of describing every step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Declarative Languages
&lt;/h2&gt;

&lt;p&gt;Declarative programming moved the conversation forward.&lt;/p&gt;

&lt;p&gt;Instead of describing how something should happen, you describe what should happen.&lt;/p&gt;

&lt;p&gt;SQL is a great example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;active&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You aren't describing indexes.&lt;/p&gt;

&lt;p&gt;You aren't describing loops.&lt;/p&gt;

&lt;p&gt;You aren't describing memory allocation.&lt;/p&gt;

&lt;p&gt;You simply describe the result you want.&lt;/p&gt;

&lt;p&gt;The database engine determines how to achieve it.&lt;/p&gt;

&lt;p&gt;React, HTML, CSS, infrastructure tools, and many modern frameworks have embraced this idea.&lt;/p&gt;

&lt;p&gt;Describe the outcome.&lt;/p&gt;

&lt;p&gt;Let the system determine the implementation.&lt;/p&gt;

&lt;p&gt;That abstraction has made software significantly more productive.&lt;/p&gt;

&lt;p&gt;But I don't think it is the final step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Declarative Systems
&lt;/h2&gt;

&lt;p&gt;Even declarative systems often require us to think in implementation details.&lt;/p&gt;

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

&lt;p&gt;Many solutions look something like this:&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;class=&lt;/span&gt;&lt;span class="s"&gt;"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3"&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 is certainly more declarative than writing raw CSS.&lt;/p&gt;

&lt;p&gt;But we're still describing implementation.&lt;/p&gt;

&lt;p&gt;We're still talking about columns.&lt;/p&gt;

&lt;p&gt;We're still talking about breakpoints.&lt;/p&gt;

&lt;p&gt;We're still talking about layout mechanics.&lt;/p&gt;

&lt;p&gt;The system knows what we're doing.&lt;/p&gt;

&lt;p&gt;But it doesn't necessarily know why we're doing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intentional Design
&lt;/h2&gt;

&lt;p&gt;This is where I think things get interesting.&lt;/p&gt;

&lt;p&gt;Imagine instead:&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;adapt=&lt;/span&gt;&lt;span class="s"&gt;"grid"&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;Or:&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;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="na"&gt;tablet=&lt;/span&gt;&lt;span class="s"&gt;"2x1"&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;Now we're no longer describing CSS.&lt;/p&gt;

&lt;p&gt;We're describing intent.&lt;/p&gt;

&lt;p&gt;The element is communicating its desired behavior.&lt;/p&gt;

&lt;p&gt;It should adapt.&lt;/p&gt;

&lt;p&gt;It should reorganize itself based on context.&lt;/p&gt;

&lt;p&gt;The system becomes responsible for determining how that adaptation happens.&lt;/p&gt;

&lt;p&gt;The focus shifts away from implementation and toward purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Describing Goals Instead Of Mechanisms
&lt;/h2&gt;

&lt;p&gt;The more I think about it, the more I realize many of the systems I enjoy building move in this direction.&lt;/p&gt;

&lt;p&gt;Take SQL.&lt;/p&gt;

&lt;p&gt;You describe the data you want.&lt;/p&gt;

&lt;p&gt;Take infrastructure-as-code.&lt;/p&gt;

&lt;p&gt;You describe the infrastructure you want.&lt;/p&gt;

&lt;p&gt;Take Nectarine.&lt;/p&gt;

&lt;p&gt;You describe schemas, APIs, and resources.&lt;/p&gt;

&lt;p&gt;The system generates the implementation.&lt;/p&gt;

&lt;p&gt;Now consider layout.&lt;/p&gt;

&lt;p&gt;What if we described the experience we want instead of the CSS we want?&lt;/p&gt;

&lt;p&gt;What if we described content behavior instead of breakpoints?&lt;/p&gt;

&lt;p&gt;What if we described goals instead of mechanisms?&lt;/p&gt;

&lt;p&gt;That's not simply declarative.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  The Library Starts Developing A Language
&lt;/h2&gt;

&lt;p&gt;One of the fascinating things about building software libraries is that eventually they develop their own language.&lt;/p&gt;

&lt;p&gt;Not a programming language.&lt;/p&gt;

&lt;p&gt;A design language.&lt;/p&gt;

&lt;p&gt;A way of expressing ideas.&lt;/p&gt;

&lt;p&gt;A vocabulary.&lt;/p&gt;

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

&lt;p&gt;The best libraries don't just provide features.&lt;/p&gt;

&lt;p&gt;They teach developers how to think.&lt;/p&gt;

&lt;p&gt;Every API decision contributes to that language.&lt;/p&gt;

&lt;p&gt;Every naming convention contributes to that language.&lt;/p&gt;

&lt;p&gt;Every abstraction contributes to that language.&lt;/p&gt;

&lt;p&gt;Over time, the library begins expressing values.&lt;/p&gt;

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

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

&lt;p&gt;The more systems I build, the less interested I become in implementation details leaking into every layer.&lt;/p&gt;

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

&lt;p&gt;Sometimes it matters a lot.&lt;/p&gt;

&lt;p&gt;But most developers aren't trying to express implementation.&lt;/p&gt;

&lt;p&gt;They're trying to express intent.&lt;/p&gt;

&lt;p&gt;They know what they want the system to accomplish.&lt;/p&gt;

&lt;p&gt;The challenge is communicating that intent clearly.&lt;/p&gt;

&lt;p&gt;Good abstractions reduce implementation complexity.&lt;/p&gt;

&lt;p&gt;Great abstractions make intent obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Forward
&lt;/h2&gt;

&lt;p&gt;I don't think imperative programming is going away.&lt;/p&gt;

&lt;p&gt;I don't think declarative programming is going away.&lt;/p&gt;

&lt;p&gt;Both remain incredibly useful.&lt;/p&gt;

&lt;p&gt;But I do think software is slowly moving toward systems that understand intent.&lt;/p&gt;

&lt;p&gt;Systems that allow us to describe goals.&lt;/p&gt;

&lt;p&gt;Systems that translate purpose into implementation.&lt;/p&gt;

&lt;p&gt;Systems that focus less on mechanics and more on outcomes.&lt;/p&gt;

&lt;p&gt;Maybe that isn't a new programming paradigm.&lt;/p&gt;

&lt;p&gt;Maybe it's simply a design philosophy.&lt;/p&gt;

&lt;p&gt;Either way, it's a direction I find myself increasingly drawn toward.&lt;/p&gt;

&lt;p&gt;Not because it hides complexity.&lt;/p&gt;

&lt;p&gt;But because it lets developers focus on what they actually mean.&lt;/p&gt;

&lt;p&gt;And sometimes meaning is more important than mechanics.&lt;/p&gt;

</description>
      <category>api</category>
      <category>architecture</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Road To KiwiEngine #16: Why KiwiEngine Is Becoming An Ecosystem</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Fri, 12 Jun 2026 17:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/road-to-kiwiengine-16-why-kiwiengine-is-becoming-an-ecosystem-92m</link>
      <guid>https://dev.to/stinklewinks/road-to-kiwiengine-16-why-kiwiengine-is-becoming-an-ecosystem-92m</guid>
      <description>&lt;p&gt;One of the questions I get occasionally is:&lt;/p&gt;

&lt;p&gt;"Why are you building so many different projects?"&lt;/p&gt;

&lt;p&gt;It's a fair question.&lt;/p&gt;

&lt;p&gt;At first glance, KiwiEngine can look like a collection of unrelated tools.&lt;/p&gt;

&lt;p&gt;There's Juice.&lt;/p&gt;

&lt;p&gt;There's Seltzer.&lt;/p&gt;

&lt;p&gt;There's KiwiPress.&lt;/p&gt;

&lt;p&gt;There's Nectarine.&lt;/p&gt;

&lt;p&gt;There's Sugar.&lt;/p&gt;

&lt;p&gt;Then there are conversations about AI, hardware, local-first computing, contracts, and architecture.&lt;/p&gt;

&lt;p&gt;From the outside, it can seem like a lot of different directions.&lt;/p&gt;

&lt;p&gt;From my perspective, it's actually the opposite.&lt;/p&gt;

&lt;p&gt;They're all moving toward the same destination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most People See Products
&lt;/h2&gt;

&lt;p&gt;Most people look at a project and see a product.&lt;/p&gt;

&lt;p&gt;A website.&lt;/p&gt;

&lt;p&gt;A framework.&lt;/p&gt;

&lt;p&gt;A library.&lt;/p&gt;

&lt;p&gt;A tool.&lt;/p&gt;

&lt;p&gt;A plugin.&lt;/p&gt;

&lt;p&gt;And that's understandable because products are the things users interact with.&lt;/p&gt;

&lt;p&gt;But when I look at technology, I tend to see ecosystems.&lt;/p&gt;

&lt;p&gt;I don't just see a website.&lt;/p&gt;

&lt;p&gt;I see content management.&lt;/p&gt;

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

&lt;p&gt;Data storage.&lt;/p&gt;

&lt;p&gt;Deployment.&lt;/p&gt;

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

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

&lt;p&gt;Monitoring.&lt;/p&gt;

&lt;p&gt;Infrastructure.&lt;/p&gt;

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

&lt;p&gt;Workflows.&lt;/p&gt;

&lt;p&gt;The website is only the visible portion of a much larger machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ecosystems Create Leverage
&lt;/h2&gt;

&lt;p&gt;A single tool can solve a problem.&lt;/p&gt;

&lt;p&gt;An ecosystem can solve classes of problems.&lt;/p&gt;

&lt;p&gt;That's a distinction that has become increasingly important to me.&lt;/p&gt;

&lt;p&gt;If I build a UI library, that's useful.&lt;/p&gt;

&lt;p&gt;If I build a UI library that works naturally with my server framework, content platform, data layer, and deployment workflow, that's leverage.&lt;/p&gt;

&lt;p&gt;Every component becomes more valuable because it understands the others.&lt;/p&gt;

&lt;p&gt;This is why operating systems are powerful.&lt;/p&gt;

&lt;p&gt;This is why game engines are powerful.&lt;/p&gt;

&lt;p&gt;This is why successful platforms tend to outlast individual products.&lt;/p&gt;

&lt;p&gt;The value isn't just the pieces.&lt;/p&gt;

&lt;p&gt;The value is how the pieces work together.&lt;/p&gt;

&lt;p&gt;Why KiwiEngine Has Multiple Projects&lt;/p&gt;

&lt;p&gt;Each project in KiwiEngine exists because it solves a recurring problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Juice
&lt;/h3&gt;

&lt;p&gt;Design systems and user interfaces.&lt;/p&gt;

&lt;h3&gt;
  
  
  Seltzer
&lt;/h3&gt;

&lt;p&gt;Communication between systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  KiwiPress
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  Nectarine
&lt;/h3&gt;

&lt;p&gt;Data and backend management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sugar
&lt;/h3&gt;

&lt;p&gt;Visual composition and development.&lt;/p&gt;

&lt;p&gt;Viewed independently, they are separate projects.&lt;/p&gt;

&lt;p&gt;Viewed together, they're pieces of a larger platform.&lt;/p&gt;

&lt;p&gt;Each project reduces friction for the next.&lt;/p&gt;

&lt;p&gt;Each project strengthens the others.&lt;/p&gt;

&lt;p&gt;Each project contributes to the ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building The Infrastructure First
&lt;/h2&gt;

&lt;p&gt;One thing I've learned over the years is that products come and go.&lt;/p&gt;

&lt;p&gt;Infrastructure tends to stick around.&lt;/p&gt;

&lt;p&gt;People remember applications.&lt;/p&gt;

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

&lt;p&gt;When I create something today, I don't just ask:&lt;/p&gt;

&lt;p&gt;"Can I build this?"&lt;/p&gt;

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

&lt;p&gt;"Can I build ten things with this?"&lt;/p&gt;

&lt;p&gt;That question changes everything.&lt;/p&gt;

&lt;p&gt;It pushes me toward reusable systems.&lt;/p&gt;

&lt;p&gt;Reusable contracts.&lt;/p&gt;

&lt;p&gt;Reusable architecture.&lt;/p&gt;

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

&lt;p&gt;Eventually, those pieces begin to resemble infrastructure rather than individual products.&lt;/p&gt;

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

&lt;p&gt;This thinking doesn't stop at software.&lt;/p&gt;

&lt;p&gt;It applies to hardware.&lt;/p&gt;

&lt;p&gt;It applies to AI.&lt;/p&gt;

&lt;p&gt;It applies to education.&lt;/p&gt;

&lt;p&gt;It applies to business.&lt;/p&gt;

&lt;p&gt;A ranch isn't just land.&lt;/p&gt;

&lt;p&gt;It's fencing, water, feed, equipment, maintenance, and operations.&lt;/p&gt;

&lt;p&gt;A recording studio isn't just microphones.&lt;/p&gt;

&lt;p&gt;It's acoustics, instruments, software, workflows, and people.&lt;/p&gt;

&lt;p&gt;A business isn't just products.&lt;/p&gt;

&lt;p&gt;It's systems that consistently create value.&lt;/p&gt;

&lt;p&gt;The same principle appears everywhere.&lt;/p&gt;

&lt;p&gt;Healthy ecosystems outperform isolated components.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Long-Term Vision
&lt;/h2&gt;

&lt;p&gt;The goal of KiwiEngine isn't to become the biggest framework.&lt;/p&gt;

&lt;p&gt;The goal isn't to compete with every tool on the market.&lt;/p&gt;

&lt;p&gt;The goal is to create a coherent ecosystem that helps me build things faster, maintain them longer, and understand them more deeply.&lt;/p&gt;

&lt;p&gt;Some people build products.&lt;/p&gt;

&lt;p&gt;Some people build companies.&lt;/p&gt;

&lt;p&gt;Some people build ecosystems.&lt;/p&gt;

&lt;p&gt;The longer I work on KiwiEngine, the more I realize that's what I'm actually building.&lt;/p&gt;

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

&lt;p&gt;Not a library.&lt;/p&gt;

&lt;p&gt;Not even a collection of tools.&lt;/p&gt;

&lt;p&gt;An ecosystem.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Road To KiwiEngine #15: Why I Care More About Systems Than Features</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Thu, 11 Jun 2026 16:00:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/road-to-kiwiengine-15-why-i-care-more-about-systems-than-features-4ia4</link>
      <guid>https://dev.to/stinklewinks/road-to-kiwiengine-15-why-i-care-more-about-systems-than-features-4ia4</guid>
      <description>&lt;p&gt;One of the reasons I often find myself disagreeing with modern software trends is that many conversations revolve around features.&lt;/p&gt;

&lt;p&gt;How many features does it have?&lt;/p&gt;

&lt;p&gt;How quickly can we add more?&lt;/p&gt;

&lt;p&gt;What can we put on the marketing page?&lt;/p&gt;

&lt;p&gt;What can we announce next?&lt;/p&gt;

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

&lt;p&gt;But I care far more about systems.&lt;/p&gt;

&lt;p&gt;Because at the end of the day, people don't buy features.&lt;/p&gt;

&lt;p&gt;They buy outcomes.&lt;/p&gt;

&lt;p&gt;And outcomes come from systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Car Analogy
&lt;/h2&gt;

&lt;p&gt;One of the easiest ways to explain my thinking is with cars.&lt;/p&gt;

&lt;p&gt;A car is made up of thousands of individual components.&lt;/p&gt;

&lt;p&gt;An engine.&lt;/p&gt;

&lt;p&gt;A transmission.&lt;/p&gt;

&lt;p&gt;Suspension.&lt;/p&gt;

&lt;p&gt;Brakes.&lt;/p&gt;

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

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

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

&lt;p&gt;Sensors.&lt;/p&gt;

&lt;p&gt;Wiring.&lt;/p&gt;

&lt;p&gt;Each component is important.&lt;/p&gt;

&lt;p&gt;But nobody walks into a dealership and says:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"I'd like to purchase six pistons, a transmission housing, and a fuel injector."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They buy a car.&lt;/p&gt;

&lt;p&gt;They buy transportation.&lt;/p&gt;

&lt;p&gt;They buy a complete system.&lt;/p&gt;

&lt;p&gt;The individual parts only matter because they contribute to the overall experience.&lt;/p&gt;

&lt;p&gt;The customer doesn't want to think about every moving piece.&lt;/p&gt;

&lt;p&gt;They want to get in, turn the key, and drive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drivers and Mechanics
&lt;/h2&gt;

&lt;p&gt;This is where I think technology often loses its way.&lt;/p&gt;

&lt;p&gt;Users are drivers.&lt;/p&gt;

&lt;p&gt;Engineers are mechanics.&lt;/p&gt;

&lt;p&gt;A driver should be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start the vehicle&lt;/li&gt;
&lt;li&gt;Fill it with fuel&lt;/li&gt;
&lt;li&gt;Check the oil&lt;/li&gt;
&lt;li&gt;Wash it&lt;/li&gt;
&lt;li&gt;Perform light maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's about it.&lt;/p&gt;

&lt;p&gt;They shouldn't need to understand combustion timing, transmission gearing, or electrical diagnostics to get to work.&lt;/p&gt;

&lt;p&gt;The mechanic, however, lives in the details.&lt;/p&gt;

&lt;p&gt;They tune the system.&lt;/p&gt;

&lt;p&gt;They replace parts.&lt;/p&gt;

&lt;p&gt;They troubleshoot failures.&lt;/p&gt;

&lt;p&gt;They recommend upgrades.&lt;/p&gt;

&lt;p&gt;They understand how the pieces fit together.&lt;/p&gt;

&lt;p&gt;Technology is exactly the same in my mind.&lt;/p&gt;

&lt;p&gt;Users should be able to focus on their goals.&lt;/p&gt;

&lt;p&gt;Engineers should focus on the machinery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features Are Parts
&lt;/h2&gt;

&lt;p&gt;This is where I think software conversations sometimes become backwards.&lt;/p&gt;

&lt;p&gt;A feature is a component.&lt;/p&gt;

&lt;p&gt;A login screen is a component.&lt;/p&gt;

&lt;p&gt;A dashboard is a component.&lt;/p&gt;

&lt;p&gt;A database is a component.&lt;/p&gt;

&lt;p&gt;An API is a component.&lt;/p&gt;

&lt;p&gt;AI integration is a component.&lt;/p&gt;

&lt;p&gt;Individually, they're useful.&lt;/p&gt;

&lt;p&gt;But they're not the product.&lt;/p&gt;

&lt;p&gt;They're parts of a larger system.&lt;/p&gt;

&lt;p&gt;The product is the experience those parts create when they work together.&lt;/p&gt;

&lt;p&gt;The product is the journey.&lt;/p&gt;

&lt;p&gt;The product is the outcome.&lt;/p&gt;

&lt;p&gt;The product is the system.&lt;/p&gt;

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

&lt;p&gt;When I'm working on KiwiEngine, I rarely think about individual modules first.&lt;/p&gt;

&lt;p&gt;I think about the complete system.&lt;/p&gt;

&lt;p&gt;Juice isn't just CSS.&lt;/p&gt;

&lt;p&gt;Seltzer isn't just a server.&lt;/p&gt;

&lt;p&gt;KiwiPress isn't just WordPress integration.&lt;/p&gt;

&lt;p&gt;Sugar isn't just a visual builder.&lt;/p&gt;

&lt;p&gt;Nectarine isn't just data management.&lt;/p&gt;

&lt;p&gt;Each one solves a specific problem.&lt;/p&gt;

&lt;p&gt;But together they contribute to something larger.&lt;/p&gt;

&lt;p&gt;A system for building applications.&lt;/p&gt;

&lt;p&gt;A system for building businesses.&lt;/p&gt;

&lt;p&gt;A system for building products.&lt;/p&gt;

&lt;p&gt;A system for building future systems.&lt;/p&gt;

&lt;p&gt;That's a very different mindset than simply creating another library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good Systems Hide Complexity
&lt;/h2&gt;

&lt;p&gt;One of the signs of a good system is that most people never think about it.&lt;/p&gt;

&lt;p&gt;A person driving to work isn't thinking about fuel injection timing.&lt;/p&gt;

&lt;p&gt;A homeowner isn't thinking about power generation when they flip a light switch.&lt;/p&gt;

&lt;p&gt;A musician isn't thinking about signal processing every time they strum a guitar.&lt;/p&gt;

&lt;p&gt;The system absorbs complexity so the user can focus on what they actually want to accomplish.&lt;/p&gt;

&lt;p&gt;Good software should do the same.&lt;/p&gt;

&lt;p&gt;The more complexity we can absorb into the system, the more value we create for the people using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Systems Compound
&lt;/h2&gt;

&lt;p&gt;Features eventually become outdated.&lt;/p&gt;

&lt;p&gt;Systems evolve.&lt;/p&gt;

&lt;p&gt;Features get replaced.&lt;/p&gt;

&lt;p&gt;Systems adapt.&lt;/p&gt;

&lt;p&gt;Features come and go.&lt;/p&gt;

&lt;p&gt;Systems persist.&lt;/p&gt;

&lt;p&gt;This is one of the reasons I've become increasingly interested in architecture, contracts, local-first computing, hardware, and sovereign AI.&lt;/p&gt;

&lt;p&gt;At first glance, these topics seem unrelated.&lt;/p&gt;

&lt;p&gt;But they all stem from the same question:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"What kind of system are we building?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Because once you start thinking in systems, every decision becomes connected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Beyond Features
&lt;/h2&gt;

&lt;p&gt;The older I get, the less interested I become in chasing the newest feature or trend.&lt;/p&gt;

&lt;p&gt;Instead, I'm interested in foundations.&lt;/p&gt;

&lt;p&gt;Architectures.&lt;/p&gt;

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

&lt;p&gt;Workflows.&lt;/p&gt;

&lt;p&gt;Infrastructure.&lt;/p&gt;

&lt;p&gt;Systems.&lt;/p&gt;

&lt;p&gt;Because that's ultimately what customers interact with.&lt;/p&gt;

&lt;p&gt;They don't buy code.&lt;/p&gt;

&lt;p&gt;They don't buy frameworks.&lt;/p&gt;

&lt;p&gt;They don't buy APIs.&lt;/p&gt;

&lt;p&gt;They buy the result those things create.&lt;/p&gt;

&lt;p&gt;Just like nobody buys a collection of car parts.&lt;/p&gt;

&lt;p&gt;They buy a vehicle that gets them where they want to go.&lt;/p&gt;

&lt;p&gt;And that's why I care more about systems than features.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Road To KiwiEngine is a series documenting the philosophy, architecture, successes, mistakes, and lessons learned while building KiwiEngine and its ecosystem one module at a time.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>softwareengineering</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Road To KiwiEngine #14: Why Everything In KiwiEngine Starts With Contracts</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Wed, 10 Jun 2026 10:57:40 +0000</pubDate>
      <link>https://dev.to/stinklewinks/road-to-kiwiengine-14-why-everything-in-kiwiengine-starts-with-contracts-11fi</link>
      <guid>https://dev.to/stinklewinks/road-to-kiwiengine-14-why-everything-in-kiwiengine-starts-with-contracts-11fi</guid>
      <description>&lt;p&gt;Most software projects begin with frameworks.&lt;/p&gt;

&lt;p&gt;I begin with contracts.&lt;/p&gt;

&lt;p&gt;Over the years, I've watched countless projects become tightly coupled to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frameworks,&lt;/li&gt;
&lt;li&gt;databases,&lt;/li&gt;
&lt;li&gt;cloud providers,&lt;/li&gt;
&lt;li&gt;libraries,&lt;/li&gt;
&lt;li&gt;and implementation details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is usually the same.&lt;/p&gt;

&lt;p&gt;Changing anything becomes expensive.&lt;/p&gt;

&lt;p&gt;Replacing anything becomes painful.&lt;/p&gt;

&lt;p&gt;Innovation slows down.&lt;/p&gt;

&lt;p&gt;That's why I've become obsessed with contracts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is A Contract?
&lt;/h2&gt;

&lt;p&gt;A contract is simply an agreement.&lt;/p&gt;

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

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

&lt;p&gt;An agreement.&lt;/p&gt;

&lt;p&gt;It defines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inputs,&lt;/li&gt;
&lt;li&gt;outputs,&lt;/li&gt;
&lt;li&gt;expectations,&lt;/li&gt;
&lt;li&gt;behaviors,&lt;/li&gt;
&lt;li&gt;and guarantees.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without caring how the work gets done.&lt;/p&gt;

&lt;p&gt;The implementation can change.&lt;/p&gt;

&lt;p&gt;The contract remains stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Contracts Matter
&lt;/h2&gt;

&lt;p&gt;Imagine replacing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL with MySQL&lt;/li&gt;
&lt;li&gt;WordPress with another CMS&lt;/li&gt;
&lt;li&gt;Local AI with cloud AI&lt;/li&gt;
&lt;li&gt;AWS with Azure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most systems struggle because they were designed around implementations.&lt;/p&gt;

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

&lt;p&gt;The tighter the coupling, the more painful the migration.&lt;/p&gt;

&lt;p&gt;The stronger the contract, the easier the replacement.&lt;/p&gt;

&lt;h2&gt;
  
  
  KiwiEngine's Philosophy
&lt;/h2&gt;

&lt;p&gt;Every major component should communicate through predictable contracts.&lt;/p&gt;

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

&lt;p&gt;Not hidden dependencies.&lt;/p&gt;

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

&lt;p&gt;Contracts create freedom.&lt;/p&gt;

&lt;p&gt;Freedom to replace.&lt;br&gt;
Freedom to scale.&lt;br&gt;
Freedom to evolve.&lt;/p&gt;

&lt;p&gt;That's the foundation of KiwiEngine.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>opensource</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Road To KiwiEngine #13: Why I Think The Future Of Computing Is Local-First</title>
      <dc:creator>Drew Marshall</dc:creator>
      <pubDate>Mon, 08 Jun 2026 16:45:00 +0000</pubDate>
      <link>https://dev.to/stinklewinks/road-to-kiwiengine-13-why-i-think-the-future-of-computing-is-local-first-3g07</link>
      <guid>https://dev.to/stinklewinks/road-to-kiwiengine-13-why-i-think-the-future-of-computing-is-local-first-3g07</guid>
      <description>&lt;p&gt;For over a decade, the industry pushed everything toward the cloud.&lt;/p&gt;

&lt;p&gt;Applications.&lt;br&gt;
Storage.&lt;br&gt;
Media.&lt;br&gt;
Development environments.&lt;br&gt;
Infrastructure.&lt;br&gt;
Intelligence.&lt;/p&gt;

&lt;p&gt;And for a while, it made perfect sense.&lt;/p&gt;

&lt;p&gt;Centralization solved a lot of problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accessibility,&lt;/li&gt;
&lt;li&gt;scalability,&lt;/li&gt;
&lt;li&gt;synchronization,&lt;/li&gt;
&lt;li&gt;deployment,&lt;/li&gt;
&lt;li&gt;and collaboration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I think we accidentally created a new problem in the process:&lt;/p&gt;

&lt;p&gt;Dependence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cloud Changed Ownership
&lt;/h2&gt;

&lt;p&gt;Modern computing often feels less like ownership and more like permission.&lt;/p&gt;

&lt;p&gt;You don’t really own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the platform,&lt;/li&gt;
&lt;li&gt;the infrastructure,&lt;/li&gt;
&lt;li&gt;the intelligence,&lt;/li&gt;
&lt;li&gt;the workflow,&lt;/li&gt;
&lt;li&gt;or sometimes even the data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You lease access to them.&lt;/p&gt;

&lt;p&gt;That changes the relationship between users and technology entirely.&lt;/p&gt;

&lt;p&gt;When access becomes the product:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;subscriptions become permanent,&lt;/li&gt;
&lt;li&gt;lock-in becomes strategic,&lt;/li&gt;
&lt;li&gt;interoperability declines,&lt;/li&gt;
&lt;li&gt;and users slowly lose operational control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think we’re reaching the point where people are starting to notice that tension.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local-First Does Not Mean Offline-Only
&lt;/h2&gt;

&lt;p&gt;One misconception about local-first systems is that people assume it means:&lt;br&gt;
“never connected to the internet.”&lt;/p&gt;

&lt;p&gt;That’s not what I mean at all.&lt;/p&gt;

&lt;p&gt;The future I envision is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hybrid,&lt;/li&gt;
&lt;li&gt;loosely connected,&lt;/li&gt;
&lt;li&gt;and synchronization-driven.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A local-first system should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;work independently,&lt;/li&gt;
&lt;li&gt;synchronize intelligently,&lt;/li&gt;
&lt;li&gt;connect intentionally,&lt;/li&gt;
&lt;li&gt;and degrade gracefully when services disappear.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The web should enhance the system.&lt;br&gt;
Not become the system.&lt;/p&gt;

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

&lt;p&gt;One thing I think the industry underestimates is resilience.&lt;/p&gt;

&lt;p&gt;What happens when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs change?&lt;/li&gt;
&lt;li&gt;providers disappear?&lt;/li&gt;
&lt;li&gt;subscriptions become unaffordable?&lt;/li&gt;
&lt;li&gt;regions go down?&lt;/li&gt;
&lt;li&gt;internet access becomes unstable?&lt;/li&gt;
&lt;li&gt;platforms revoke access?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern systems often fail catastrophically because they assume permanent connectivity and permanent provider stability.&lt;/p&gt;

&lt;p&gt;I think that assumption is dangerous.&lt;/p&gt;

&lt;p&gt;Especially for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;businesses,&lt;/li&gt;
&lt;li&gt;creators,&lt;/li&gt;
&lt;li&gt;infrastructure,&lt;/li&gt;
&lt;li&gt;education,&lt;/li&gt;
&lt;li&gt;and AI workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI Makes Local-First More Important
&lt;/h2&gt;

&lt;p&gt;Ironically, AI is one of the biggest reasons I think local-first computing is returning.&lt;/p&gt;

&lt;p&gt;Because AI is becoming operational infrastructure.&lt;/p&gt;

&lt;p&gt;If your:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workflows,&lt;/li&gt;
&lt;li&gt;assistants,&lt;/li&gt;
&lt;li&gt;automation,&lt;/li&gt;
&lt;li&gt;documentation,&lt;/li&gt;
&lt;li&gt;and business operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;all depend entirely on external platforms, then your operational intelligence becomes rented.&lt;/p&gt;

&lt;p&gt;That creates fragility.&lt;/p&gt;

&lt;p&gt;I think local AI combined with selective synchronization will become incredibly important over the next decade.&lt;/p&gt;

&lt;p&gt;Not because cloud AI disappears.&lt;/p&gt;

&lt;p&gt;But because hybrid intelligence becomes more practical.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Edge Computing Renaissance
&lt;/h2&gt;

&lt;p&gt;I think we’re entering a new edge computing era.&lt;/p&gt;

&lt;p&gt;Smaller systems are becoming more capable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mini PCs,&lt;/li&gt;
&lt;li&gt;local servers,&lt;/li&gt;
&lt;li&gt;ARM devices,&lt;/li&gt;
&lt;li&gt;AI accelerators,&lt;/li&gt;
&lt;li&gt;embedded systems,&lt;/li&gt;
&lt;li&gt;and home infrastructure appliances.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The line between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;server,&lt;/li&gt;
&lt;li&gt;desktop,&lt;/li&gt;
&lt;li&gt;router,&lt;/li&gt;
&lt;li&gt;AI appliance,&lt;/li&gt;
&lt;li&gt;and media system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;is beginning to blur.&lt;/p&gt;

&lt;p&gt;That’s extremely interesting to me from both a software and hardware perspective.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Shapes KiwiEngine
&lt;/h2&gt;

&lt;p&gt;A lot of the philosophy behind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KiwiEngine,&lt;/li&gt;
&lt;li&gt;KiwiHome,&lt;/li&gt;
&lt;li&gt;WebEngine,&lt;/li&gt;
&lt;li&gt;and the broader CitrusWorx ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;comes from this exact line of thinking.&lt;/p&gt;

&lt;p&gt;I’m increasingly interested in systems that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modular,&lt;/li&gt;
&lt;li&gt;portable,&lt;/li&gt;
&lt;li&gt;repairable,&lt;/li&gt;
&lt;li&gt;composable,&lt;/li&gt;
&lt;li&gt;and user-owned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not because I’m anti-cloud.&lt;/p&gt;

&lt;p&gt;But because I think healthy systems should preserve user sovereignty wherever possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future Isn’t Centralized Or Decentralized
&lt;/h2&gt;

&lt;p&gt;I actually think the future is neither fully centralized nor fully decentralized.&lt;/p&gt;

&lt;p&gt;I think it’s coordinated.&lt;/p&gt;

&lt;p&gt;A mesh of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local systems,&lt;/li&gt;
&lt;li&gt;cloud systems,&lt;/li&gt;
&lt;li&gt;edge infrastructure,&lt;/li&gt;
&lt;li&gt;AI workers,&lt;/li&gt;
&lt;li&gt;and synchronization layers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;working together intentionally.&lt;/p&gt;

&lt;p&gt;That’s the future I want to help build.&lt;/p&gt;

&lt;p&gt;Not computing that belongs to platforms.&lt;/p&gt;

&lt;p&gt;Computing that belongs to people.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>opensource</category>
      <category>computerscience</category>
      <category>software</category>
    </item>
  </channel>
</rss>
