<?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: cartmann68</title>
    <description>The latest articles on DEV Community by cartmann68 (@cartmann68).</description>
    <link>https://dev.to/cartmann68</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3643040%2F09df1c9c-884e-40fd-b13e-b5c1eef12716.png</url>
      <title>DEV Community: cartmann68</title>
      <link>https://dev.to/cartmann68</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cartmann68"/>
    <language>en</language>
    <item>
      <title>Who should decide UI?</title>
      <dc:creator>cartmann68</dc:creator>
      <pubDate>Wed, 03 Dec 2025 09:43:35 +0000</pubDate>
      <link>https://dev.to/cartmann68/who-should-decide-ui-162j</link>
      <guid>https://dev.to/cartmann68/who-should-decide-ui-162j</guid>
      <description>&lt;p&gt;What do you do as a product manager when your design team push for a clean, modern interface, while developers argue for the old, familiar UI?&lt;/p&gt;

&lt;p&gt;tldr;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You should always go with the solution of the designers because they are designing for users not programmers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Programmers are not the audience.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Developers spend their life inside complex tools, terminals, logs, IDEs — clutter doesn’t bother them because they’re trained to survive it. But &lt;strong&gt;users are not developers&lt;/strong&gt;. Normal people don’t want interfaces that look like a cockpit from the 1990s.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Designers are literally trained to solve this problem.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A designer’s whole job is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;visual hierarchy&lt;/li&gt;
&lt;li&gt;readability&lt;/li&gt;
&lt;li&gt;spacing&lt;/li&gt;
&lt;li&gt;usability&lt;/li&gt;
&lt;li&gt;clarity&lt;/li&gt;
&lt;li&gt;human factors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A programmer’s job is not design. Their taste is shaped by tools built for power-users.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Old, cluttered interfaces only feel “better” to developers because they expose internal structure.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Developers like seeing everything at once because it mirrors how &lt;em&gt;they&lt;/em&gt; think: data → structure → options → panels → nested menus. Users, on the other hand, get overwhelmed and leave.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Modern UI isn’t “minimalism for the sake of minimalism.”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Good modern design reduces friction. Not fewer features — fewer &lt;em&gt;obstacles.&lt;/em&gt; Clearer choices. Better flow. Safer defaults.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Every successful product on earth follows the designer, not the engineer&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Apple, Google, Stripe, Figma etc. all prefer a clean and modern UI. If “cluttered 1990s UI” were better for users, the entire industry wouldn’t have abandoned it.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. &lt;strong&gt;Engineers usually change their mind once they &lt;em&gt;use&lt;/em&gt; the cleaner version&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;At first they complain because everything moved. A week later they admit the new design feels calmer, faster, easier to navigate.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. &lt;strong&gt;The business side also points in one direction&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Clean modern UI =&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lower support tickets&lt;/li&gt;
&lt;li&gt;higher conversion&lt;/li&gt;
&lt;li&gt;higher user trust&lt;/li&gt;
&lt;li&gt;easier onboarding&lt;/li&gt;
&lt;li&gt;better perceived quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clunky UI = “This looks old, I don’t trust it.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Design for users, not for developers.&lt;/strong&gt;&lt;br&gt;
Follow the clean, modern design.&lt;br&gt;
Developers can adapt — users won’t.&lt;/p&gt;

&lt;p&gt;If you want harmony between teams, the compromise is this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UI = clean, modern&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced settings = tucked away&lt;/strong&gt; so power-users can still access them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal developer tools&lt;/strong&gt; can be as ugly and cramped as programmers enjoy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Customer-facing products should be modern and clean.&lt;/p&gt;

</description>
      <category>management</category>
      <category>ui</category>
      <category>discuss</category>
      <category>design</category>
    </item>
    <item>
      <title>🔥</title>
      <dc:creator>cartmann68</dc:creator>
      <pubDate>Wed, 03 Dec 2025 09:30:46 +0000</pubDate>
      <link>https://dev.to/cartmann68/-4n7o</link>
      <guid>https://dev.to/cartmann68/-4n7o</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/martinszeltins" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F189989%2Ff7e5f04d-bb5b-4f24-9980-d5ea7e7d139b.png" alt="martinszeltins"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/martinszeltins/why-javascript-is-the-best-programming-language-in-the-world-4062" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Why JavaScript Is the Best Programming Language in the World&lt;/h2&gt;
      &lt;h3&gt;Neo Hacker ・ Aug 29&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#react&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why you need event-driven architecture</title>
      <dc:creator>cartmann68</dc:creator>
      <pubDate>Wed, 03 Dec 2025 09:25:49 +0000</pubDate>
      <link>https://dev.to/cartmann68/why-you-need-event-driven-architecture-5dk5</link>
      <guid>https://dev.to/cartmann68/why-you-need-event-driven-architecture-5dk5</guid>
      <description>&lt;h3&gt;
  
  
  Events are often used to decouple logic and keep a system modular.
&lt;/h3&gt;

&lt;p&gt;Events allow for a very modular architecture. Your system emits events at different points in time and this allows you to create a completely independent and pluggable module which hooks into these events without needing to make any changes to the core part of your system. For example, you might create a Notification module which listens to various events in your system and sends e-mail, text messages, push notifications and performs other actions related to notifying your users. All of this without ever needing to change any part of your existing codebase. Your module can have a single responsibility, be completely self-contained and independent.&lt;/p&gt;

&lt;p&gt;For example, POS systems often have a local law requiring them to implement the payment system as a completely separate module. Without events and hooks this becomes impossible. You look at the code and see that everything depends on everything, the payment system is intermingled with every other part of the system. You throw your arms up in the air and say, no way, this can't be done. Payments are the very core of a POS system. It runs through everything. But that is just a sign of a badly architected system. It doesn't need to be this way. Everything should not depend on everything. That's a brittle system. With an event-driven, modular architecture you simply emit events and let the payment module hook into these events and handle the logic.&lt;/p&gt;

&lt;p&gt;Think of a radio broadcast (emitting events). The broadcaster simply broadcasts into the air. Anyone who wants to and has a radio (listener) tuned to the frequency hears the message. The broadcaster doesn’t know or care who’s listening.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>distributedsystems</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Why abstractions are good</title>
      <dc:creator>cartmann68</dc:creator>
      <pubDate>Wed, 03 Dec 2025 09:18:50 +0000</pubDate>
      <link>https://dev.to/cartmann68/why-abstractions-are-good-jim</link>
      <guid>https://dev.to/cartmann68/why-abstractions-are-good-jim</guid>
      <description>&lt;p&gt;Have you noticed how our world is built on abstractions? Abstractions are everywhere. We have abstractions in code - one library depends on another library which depends on another and so on. But it's not just code. We use abstractions every day. Every time you plug something into a wall outlet - you are using an abstraction, a huge electrical infrastructure with its own abstractions, completely invisible and hidden from you. When you drive your car, you don't operate with gears and wires, instead you turn a key, push a button, turn the steering wheel. You don't care how it works - you don't even &lt;em&gt;want&lt;/em&gt; to know how it works. You're using abstractions to get where you need to go.&lt;/p&gt;

&lt;h3&gt;
  
  
  A World without abstractions and dependencies
&lt;/h3&gt;

&lt;p&gt;Imagine a world without abstractions. Let's say you wanted to build a house. You'd need tools and materials but if you couldn't rely on abstractions and depend on the work of others, you would need to create all the tools and materials yourself. Just think of how much work goes into making something as simple as cement. You need limestone, clay, sand, and gypsum. But in order to get those things you need quarries, explosives, heavy machinery, fuel, trained operators, safety systems, transportation. And each of those depends on even more things. It's almost an infinite chain of dependencies.&lt;/p&gt;

&lt;p&gt;If you were building a house without using any dependencies, you'd need to create your own tools. Think of how many things are involved in making a power drill - motor, a chuck, a trigger, a shell. A motor needs magnets. Those magnets alone require an entire industry: mining rare earth metals, crushing ore, separating the elements through complex chemical processes, sintering them at high temperatures, machining them, coating them so they don’t corrode.&lt;/p&gt;

&lt;p&gt;In software development, a function relies on a library, that library relies on other libraries, all of it runs inside an environment, which depends on system libraries, which itself sits on top of an operating system, which depends on hardware, which ultimately depends on silicon and the physical world underneath it.&lt;/p&gt;

&lt;p&gt;The real world depends on abstractions, an almost infinite supply chain of dependencies. And that’s the whole point: none of us could ever build anything meaningful alone. We stand on top of the work of millions of people we’ll never meet, quietly building layer after layer so the world feels simple on the surface. Abstractions are what let us make progress. They let us create without having to reinvent the entire universe first.&lt;/p&gt;

&lt;p&gt;Once you see that, you start appreciating the hidden scaffolding underneath everything — and you realize how impossible life would be without it.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What DRY actually means</title>
      <dc:creator>cartmann68</dc:creator>
      <pubDate>Wed, 03 Dec 2025 09:16:26 +0000</pubDate>
      <link>https://dev.to/cartmann68/what-dry-actually-means-3ngj</link>
      <guid>https://dev.to/cartmann68/what-dry-actually-means-3ngj</guid>
      <description>&lt;p&gt;A lot of junior developers misunderstand DRY (Don't Repeat Yourself) as a strict rule against any code duplication. To them DRY means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;never repeat a line of code&lt;/li&gt;
&lt;li&gt;never have two components share similar structure&lt;/li&gt;
&lt;li&gt;never write anything twice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something &lt;em&gt;looks&lt;/em&gt; similar, they feel obligated to merge it, abstract it, or build a “super component” with flags and conditions. Of course, the result is always the same: &lt;strong&gt;Overcomplicated, brittle, unreadable code that was technically DRY — and practically unusable.&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pizza Recipes
&lt;/h2&gt;

&lt;p&gt;Imagine if a cookbook tried to follow the the DRY principle to the extreme. Instead of having separate recipes for different types of pizza, it would try to create one giant single pizza recipe that covers every possible variation - one "single universal pizza recipe".&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use tomato sauce unless you’re making quattro formaggi — in that case, ignore this and jump to the cheese section.&lt;br&gt;
Add pineapple only if not using anchovies or mushrooms. If using both, skip pineapple and go to page 245, see section b.&lt;br&gt;
If using olives, skip basil unless also adding mushrooms…, in that case turn to page 658”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Technically DRY — only one pizza recipe. But completely unusable. In real life, we keep &lt;strong&gt;multiple recipes&lt;/strong&gt;, even if some steps repeat. And that’s &lt;em&gt;correct&lt;/em&gt;. Repetition of harmless steps is not a problem. Confusing everything into one monstrosity &lt;em&gt;is&lt;/em&gt; a problem. It's perfectly fine to have every pizza recipe start with "Take the dough and roll it out." because clarity is more important than eliminating every repeated line.&lt;/p&gt;

&lt;h2&gt;
  
  
  IKEA Furniture Manuals
&lt;/h2&gt;

&lt;p&gt;Imagine if IKEA tried to be DRY by shipping one giant instruction manual for all their furniture instead of separate manuals for each product.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“If assembling a chair, skip to page 573.&lt;br&gt;
If your item uses bolt type B2, follow section 19.&lt;br&gt;
If you’re building something with drawers, go to section 1447 unless it’s the office series…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That would be completely insane and unusable. Instead, IKEA provides &lt;strong&gt;individual manuals&lt;/strong&gt; for each product, even if many steps repeat across manuals. Because clarity is more important than eliminating every repeated step.&lt;/p&gt;

&lt;p&gt;The same principle applies to code. You don't search the codebase for every instance of "class extends Model" to merge them into one mega-class. You create &lt;strong&gt;many small, focused classes&lt;/strong&gt; that are easy to understand and maintain.&lt;/p&gt;

&lt;p&gt;The DRY principle is about avoiding duplication of &lt;em&gt;knowledge&lt;/em&gt;, not avoiding duplication of &lt;em&gt;keystrokes&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Duplicating &lt;em&gt;logic&lt;/em&gt; is bad.&lt;/li&gt;
&lt;li&gt;Duplicating &lt;em&gt;meaning&lt;/em&gt; is bad.&lt;/li&gt;
&lt;li&gt;Duplicating &lt;em&gt;rules&lt;/em&gt; is bad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not about trying to avoid duplicating &lt;em&gt;structure&lt;/em&gt;. It is often the &lt;strong&gt;healthy, maintainable&lt;/strong&gt; thing to do. Don't try to eliminate every repeated line of code by merging unrelated logic, stuffing everything into one mega-component, making endless if-statements, adding flags or creating abstractions nobody understands. That only produces coupled, brittle, unreadable code that is dangerous to change. This is &lt;strong&gt;not&lt;/strong&gt; what DRY means.&lt;/p&gt;

&lt;p&gt;True DRY is about removing duplication of concepts and rules, like centralizing email validation, having one shared price-calculation function, using a composable that handles quantity logic, or extracting truly shared behavior. This produces code that is clear, testable, easy to maintain, and respects boundaries.&lt;/p&gt;

&lt;p&gt;Remember, we don't have one huge pizza recipe or one giant IKEA manual. Nobody wants that.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
